Gamepad & WSN

树莓派使用axel加速apt-get

作者: Gamepader    分类: ARM_Linux        评论: 0    超过0人围观

安装来源:
https://launchpad.net/~ingalex/+archive/ubuntu/sources.list/+sourcepub/1736466/+listing-archive-extra
安装方法:
dpkg -i –force-all ./xxx.deb

05-07
2016

树莓派添加apt-fast加快apt-get速度

作者: Gamepader    分类: ARM_Linux        评论: 0    超过0人围观

PC平台的ubuntu和debian都有apt-fast包, 可以让apt-get工具使用aria2或者axel下载器进行多点下载, 但是官方都没有提供arm下的包.

解包看了一下里面都是shell指令,于是将其移至到树莓派上。步骤如下:

  1. 添加apt-fast主执行脚本
  2. 添加apt-fast.conf配置文件
  3. 添加bash_completion.d文件

添加apt-fast主执行脚本

apt-fast脚本可以位于/usr/sbin目录下,记得chmod +x添加可执行权限, 文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
#!/bin/bash
#
# apt-fast v1.8
# Use this just like aptitude or apt-get for faster package downloading.
#
# Copyright: 2008-2012 Matt Parnell, http://www.mattparnell.com
# Improvements, maintenance, revisions - 2012 Dominique Lasserre
#
# You may distribute this file under the terms of the GNU General
# Public License as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later version.
#
[ -n "$DEBUG" ] && set -xv

# Print colored messages.
# Usage: msg "message text" "message type" "optional: err"
# Message types are 'normal', 'hint' or 'warning'. Warnings and messages with a
# third argument are piped to stderr.
msg(){
case "$2" in
normal) beginColor="$cGreen";;
hint) beginColor="$cBlue";;
warning) beginColor="$cRed";;
esac

if [ -z "$3" ] && [ "$2" != "warning" ]; then
echo -e "${aptfast_prefix} ${beginColor}$1${endColor}";
else
echo -e "${aptfast_prefix} ${beginColor}$1${endColor}"; >&2
fi
}

# Search for known options and decide if root privileges are needed.
root=1 # default value: we need root privileges
option=
for arguments in $@; do
if [ "$arguments" == "upgrade" ] ||
[ "$arguments" == "install" ] ||
[ "$arguments" == "dist-upgrade" ] ||
[ "$arguments" == "build-dep" ]; then
option="install"
break
elif [ "$arguments" == "clean" ] ||
[ "$arguments" == "autoclean" ]; then
option="clean"
break
elif [ "$arguments" == "download" ]; then
option="download"
root=0
break
elif [ "$arguments" == "source" ]; then
option="source"
root=0
break
elif [ "$arguments" == "changelog" ]; then
root=0
break
fi
done

# To handle priority of options correctly (environment over config file vars)
# we need to preserve all interesting env variables. As this wouldn't be
# difficult enough we have to preserve complete env vars (especially if value
# ist set (even empty) or not) when changing context (sudo)...
# Set a 'random' string to all unset variables.
TMP_RANDOM="13979853562951413"
TMP_LCK_FILE="${LCK_FILE-${TMP_RANDOM}}"
TMP_DOWNLOADBEFORE="${DOWNLOADBEFORE-${TMP_RANDOM}}"
TMP__APTMGR="${_APTMGR-${TMP_RANDOM}}"
TMP_APTCACHE="${APTCACHE-${TMP_RANDOM}}"
TMP_DLDIR="${DLDIR-${TMP_RANDOM}}"
TMP_DLLIST="${DLLIST-${TMP_RANDOM}}"
TMP_LISTDIR="${LISTDIR-${TMP_RANDOM}}"
TMP__MAXNUM="${MAXNUM-${TMP_RANDOM}}"
TMP_aptfast_prefix="${aptfast_prefix-${TMP_RANDOM}}"
TMP_APT_FAST_TIMEOUT="${APT_FAST_TIMEOUT-${TMP_RANDOM}}"

