树莓派使用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
作者: Gamepader 分类: ARM_Linux 评论: 0 超过0人围观
安装来源:
https://launchpad.net/~ingalex/+archive/ubuntu/sources.list/+sourcepub/1736466/+listing-archive-extra
安装方法:
dpkg -i –force-all ./xxx.deb
作者: Gamepader 分类: ARM_Linux 评论: 0 超过0人围观
PC平台的ubuntu和debian都有apt-fast包, 可以让apt-get工具使用aria2或者axel下载器进行多点下载, 但是官方都没有提供arm下的包.
解包看了一下里面都是shell指令,于是将其移至到树莓派上。步骤如下:
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, //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文件位于/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: //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=( '//ftp.debian.org/debian,//ftp2.de.debian.org/debian,//ftp.de.debian.org/debian,ftp://ftp.uni-kl.de/debian' # '//archive.ubuntu.com/ubuntu,//de.archive.ubuntu.com/ubuntu,//ftp.halifax.rwth-aachen.de/ubuntu,//ftp.uni-kl.de/pub/linux/ubuntu,//mirror.informatik.uni-mannheim.de/pub/linux/distributions/ubuntu/' ) # To use French Ubuntu mirrors you can use: # MIRRORS=( '//fr.archive.ubuntu.com/ubuntu,//bouyguestelecom.ubuntu.lafibre.info/ubuntu,//mirror.ovh.net/ubuntu,//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=//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' |
在/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系统下测试通过.
作者: 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)
作者:王远成(作家)