我也不知道为啥,在默认的 xterm 下运行就是坏的,如果使用 TERM=st atop 这样运行就没有排版问题了。
分类目录归档:IT
关于 Docker 中 tty 尺寸不太对的问题
不知道为啥就是不行,不过本来就对 docker 这玩意没啥好感。
$ docker exec -it foo /bin/bash foo@649fb21d747c:~$ stty size 0 0 foo@649fb21d747c:~$ reset -w foo@649fb21d747c:~$ stty size 24 80 foo@649fb21d747c:~$ # That was still wrong. Now resize the terminal to get a SIGWINCH. foo@649fb21d747c:~$ stty size 69 208 foo@649fb21d747c:~$ exit exit $ docker exec -it foo /bin/bash # Try it again. foo@649fb21d747c:~$ stty size 69 208 foo@649fb21d747c:~$ # Doesn't happen anymore for this session.
Docker 的生命周期
Docker 这东西的文档过于不好用了,或者说我没看对地方,总之就是我一直都不怎么会用。直到我看到了这张图:
这下子就清楚很多了。我们一般用 docker exec 命令来在里面运行一个 bash,然后再继续进行操作,这个操作需要 container 在 running 状态下才能执行。
总结一下最简单的使用场景,pull 一个 imgae以后,启动一个 container,然后再把它删掉:
docker pull <image_name> docker run -itd --name <container_name> <image> # Started a docker in background docker exec -ti <container_name> <command> docker stop <container_name> docker rm <container_name>
然后就行了
一个完整的 BT 客户端安装记录
博客里面此类文章版本实在太多,每次我自己装一遍都要参考两三篇文章也实在是蛋疼,于是整理一下。
Compiler and Depencency
首先是一些依赖包的安装:
# gcc-8 Prerequisites (optional) add-apt-repository ppa:ubuntu-toolchain-r/test # Compiler apt install gcc-8 g++-8 # (optional) apt install build-essential checkinstall pkg-config automake libtool git # Libtorrent Dependency apt install libboost-dev libboost-system-dev libboost-python-dev libboost-chrono-dev libboost-random-dev libssl-dev libgeoip-dev # Deluge Dependency apt install python-pip python-attr python-chardet python-click python-colorama python-openssl python-pam python-pyasn1 python-pyasn1-modules python-serial python-service-identity python-twisted-bin python-twisted-core python-zope.interface python-twisted python-openssl python-setuptools intltool geoip-database python-notify python-pygame python-glade2 librsvg2-common xdg-utils python-mako apt install python-automat python-constantly python-hyperlink python-incremental # Only on Ubuntu 18.04+ (16.04 do not have these packages) # qBittorrent Dependency apt-get install qtbase5-dev qttools5-dev-tools libqt5svg5-dev
libtorrent
考虑到双栈 IP 汇报的问题,仍然使用 libtorrent 1.0.11
首先应该打上 std=c++11 的 patch:
diff -uNr libtorrent/bindings/python/compile_flags.in libtorrent-cpp11/bindings/python/compile_flags.in --- libtorrent/bindings/python/compile_flags.in 2018-04-18 06:49:46.350053702 +0000 +++ libtorrent-cpp11/bindings/python/compile_flags.in 2018-04-18 07:58:13.883000009 +0000 @@ -1 +1 @@ -@COMPILETIME_OPTIONS@ @CPPFLAGS@ @LIBS@ @BOOST_CPPFLAGS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@ -I@top_srcdir@/include +@COMPILETIME_OPTIONS@ @CXXFLAGS@ @CPPFLAGS@ @LIBS@ @BOOST_CPPFLAGS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@ -I@top_srcdir@/include diff -uNr libtorrent/bindings/python/setup.py libtorrent-cpp11/bindings/python/setup.py --- libtorrent/bindings/python/setup.py 2018-04-18 06:49:46.350053702 +0000 +++ libtorrent-cpp11/bindings/python/setup.py 2018-04-18 07:59:26.123112215 +0000 @@ -104,7 +104,7 @@ library_dirs = parse_cmd(extra_cmd, '-L'), extra_link_args = ldflags.split() + arch(), extra_compile_args = parse_cmd(extra_cmd, '-D', True) + arch() \ - + target_specific(), + + target_specific() + ['-std=c++11'], libraries = ['torrent-rasterbar'] + parse_cmd(extra_cmd, '-l'))] setup(name = 'python-libtorrent',
然后是编译:
git clone https://github.com/arvidn/libtorrent.git libtorrent-1.0.11 git checkout RC_1_0 ./autotool.sh ./configure --enable-python-binding --with-libiconv --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11 # if compile on armhf (SoYouStart ARM) # ./configure --enable-python-binding --with-libiconv --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11 --with-boost-libdir=/usr/lib/arm-linux-gnueabihf make -j$(nproc) checkinstall ldconfig
Deluge
wget http://download.deluge-torrent.org/source/deluge-1.3.15.tar.gz tar xzvf deluge*.tar.gz python setup.py build python setup.py install --install-layout=deb
注意这个最好别用 checkinstall 安装,可能会导致一些不可预知的错误。
qBittorrent
git clone https://github.com/qbittorrent/qBittorrent.git # git clone https://github.com/c0re100/qBittorrent-Enhanced-Edition.git git checkout <branch> # e.g. v4_1_x; v3_3_x ./configure # ./configure --with-boost-libdir=/usr/lib/arm-linux-gnueabihf make -j$(nproc) checkinstall
systemd Example
deluged.service
$ cat /etc/systemd/system/deluged.service [Unit] Description=Deluged After=network-online.target [Service] ExecStart=/usr/bin/sudo -u <username> /usr/bin/deluged -d ExecStop=/bin/kill -9 $(cat /run/deluged.pid) Restart=always PIDFile=/run/deluged.pid TimeoutStopSec=300 RestartSec=3 [Install] WantedBy=multi-user.target
deluge-web.service
$ cat /etc/systemd/system/deluge-web.service [Unit] Description=Deluge-web After=network-online.target deluged.service Wants=deluged.service [Service] ExecStart=/usr/bin/sudo -u <username> /usr/bin/deluge-web ExecStop=/bin/kill -9 $(cat /run/deluge-web.pid) Restart=always PIDFile=/run/deluge-web.pid RestartSec=3 [Install] WantedBy=multi-user.target
References
https://github.com/qbittorrent/qBittorrent/wiki/Compiling-qBittorrent-on-Debian-and-Ubuntu
https://dev.deluge-torrent.org/wiki/Installing/Source
https://github.com/amefs/QB/blob/master/setup/sources/libtorrent-rasterbar-RC_1_0.patch
关于 VMware 在 Linux Kernel 4.13+ 上无法正常启动的问题
在 Ubuntu 18.04 上使用 VMware 时,遇到了一个很奇怪的问题,在正常安装好了以后,运行 VMware 却报错:
/usr/lib/vmware/bin/vmware-modconfig: Relink `/lib/x86_64-linux-gnu/libbsd.so.0′ with `/lib/x86_64-linux-gnu/librt.so.1′ for IFUNC symbol `clock_gettime’
经查询以后,发现是大概是 VMware 自己代码写太差造成的问题,这个问题在 12.5+ 的版本都存在,需要对内核模块进行 patch 以后才能正常工作。
经过 patch 的内核模块在这里:https://github.com/mkubecek/vmware-host-modules
在这个 repo 中,不同的 branch 对应了不同版本的 VMware 的内核模块代码,切换到自己需要的版本以后,这样应用:
git clone https://github.com/mkubecek/vmware-host-modules.git git checkout <branch> make make install modprobe -r vmmon insmod /lib/modules/$(uname -r)/misc/vmmon.ko insmod /lib/modules/$(uname -r)/misc/vmnet.ko rm /usr/lib/vmware/lib/libz.so.1/libz.so.1 ln -s /lib/x86_64-linux-gnu/libz.so.1 /usr/lib/vmware/lib/libz.so.1/libz.so.1 # see https://communities.vmware.com/thread/572259 vmware-networks --start # see https://forum.chakralinux.org/viewtopic.php?id=8579
之后正常运行 VMware 就可以了。
参考资料:
https://askubuntu.com/questions/966585/ubuntu-17-10-upgrade-broke-vmware-workstation-12-5
https://github.com/mkubecek/vmware-host-modules
关于 Linux Kernel 4.15 + gcc 7.3 编译内核模块时无法找到 stdarg.h 的问题
这是一个非常奇怪的错误,出现在 Ubuntu 18.04 上,默认安装的内核版本是 4.15,gcc 是 7.3,在编译内核模块时报错:
In file included from ./include/linux/list.h:9:0, from ./include/linux/module.h:9, from /root/Software/newbbr/tcp_tsunami.c:59: ./include/linux/kernel.h:6:10: fatal error: stdarg.h: No such file or directory #include <stdarg.h> ^~~~~~~~~~ compilation terminated.
gcc 认为找不到 stdarg.h。看这个错误的位置,个人认为应该不是我配置的问题或者是我代码的问题,搜索了一下,也有很多在 4.15 内核上出现的同样错误。目前没有什么很好的解决方案,暂时性的方案是在编译的 Makefile 里面加一行:
ccflags-y=-I/usr/lib/gcc/x86_64-linux-gnu/7/include
如果是 gcc 8,就相应把版本改成 8 就可以了
将 Linux 上的 VSCode 改为 Consolas 字体
Linux 上的 VSCode 写起代码来总让人觉得莫名烦躁,而 Windows 上面的 VSC 就赏心悦目很多,想了很久之后终于发现是默认字体的问题。Windows 上面的 VSC 默认是 Consolas 字体,在 Ubuntu 上面大概是 Droid Sans 家族的某种版本,实在是不好看,所以换掉。
首先要在 Ubuntu 上安装 Consolas:
wget https://down.gloriousdays.pw/Fonts/Consolas.zip unzip Consolas.zip sudo mkdir -p /usr/share/fonts/consolas sudo cp consola*.ttf /usr/share/fonts/consolas/ sudo chmod 644 /usr/share/fonts/consolas/consola*.ttf cd /usr/share/fonts/consolas sudo mkfontscale && sudo mkfontdir && sudo fc-cache -fv
这样就装好了。用 fc-list 可以看所有安装的字体。
之后在 VSC 的 preference 中修改对应的项:
"editor.fontFamily": "'Consolas', 'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback'"
这样就可以了
20181130 Update:
如果没有 root 权限,由于 ~/.fonts 实际上就是用户个人的字体文件夹,因此我们在 $HOME 文件夹下也可以做到同样的事情:
wget https://down.gloriousdays.pw/Fonts/Consolas.zip unzip Consolas.zip mkdir ~/.fonts cp consola*.ttf ~/.fonts cd ~/.fonts mkfontscale mkfontdir fc-cache -fv ~/.fonts
之后用 fc-list 可以看到新安装的字体,在 VSCode 中也可以进行调整。
无 root 权限的服务器使用的一些记录
在没有 root 权限的服务器上安装 pip
假设有这么一台服务器,你没有 root 权限,然后预配置的 tensorflow 环境很神奇地调用不了 GPU,只有 pip2 没有 pip3,python2 python3 都试过了都没法用 GPU,pip list 也显示安装了 tensorflow-gpu,且给你用户的人信誓旦旦地告诉你我这配置没问题,但是你就是用不了 GPU,那么怎么办呢?
解决方法还是比较简单的,首先在用户态安装一个 pip(本文要装 pip3)
wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py --user
这时候 pip3 会被安装到 ~/.local/bin 下面,如果你的 PATH 里面有这个路径的话,直接 pip3 就可以运行。
然后就很简单了,该干嘛干嘛,比如安装 virtualenv 等等,只不过这时候你安装任何 python 包的时候,要加上 –user 参数,才能安装到 $HOME 下面,例如 pip3 install virtualenv –user。
我之前提到的那台服务器呢,在装了 pip3 以后,list 一下发现根本就没有 tensorflow-gpu,只有 tensorflow;pip2 里面有,但是调用不了显卡,搞不懂 IT 究竟是怎么配置的。最后我也懒得烦了,直接 virtualenv,装一个 tensorflow-gpu,问题就解决了。
安装一个简单的 deb 包(没有 dependency 问题那种)
apt download <package> dpkg-deb -x package_x.y.z_x86_64.deb my-private-root #dpkg-deb -e package_x.y.z_x86_64.deb my-private-control
然后就装在了你自己的 $HOME 下面。
如果你装的是 screen,且你对 /var/run/screen/ 也没权限的话,这么干:
mkdir ~/.screen && chmod 700 ~/.screen export SCREENDIR=$HOME/.screen
然后把对应的内容添加到 .bashrc 里面去让你每次都可用,比如说:
PATH=~/usr/bin:$PATH export SCREENDIR=$HOME/.screen
Ubuntu 18.04 LTS 盒子环境的部署
本文测试环境为 Hetzner E3-1245V2 独服,系统为官方的 Ubuntu 18.04 Minimal 模板。本文需要综合上一篇盒子配置文章阅读。
写在前面
经过长期的测试,考虑到双栈 IP 的需求,Deluge / qBittorrent 需要 libtorrent 1.0.11 版本才能正常汇报双栈 IP,所以本文很多操作都为了这个目标而设。
Deluge 1.3.15 官方 PPA 仍然没有更新 18.04 对应的二进制包,所幸 Ubuntu 官方源里面就是 1.3.15,理论上可以使用。但是考虑到使用 apt 安装会导致安装官方源中自带的 libtorrent 1.1.5 的依赖,因此选择完全编译安装 libtorrent 与 Deluge。
Wine 官方源也没有增加 Ubuntu 18.04 的支持,Ubuntu 官方源中有对应的 wine64 软件包,因此选择安装该包而非 Wine 官方的版本。
E3-1245V2 有自带 Intel 集显,考虑到 X11VNC 配合 Xorg 使用可以支持完整的键盘操作(VNCserver 存在无法输入 tab、WinKey 的问题,还有 24bit 显示导致 VMware 颜色错乱的问题),本文中选择安装 X11VNC。考虑到通用性,仍应参考上一篇文章使用 VNCserver。
环境的部署
本文所有编译环境采用最新的 gcc-8.1 完成,注意 Boost 需要最高 1.65.1 版本,这个和目前 Ubuntu 源中的版本一致。
# gcc-8 Prerequisites add-apt-repository ppa:ubuntu-toolchain-r/test # Compiler apt install gcc-8 g++-8 build-essential checkinstall pkg-config automake libtool git # Libtorrent Dependency apt install libboost-dev libboost-system-dev libboost-python-dev libboost-chrono-dev libboost-random-dev libssl-dev libgeoip-dev # Deluge Dependency apt install python-pip python-attr python-automat python-chardet python-click python-colorama python-constantly python-hyperlink python-incremental python-openssl python-pam python-pyasn1 python-pyasn1-modules python-serial python-service-identity python-twisted-bin python-twisted-core python-zope.interface python-twisted python-openssl python-setuptools intltool geoip-database python-notify python-pygame python-glade2 librsvg2-common xdg-utils python-mako # qBittorrent Dependency apt-get install qtbase5-dev qttools5-dev-tools libqt5svg5-dev
libtorrent 1.0.11 的编译
综合参考 Deluge 的文档与 qBittorrent 的文档。
git clone https://github.com/arvidn/libtorrent.git libtorrent-1.0.11 git checkout $(git tag | grep libtorrent-1_0_ | sort -t _ -n -k 3 | tail -n 1) ./autotool.sh ./configure --enable-python-binding --with-libiconv --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11 make -j$(nproc) checkinstall ldconfig
注意 libtorrent 1_0_x 的代码需要修改才能正常地引用 Boost,毛球说 RC_1_0 分支不存在本问题,未作测试。
//修改include/libtorrent/export.hpp //那两个hpp文件在boost/config/detail/下,而不是boost/config/下 #if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) # include <boost/config/detail/select_compiler_config.hpp> #endif #ifdef BOOST_COMPILER_CONFIG # include BOOST_COMPILER_CONFIG #endif #if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) # include <boost/config/detail/select_platform_config.hpp> #endif #ifdef BOOST_PLATFORM_CONFIG # include BOOST_PLATFORM_CONFIG #endif
Deluge 安装
wget http://download.deluge-torrent.org/source/deluge-1.3.15.tar.gz tar xzvf deluge*.tar.gz python setup.py build python setup.py install
注意这种方式安装的 Deluge 默认在 /usr/local/bin 下,而不是像 deb 安装一样在 /usr/bin。如果需要安装在 /usr/bin 下,安装时添加参数 –install-layout=deb。
其他软件的部署
add-apt-repository ppa:transmissionbt/ppa curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - dpkg --add-architecture i386 apt install --install-recommends xorg x11vnc transmission-daemon sshfs nodejs firefox fonts-noto xfce4 wine-stable apt install gtk3-engines-xfce xfce4-goodies xfce4-power-manager
Xorg 配置文件
位置在 /usr/share/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Intel Graphics" Driver "intel" Option "AccelMethod" "sna" Option "TearFree" "true" EndSection Section "Monitor" Identifier "External VGA" Modeline "1600x900_60.00" 118.25 1600 1696 1856 2112 900 903 908 934 -Hsync +Vsync Option "PreferredMode" "1600x900_60.00" EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1600x900" Virtual 1600 900 EndSubSection EndSection
X11VNC 与 Xorg 的 systemd 启动脚本
# xserver.service [Unit] Description=Xserver After=network-online.target [Service] ExecStart=/usr/bin/sudo /usr/bin/startx -- :0 Restart=always Type=simple RestartSec=3 [Install] WantedBy=multi-user.target
# x11vnc.service [Unit] Description=X11vnc After=network-online.target xserver.service Wants=xserver.service [Service] ExecStart=/usr/bin/sudo /usr/bin/x11vnc -rfbport 25901 -rfbauth /root/.vnc/passwd -display :0 -forever -nevershared -bg -repeat -nowf -o /root/.vnc/x11vnc.log Restart=always Type=forking RestartSec=3 [Install] WantedBy=multi-user.target
x11vnc 需要首先创建 ~/.vnc/passwd 文件,这个 VNCserver 运行的时候也会自动创建,我懒得重新建立就没研究这个,改日有空再写吧。
Xorg 默认启动的文件为 ~/.xinitrc
#!/bin/sh # /etc/X11/xinit/xinitrc # # global xinitrc file, used by all X sessions started by xinit (startx) # invoke global X session script . /etc/X11/Xsession exec startxfce4
参考资料
https://wiki.archlinux.org/index.php/Xinit_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://wiki.archlinux.org/index.php/X11vnc_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://blog.csdn.net/songbaiyao/article/details/72858087
https://wiki.archlinux.org/index.php/Xorg_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://wiki.archlinux.org/index.php/Intel_graphics_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://serverfault.com/questions/174003/how-can-opengl-graphics-be-displayed-remotely-using-vnc
https://github.com/qbittorrent/qBittorrent/wiki/Compiling-qBittorrent-on-Debian-and-Ubuntu
一份目前为止理论上能用的纸片人相关资源的 Tracker 列表
我现在才意识到,花园外站的种子对 Linux 下的 BT 客户端有多么不友好。它在给种子塞进去一大堆tracker 的同时,还会把所有的 Tracker 的 Tier 设置为 0,这个对于相当一部分客户端是一个十分不友好的行为。如果是本地用 utorrent 下载,那大可忽略这个问题,但是如果是为了长期开机跑公网分流,那么在可能的情况下,我建议去 bangumi.moe 下载种子文件,那里的种子要规范得多。
然后是一份目前为止能用的 Tracker 列表,其中应该是包含了花园、萌番、ACG.RIP 和 Nyaa 的统计 Tracker,所以可以放心使用。
http://open.acgtracker.com:1096/announce http://t.nyaatracker.com:80/announce http://104.238.198.186:8000/announce http://tr.bangumi.moe:6969/announce http://t.acg.rip:6699/announce http://tracker1.itzmx.com:8080/announce http://opentracker.acgnx.se/announce http://nyaa.tracker.wf:7777/announce http://tracker.kamigami.org:2710/announce http://tracker2.itzmx.com:6961/announce http://tracker3.itzmx.com:6961/announce http://tracker4.itzmx.com:2710/announce https://tr.bangumi.moe:9696/announce http://share.camoe.cn:8080/announce http://tracker.kisssub.org:2015/announce http://sukebei.tracker.wf:8888/announce udp://tracker.kamigami.org:2710/announce udp://t.nyaatracker.com:80/announce udp://tr.bangumi.moe:6969/announce
或者你也可以直接下载 Tracker List.txt 文件。
以上 Tracker 都经过分流机长期的测试,虽然不保证 7×24 能用,但是至少在本文写作的三天之内,它们是有过反应的。
虽然不知道维护者都是谁,不过还是感谢 Open Tracker 的维护者们做出的贡献。