# Check for proper privileges.
# Call explicitly with environment variables to get them into root conext.
if [ "$root" = 1 -a "$UID" != 0 ]; then
exec sudo DEBUG="$DEBUG" \
LCK_FILE="$TMP_LCK_FILE" \
DOWNLOADBEFORE="$TMP_DOWNLOADBEFORE" \
_APTMGR="$TMP__APTMGR" \
APTCACHE="$TMP_APTCACHE" \
DLDIR="$TMP_DLDIR" \
DLLIST="$TMP_DLLIST" \
LISTDIR="$TMP_LISTDIR" \
_MAXNUM="$TMP_MAXNUM" \
aptfast_prefix="$TMP_aptfast_prefix" \
APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT" "$0" "[email protected]"
fi

# Define lockfile.
# Use /tmp as directory because everybody (not only root) has to have write
# permissions.
# We need lock for non-root commands too, because we only have one download
# list file.
LCK_FILE="/tmp/apt-fast"
LCK_FD=99

# Set default package manager, APT cache, temporary download dir,
# temporary download list file, and maximal parallel downloads
_APTMGR=apt-get
eval $(apt-config shell APTCACHE Dir::Cache::archives/d)
# Check if APT config option Dir::Cache::archives::apt-fast-partial is set.
eval $(apt-config shell apt_fast_partial Dir::Cache::archives::apt-fast-partial/d)
if [ -z "$apt_fast_partial" ]; then
eval $(apt-config -o Dir::Cache::archives::apt-fast-partial=apt-fast shell DLDIR Dir::Cache::archives::apt-fast-partial/d)
else
eval $(apt-config shell DLDIR Dir::Cache::archives::apt-fast-partial/d)
fi
# Currently not needed.
eval $(apt-config shell LISTDIR Dir::State::lists/d)
DLLIST="/tmp/apt-fast.list"
_MAXNUM=5

# Prefix in front of apt-fast output:
aptfast_prefix=

# Set color variables.
cGreen='\e[0;32m'
cRed='\e[0;31m'
cBlue='\e[0;34m'
endColor='\e[0m'

# Set timout value for apt-fast download confirmation dialog.
# Value is in seconds.
APT_FAST_TIMEOUT=60

# Download command.
_DOWNLOADER='aria2c -c -j ${_MAXNUM} -x ${_MAXNUM} -s ${_MAXNUM} -i ${DLLIST} --min-split-size=1M --connect-timeout=600 --timeout=600 -m0'

# Load config file.
CONFFILE="/etc/apt-fast.conf"
if [ -e "$CONFFILE" ]; then
source "$CONFFILE"
fi

# Now overwrite with preserved values if values were set before (compare with
# 'random' string).
[ "$TMP_LCK_FILE" = "$TMP_RANDOM" ] || LCK_FILE="$TMP_LCK_FILE"
[ "$TMP_DOWNLOADBEFORE" = "$TMP_RANDOM" ] || DOWNLOADBEFORE="$TMP_DOWNLOADBEFORE"
[ "$TMP__APTMGR" = "$TMP_RANDOM" ] || _APTMGR="$TMP__APTMGR"
[ "$TMP_APTCACHE" = "$TMP_RANDOM" ] || APTCACHE="$TMP_APTCACHE"
[ "$TMP_DLDIR" = "$TMP_RANDOM" ] || DLDIR="$TMP_DLDIR"
[ "$TMP_DLLIST" = "$TMP_RANDOM" ] || DLLIST="$TMP_DLLIST"
[ "$TMP_LISTDIR" = "$TMP_RANDOM" ] || LISTDIR="$TMP_LISTDIR"
[ "$TMP__MAXNUM" = "$TMP_RANDOM" ] || _MAXNUM="$TMP__MAXNUM"
[ "$TMP_aptfast_prefix" = "$TMP_RANDOM" ] || aptfast_prefix="$TMP_aptfast_prefix"
[ "$TMP_APT_FAST_TIMEOUT" = "$TMP_RANDOM" ] || APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT"

# Disable colors if not executed in terminal.
if [ ! -t 1 ]; then
cGreen=
cRed=
cBlue=
endColor=
#FIXME: Time not updated.
[ -z "$aptfast_prefix" ] && aptfast_prefix="[apt-fast $(date +"%T")]"
fi

msg_already_running()
{
msg "apt-fast already running!" "warning"
msg "Verify that all apt-fast processes are finished then remove $LCK_FILE.lock and try again." "hint"
}

# Check if a lock file exists.
if [ -f "$LCK_FILE.lock" ]; then
msg_already_running
exit 1
fi

# create the lock file and lock it, die on failure
_create_lock()
{
eval "exec $LCK_FD>\"$LCK_FILE.lock\""

trap "_remove_lock; exit" EXIT
trap "_remove_lock; exit 1;" INT KILL TERM

flock -n $LCK_FD || { msg_already_running; exit 1; }
}

# unlock and remove the lock file
_remove_lock()
{
flock -u "$LCK_FD" 2>/dev/null
rm -f "$LCK_FILE.lock"
}

# Check if mirrors are available. And if so add all mirrors to download list.
get_mirrors(){
# Check all mirror lists.
for mirrorstr in ${MIRRORS[@]}; do
# Build mirrors array from comma separated string.
mirrors=( $(echo "$mirrorstr" | sed "s/\([^,]\+\)\s*,\s*/\1 /g") )
# This does not the \s*,\s* trick, so we use sed instead to make it more
# robust.
#mirrors=( ${mirrorstr//,/ } )
# Check for all mirrors if URI of $1 is from mirror. If so add all other
# mirrors to (resmirror) list and break all loops.
for mirror in ${mirrors[@]}; do
# Real expension.
if [[ "$1" == "$mirror"* ]]; then
filepath=${1#${mirror}}
# Build list for aria download list.
list="${mirrors[@]}"
echo -e "${list// /${filepath}\t}$filepath\n"
return 0
fi
done
done
# No other mirrors found.
echo "$1"
}

# Get the package URLs.
get_uris(){
# Add header to overwrite file.
echo "# apt-fast mirror list: $(date)" > "$DLLIST"
#NOTE: aptitude doesn't have this functionality, so we use apt-get to get
# package URIs.
for urimd5 in $(apt-get -y --print-uris "[email protected]" | egrep "^'(http(s|)|(s|)ftp)://[^']+'.+ MD5Sum:\S+\s*$" |
sed "s/^'\(.\+\)'.*MD5Sum:\(\S\+\)\s*$/\1::MD5Sum:\2/"); do
#for urimd5 in $(cat foo | egrep "^'(http(s|)|(s|)ftp)://[^']+'.+ MD5Sum:\S+\s*$" |
# sed "s/^'\(.\+\)'.*MD5Sum:\(\S\+\)\s*$/\1::MD5Sum:\2/"); do
uri="${urimd5%::MD5Sum:*}"
checksum="${urimd5#*::MD5Sum:}"
echo "$(get_mirrors "$uri")" >> "$DLLIST"
#echo " dir=$DLDIR" >> "$DLLIST"
echo " checksum=md5=$checksum" >> "$DLLIST"
echo " out=$(basename $uri)" >> "$DLLIST"
done
#cat "$DLLIST"
#LCK_RM
#exit
}

# Create and insert a PID number to lockfile.
_create_lock

# Make sure aria2c (in general first parameter from _DOWNLOADER) is available.
CMD="$(echo "$_DOWNLOADER" | sed 's/^\s*\([^ ]\+\).*$/\1/')"
if [ ! $(command -v "$CMD") ]; then
msg "Command not found: $CMD" "normal" "err"
msg "You must configure $CONFFILE to use aria2c or another supported download manager" "normal" "err"
exit 1
fi

# Make sure package manager is available.
if [ ! $(command -v "$_APTMGR") ]; then
msg "\`$_APTMGR\` command not available." "warning"
msg "You must configure $CONFFILE to use either apt-get or aptitude." "normal" "err"
exit 1
fi

# Run actions.
if [ "$option" == "install" ]; then
msg "\n Working... this may take a while." "normal"

get_uris "[email protected]"

# Check if "assume yes" switch is enabled and if yes enable $DOWNLOADBEFORE.
#TODO: Get real value over APT items APT::Get::Assume-Yes and
# APT::Get::Assume-No .
#FIXME: Composed short options e.g. "-yV" are not recognised - we should use
# getopts for proper option passing.
for option in $@; do
if [ "$option" == "-y" ] ||
[ "$option" == "--yes" ] ||
[ "$option" == "--assume-yes" ]; then
DOWNLOADBEFORE=true
elif [ "$option" == "--assume-no" ]; then
DOWNLOADBEFORE=
fi
done

# Test /tmp/apt-fast.list file exists AND not zero bytes.
# Then download all files from the list.
if [ $(cat "$DLLIST" | wc -l) -gt 0 ] && [ ! "$DOWNLOADBEFORE" ]; then
cat "$DLLIST"

echo -ne "${cRed} If you want to download the packages on your system press Y else n to abort. [Y/n]: ${endColor}"

while ((!updsys)); do
read -sn1 -t "$APT_FAST_TIMEOUT" answer || { msg "\n Timed out." "warning"; exit 1; }
case "$answer" in
[JjYy]) result=1; updsys=1 ;;
[Nn]) result=0; updsys=1 ;;
"") result=1; updsys=1 ;;
*) updsys=0 ;;
esac
done
else
result=1
fi

echo

# Continue if answer was right or DOWNLOADBEFORE is enabled.
if ((result)); then
if [ -s "$DLLIST" ]; then
# Test if apt-fast directory is present where we put packages.
if [ ! -d "$DLDIR" ]; then
mkdir -p -- "$DLDIR"
fi

cd "$DLDIR" &>/dev/null || exit 1

eval "${_DOWNLOADER}" # execute downloadhelper command
if [ $(find "$DLDIR" -printf . | wc -c) -gt 1 ]; then
# Move all packages to the apt install directory by force to ensure
# already existing debs which may be incomplete are replaced
find -type f -name "*.deb" -execdir mv -ft "$APTCACHE" {} \+
fi
cd - &>/dev/null
fi
else
exit 1
fi

"${_APTMGR}" "[email protected]"

elif [ "$option" == "clean" ]; then
"${_APTMGR}" "[email protected]" && {
find "$DLDIR" -maxdepth 1 -type f -delete
[ -f "$DLLIST" ] && rm -f -- "$DLLIST"*
}

elif [ "$option" == "download" ]; then
get_uris "[email protected]"
eval "${_DOWNLOADER}"

elif [ "$option" == "source" ]; then
msg "\n Working... this may take a while.\n" "normal"
get_uris "[email protected]"
eval "${_DOWNLOADER}"
# We use APT manager here to provide more verbose output. This method is
# slightly slower then extractiong packages manually after download but also
# more hardened (e.g. some options like --compile are available).
"${_APTMGR}" "[email protected]"
# Uncomment following snippet to extract source directly and comment
# both lines before.
#while read srcfile; do
# # extract only .dsc files
# echo "$srcfile" | grep -q '\.dsc$' || continue
# dpkg-source -x "$(basename "$srcfile")"
#done < "$DLLIST"

# Execute package manager directly if unknown options are passed.
else
"${_APTMGR}" "[email protected]"

fi

# After error or all done remove our lockfile

添加apt-fast.conf配置文件

apt-fast.conf文件位于/etc目录下, 内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
###################################################################
# CONFIGURATION OPTIONS
###################################################################
# Every item has a default value besides MIRRORS (which is unset).

# Use aptitude or apt-get?
# Note that for outputting the package URI list, we always use apt-get
# ...since aptitude can't do this
# Optionally add the FULLPATH to apt-get or apt-rpm or aptitude
# e.g. /usr/bin/aptitude
#
# Default: apt-get
#
#_APTMGR=apt-get


# Enable DOWNLOADBEFORE to suppress apt-fast confirmation dialog and download
# packages directly.
#
# Default: dialog enabled
#
#DOWNLOADBEFORE=true


# Choose mirror list to speed up downloads from same archive. To select some
# mirrors take a look at your distribution's archive mirror lists.
# Debian: http://www.debian.org/mirror/list
# Ubuntu: https://launchpad.net/ubuntu/+archivemirrors
#
# Examples:
# To use some German mirrors and official Debian and Ubuntu archives you can use:
# MIRRORS=( 'http://ftp.debian.org/debian,http://ftp2.de.debian.org/debian,http://ftp.de.debian.org/debian,ftp://ftp.uni-kl.de/debian'
#          'http://archive.ubuntu.com/ubuntu,http://de.archive.ubuntu.com/ubuntu,http://ftp.halifax.rwth-aachen.de/ubuntu,http://ftp.uni-kl.de/pub/linux/ubuntu,http://mirror.informatik.uni-mannheim.de/pub/linux/distributions/ubuntu/' )
# To use French Ubuntu mirrors you can use:
# MIRRORS=( 'http://fr.archive.ubuntu.com/ubuntu,http://bouyguestelecom.ubuntu.lafibre.info/ubuntu,http://mirror.ovh.net/ubuntu,http://ubuntu-archive.mirrors.proxad.net/ubuntu' )
#
# Default: disabled
#
#MIRRORS=( 'none' )


# Maximum number of connections
# You can use this value in _DOWNLOADER command. Escape with ${}: ${_MAXNUM}
#
# Default: 5
#
#_MAXNUM=5


# Downloadmanager listfile
# You can use this value in _DOWNLOADER command. Escape with ${}: ${DLLIST}
#
# Default: /tmp/apt-fast.list
#
#DLLIST=/tmp/apt-fast.list


# Download command to use. Temporary download list is designed for aria2. But
# you can choose another download command or download manager. It has to
# support following input file syntax (\t is tab character):
#
# # Comment
# MIRROR1\tMIRROR2\tMIRROR3...
#  out=FILENAME1
# MIRROR1\tMIRROR2\tMIRROR3...
#  out=FILENAME2
# ...
#
# Examples:
# aria2c with a proxy (set username, proxy, ip and password!)
# _DOWNLOADER='aria2c -c -j ${_MAXNUM} -x ${_MAXNUM} -s ${_MAXNUM} --min-split-size=1M --http-proxy=http://username:[email protected]_ip:proxy_port -i ${DLLIST}'
#
# Default: _DOWNLOADER='aria2c -c -j ${_MAXNUM} -x ${_MAXNUM} -s ${_MAXNUM} --min-split-size=1M -i ${DLLIST} --connect-timeout=600 --timeout=600 -m0'
#
#_DOWNLOADER='aria2c -c -j ${_MAXNUM} -x ${_MAXNUM} -s ${_MAXNUM} --min-split-size=1M -i ${DLLIST} --connect-timeout=600 --timeout=600 -m0'


# Download temp folder for Downloadmanager
# example /tmp/apt-fast. Standard is /var/cache/archives/apt-fast
#
# Default: /var/cache/apt/archives/apt-fast
#
#DLDIR=/var/cache/apt/archives/apt-fast


# APT archives cache directory
#
# Default /var/cache/apt/archives
# (APT configuration items Dir::Cache and Dir::Cache::archives)
#
#APTCACHE=/var/cache/apt/archives


# apt-fast colors
# Colors are disabled when not using a terminal.
#
# Default colors are:
#  cGreen='\e[0;32m'
#  cRed='\e[0;31m'
#  cBlue='\e[0;34m'
#  endColor='\e[0m'

添加bash_completion.d文件

/etc/bash_completion.d/目录下创建apt-fast文件, 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Debian apt-fast(8) completion.
# Copy of Ubuntu 10.04 _apt_get function from apt completion. Merged with 12.04
# changes but preserve compatibility. _apt_get function renamed to _apt_fast.

have apt-fast &&
_apt_fast()
{
    local cur prev special i

    COMPREPLY=()
    cur=`_get_cword`
    prev=${COMP_WORDS[COMP_CWORD-1]}

    for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
        if [[ ${COMP_WORDS[i]} == @(install|remove|autoremove|purge|source|build-dep|changelog|download) ]]; then
            special=${COMP_WORDS[i]}
        fi
    done

    if [ -n "$special" ]; then
        case $special in
            remove|autoremove|purge)
                if [ -f /etc/debian_version ]; then
                    # Debian system
                    COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) )
                else
                    # assume RPM based
                    _rpm_installed_packages
                fi
                return 0
                ;;
            source)
                COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
                    2> /dev/null ) $( apt-cache dumpavail | \
                    command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) )
                return 0
                ;;
            *)
                COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
                    2> /dev/null ) )
                return 0
                ;;
        esac
    fi

    case "$prev" in
        -@(c|-config-file))
             _filedir
             return 0
             ;;
        -@(t|-target-release|-default-release))
             COMPREPLY=( $( apt-cache policy | \
                 command grep "release.o=Debian,a=$cur" | \
                 sed -e "s/.*a=\(\w*\).*/\1/" | uniq 2> /dev/null) )
             return 0
             ;;
    esac

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W '-d -f -h -v -m -q -s -y -u -t -b -c -o \
            --download-only --fix-broken --help --version --ignore-missing \
            --fix-missing --no-download --quiet --simulate --just-print \
            --dry-run --recon --no-act --yes --assume-yes --show-upgraded \
            --only-source --compile --build --ignore-hold --target-release \
            --no-upgrade --force-yes --print-uris --purge --reinstall \
            --list-cleanup --default-release --trivial-only --no-remove \
            --diff-only --no-install-recommends --tar-only --config-file \
            --option --auto-remove'
-- "$cur" ) )
    else
        COMPREPLY=( $( compgen -W 'update upgrade dselect-upgrade \
            dist-upgrade install remove purge source build-dep \
            check download clean autoclean autoremove changelog'
-- "$cur" ) )
    fi

    return 0
} &&
complete -F _apt_fast $filenames apt-fast

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh

🙂 至此, 配置已全部完成, 可以用apt-fast替代apt-get来执行更新和安装指令了, 用法和apt-get完全一样.

在树莓派Raspbian系统下测试通过.

05-05
2016

你为什么要努力的真相(转)

作者: Gamepader    分类: 碎碎念        评论: 0    超过0人围观

你为什么要努力?是什么信念让你每天都能坚持在天还黑或者天刚亮的时候就开始工作了?你有过不满,无奈想放弃或者其他负面情绪吗,你又是如何克服它们的呢。

1.

2013年,乌鲁木齐的一家西餐厅搞了一个活动。

简单地说,就是在每周一的中午12点过后,西餐厅的公众号发出来消息,你在收到消息的第一时间回过去『一元秒杀』四个字。

前十名发出去的用户可以获得一套300元的套餐。

我知道这个活动的时候,乌鲁木齐参与的人还不多,于是,那次活动,我中了。

话说这种餐厅档次对于在上海工作的我来说,经常会去吃,张江的传奇广场有很多类似的店,消费跟鹿港之类的一个级别。

但这种东西在50后的父母眼中,即使他们舍得下饭馆,也不会吃西餐的。原因大家都懂。

那天打了电话给女朋友,告诉她嘱咐家里,今晚请老爸老妈西餐。

老妈当然不肯,家里回过来电话跟我说”你跟月月(我女朋友)去吃就好,要把姑娘照顾好。”

我说:”是我中奖,300块钱的东西,我们俩人吃不完的,咱四个一起去,一顿饭是1块钱。”

然后父母就兴高采烈的一起去了。

嗯,一桌价值300块钱的饭。加上大众点评给好评送鸡柳,发朋友圈送咖啡。反正一大桌子菜,即使是4个人还算富裕。

老妈那一晚吃了一大块牛排,一大碗意面,若干小吃的东西。确实很撑很撑。

吃完饭,一家人红光满面的坐着聊天。

大家都很饱了,老爸点了一根烟,几个人休息,我准备去结账,这时候餐厅上了最后一道菜:一个价值68的冰激凌。

嗯,就是那种意大利冰激凌,很大很大的。放在一个杯子里。

大家都吃不下了,我看了一眼说,那就别吃了,然后去吧台,准备结账走人。

我结账回来的时候,看见我老妈一个人吃掉了那个本来应该几个人吃的巨大的冰激凌。她有些心疼的说:”你们怎么都不吃啊,这样太浪费了。”

我过去抢过杯子,我说妈;你这样会吃坏肚子的。

你们无法理会当看见自己老妈抱着那么大一个冰激凌吃。

不是因为爱吃,也不是因为好吃,只是因为觉得我们不吃了太浪费。

她举着那个杯子,那个有点贪到了小便宜的幸福表情,与那高档的西餐厅昏暗柔和的灯光很违和的反差在一起,我的心疼和心酸。

2.

我来告诉你,什么叫贫贱夫妻百事哀。

大学毕业后,你爱上了一个姑娘。这姑娘冰雪聪明,活泼善良,笑起来的时候就像一朵盛开的水仙花,跟个小天使一般在你的心头盘旋。

在你心里是刘亦菲一样的存在,符合你对于结婚的所有期望,你追她,恨不得把自己的心掏出来给她。

终于,那一夜姑娘一脸娇羞的跟你说;我们先处着看看。

你高兴坏了。

姑娘做普通的工作,有一个闺蜜,老公爆有钱,名车就不说了,姑娘驴牌的包包每周一换,各种节日各种派,连清明节都可以收到花,出去吃饭开红酒永远要最贵的。他俩同一个科室,每天吃一起住一起,你能感受到那种姑娘的落寞吗?

嗯,你喜欢的姑娘,手机坏了。你带她去步行街逛,你们进了apple store,试了下6s,拍照确实鲜艳有趣。你也看出来姑娘很喜欢。可是后来你俩出来,最终走进旁边的小米专卖店。

嗯,我知道你想说真正爱你的人不在乎这个,她也不怪你,可是说真的,都是20郎当岁的小姑娘,哪个姑娘没有点小小的虚荣心?

你到底有没有在你的青春年华,尽心尽力的爱过一个姑娘。

3.

你虽然穷,但姑娘很善良,你对她好,她很感动,两个人在一起了。半年之后,去见姑娘的父母。

姑娘千叮咛万嘱咐,于是你提前洗澡刮胡子做面膜熨西装打领带皮鞋擦的锃亮。一脸紧张的按响了他们家的门铃。

女朋友家很懂礼数,准丈母娘在厨房里忙活了一下午,做了几个菜,一边吃一边聊,你在席间跟女朋友对视,她一脸欣喜的赞许你的眼神,你有点得意洋洋,以为大功告成。

突然,丈母娘半开玩笑半认真的说:你们俩的事情,本来我是不同意的。隔壁那个老王的儿子,公务员,对我家姑娘可好了,但是你对我家姑娘好,她也很爱你,我们都是看在心里的,我们不是不通情理的人,也没有什么别的要求,必须要买房子,哪怕你付个首付,你们俩一起按揭的也可以。房子写你俩名字,其他的,我和她爸爸不反对,家电装修,我和她爸爸想办法。

你是愿意写名字的,即使只写她一个人得名字也好,可是,你掏不起钱。

你说:阿姨,我们现在努力,我一定可以的。请你相信。

丈母娘脸色大变,将你送出门。

之后这姑娘两周电话不接微信不回,两周后你约她出来,在楼下的街心花园,你望着她,觉得这两周过得时间超过两年。她一脸冰霜,任凭你恨不得不要七尺男儿的脸面,跪下来求他,她只是说对不起。哭着跑开。

两个月后,你接到她的微信,”我下月结婚。关于过去的点点记忆,我都记得,谢谢你。”

你祝福她,删了她,从此你夜夜买醉,你愤愤不平的说,这个社会就是这么不公平。

4.

好吧,上面这个故事残忍了点。

丈母娘答应了你,你俩欢天喜地,两人借钱,买房,按揭,结婚。一切从简。姑娘很懂事,她不要钻戒不要名表,房子简装修,家电慢慢买,日子过得也算不错。一年后,小生命降临,幸福甜蜜。

别急,故事没完。

突然有一天,电视台播放:三鹿发生三聚氰胺事件,质监局检查了全国奶粉,全军覆没。

一夜间,所有的爸爸妈妈开始代购进口奶粉。

老婆跟你商量,再穷不能穷孩子,咱俩省吃俭用,孩子一定要吃好。

嗯,于是你们继续节约,孩子喝进口奶粉,用进口尿不湿。

上了幼儿园。

你的女儿很聪明,在幼儿园画画获了奖。

幼儿园选10个小朋友,去日本跟日本小朋友交换,老师找到你,你孩子真的好棒,是我们学校的一个好榜样,这也是孩子开拓眼界的机会。

嗯,去趟日本吧,十天,6700块钱,可以有一个家长陪同。

很多家长都想去,可是孩子成绩不够。

你孩子好争气啊你知道吗?可是你TMD掏不起钱。
5.

我们不聊爱情,我们聊聊亲情。

总有一天,我们在这个世界上最爱的母亲老去,进了医院,得了癌症。

是的,这个病,目前无解。横竖都是死。

医生说已经晚期了不能手术,医生建议化疗。

肺癌的治疗方法中有很多种,化疗药物中有一种叫”贝伐珠单抗”进口药物,2w+一针,不医保,副作用小,不掉头发,化疗后不呕吐,病人精神。

普通国产化疗药,一针一千多,可以走医保,吃了呕吐,头发掉光。病人被折磨的生不如死。

嗯,你是善良的人,你只是穷。

半年后病情进展,化疗没用了,于是医生又给你两套方案。

没钱的人保守治疗吃中药,疼到死。

有钱的人吃国外的靶向药物治疗,易瑞沙和特罗凯,一天一片,每天1000,不医保。全部自费。

效果真的有,吃了以后,病人躺在床上能跟你聊天,也不会再昏迷。

呵呵,这是你最亲最亲的人,你怎么选。

你不努力,用什么资格选?

 

6.

很多人都说,早出晚归是为了未来,为了明天,balabala。

我现在觉得,活着是为了过好当下。

钱在这个社会真的不是万能的东西。

比钱重要的东西多了。

可是我们为什么起早贪黑呢?

我们奋斗就是为了,我们的父母有一天,买一件自己喜欢的大衣的时候不要抠自己。

万一有天遇到癌症这样不能挽回的病,死的能够舒服一点。

我们奋斗,也并不是姑娘不能跟我们分手。

但姑娘跟我们分手,可以因为我们性格不合,价值观不一样,可以因为各种各样的原因。

但不是因为我缺钱!

看了太多相爱但因为钱而分开的例子。

但愿这样的悲剧,不要在我自己身上发生。

 

7.

为了那个每天给你做饭两鬓斑白的老人。

为了那个抱怨着把你的脏衣服扔进洗衣机的姑娘。

为了女儿喝完牛奶离开家前亲你一口说爸爸再见。

这家里的一切,就是你奋斗的理由。

狗屁的承诺,狗屁的我爱你啊,等以后我有钱了就给你XXX,你这话骗得了姑娘骗不了你自己。

多少爱情就这样没有了以后。

珍惜当下啊。认真的去爱每一个人。

我们早出晚归,要的就是你出去玩的时候,别人吃59的自助餐,你可以买199的贵宾票。

要的就是女朋友在跟你说老公这个手机拍照好漂亮的时候,你也能笑着说服务员刷卡。而不是牵着她的手离开。

你看着那些在姑娘面前刷卡的人,生活可能其实一点都没有你容易。他们只是知道为自己所爱的人付出,其实是一种幸福感觉。

其实想想,就觉得一点都不苦。

8.
生活是公平的。

你选择了清闲,就肯定是有一个人替你担负了你的重担。

有些事情,你做了,不一定能成功。

但你不做,就一定会是失败的。

而你早出晚归,就是为了你女儿你妻子你的父母可以睡到自然醒。

生活向来是一场颠沛流离的旅行。

众生皆苦,万相本无。

这一路实在苦短,越是憧憬,越要风雨兼程。

对得起那些跟你选择一条船,陪你旅行的人。

来源:悦读(ID:yuedu58)
作者:王远成(作家)

04-21
2016
loading...