分类: Ubuntu
Ubuntu(友邦拓,网友也喜欢称之为“乌班图”)是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想.
阿里云从ubuntu16.04.5升级到ubuntu 18.04.3后调整PHP 7.0到PHP 7.2
目前使用的阿里云服务器是通过参考 阿里云ECS ubuntu 14.04.5 LTS升级到ubuntu 16.04.2 LTS 升级上来的。
升级之后,默认情况下,依旧使用的是 ubuntu 16.04.5
自带的 PHP 7.0
,然而 ubuntu 18.04.3
系统自带的是 PHP 7.2
。我们希望在升级之后的系统上,能启用比较新版本的 PHP 7.2
。
其实更关键的是,在 ubuntu 18.04.3
系统上, PHP 7.0
相关的部分附加组件,比如 PHP7.0-CURL
已经没办法通过源安装了 ,安全补丁相关的更新估计也不能及时提供。另外就是较新版本的 PHP 7.2
在性能上有不错的提升。
执行如下切换命令(PHP-FPM
模式):
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 |
$ sudo apt-get install php7.2-fpm # 备份配置文件 $ sudo mv /etc/php/7.2/fpm/php.ini /etc/php/7.2/fpm/php.ini.bak # 拷贝配置文件 $ sudo cp /etc/php/7.0/fpm/php.ini /etc/php/7.2/fpm/php.ini $ sudo systemctl disable php7.0-fpm # 调整Apache与PHP-FPM通信的端口 $ sudo sed -i "s/php7.0-fpm.sock/php7.2-fpm.sock/g" /etc/apache2/sites-enabled/*.conf # 禁用旧服务 $ sudo service php7.0-fpm stop #重启服务 $ sudo service php7.2-fpm restart $ sudo service apache2 restart # 如果使用了WP-Statistics统计插件,需要安装依赖 $ sudo apt-get install php7.2-curl $ sudo apt-get install php7.2-bcmath |
网站响应速度有明显的提升,以前的卡顿表现明显改善。
参考链接
ubuntu 18.04下安装CUDA 10.1以及cuDNN的安装
安装最新版本的 CUDA 10.1
:
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 |
# 卸载之前已经安装的cuda $ sudo apt-get remove nvidia-cuda-toolkit $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin $ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 $ wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb $ sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb $ sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub $ sudo apt-get update $ sudo apt-get -y install cuda # 部分驱动可能会更新,需要执行更新,否则可能依旧不正常 $ sudo apt-get dist-upgrade $ sudo apt-get autoremove # 可能需要删除一下XWindow的配置文件,否则驱动可能不能正常加载 $ sudo rm -rf ~/.Xauthority # 如果出现如下错误 # ubuntu 18.04 "nvidia-340 导致 /usr/lib/x86_64-linux-gnu/libGL.so.1 # 转移到 /usr/lib/x86_64-linux-gnu/libGL.so.1.distrib" # 参考 http://www.mobibrw.com/?p=21739 # 删除安装源,可以节约几个GB的磁盘,安装完成后这部分已经用不上了 $ sudo apt-get remove --purge cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00 |
安装对应版本的cuDNN
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ wget https://www.mobibrw.com/wp-content/uploads/2019/11/libcudnn7_7.6.5.32-1cuda10.1_amd64.deb_.zip $ wget https://www.mobibrw.com/wp-content/uploads/2019/11/libcudnn7-dev_7.6.5.32-1cuda10.1_amd64.deb_.zip $ wget https://www.mobibrw.com/wp-content/uploads/2019/11/libcudnn7-doc_7.6.5.32-1cuda10.1_amd64.deb_.zip # 解压缩 $ unzip libcudnn7_7.6.5.32-1cuda10.1_amd64.deb_.zip $ unzip libcudnn7-dev_7.6.5.32-1cuda10.1_amd64.deb_.zip $ unzip libcudnn7-doc_7.6.5.32-1cuda10.1_amd64.deb_.zip # 按照顺序安装 $ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb $ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb $ sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.1_amd64.deb |
检测是否成功安装:
1 2 3 4 5 6 7 |
$ cp -r /usr/src/cudnn_samples_v7/ ~/ $ cd ~/cudnn_samples_v7/mnistCUDNN $ make clean && make $ ./mnistCUDNN |
执行输出如下结果代表成功安装:
ubuntu 18.04安装Vulkan依赖的工具链SPIR-V Toolchain(glslangValidator)
开发 Vulkan 的时候,需要使用 glslangValidator 编译 Vulkan 代码。
如果是 ubuntu 19.10 版本,可以直接执行:
1 2 3 |
$ sudo apt-get install vulkan-tools # 目前ubuntu 20.04 最新需要使用如下命令 sudo apt-get install glslang-tools |
如果低于这个版本,则只能从源代码编译安装了,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 编译安装 glslang $ git clone https://github.com/KhronosGroup/glslang.git # 也可本站下载一份拷贝 wget https://www.mobibrw.com/wp-content/uploads/2018/12/glslang.zip $ cd glslang # 目前(2018.12.17)的正式版,最稳定的版本,试过最新的版本,编译部分代码存在问题 $ git checkout 7.10.2984 # 下载 spirv-tools 部分的功能代码 $ python update_glslang_sources.py $ mkdir build $ cd build $ cmake .. $ make $ sudo make install |
ubuntu 18.04上使用Openconnect代替Cisco Anyconnect
OpenConnect
是一个 Cisco Anyconnect
的替代品,具有开源、易获取、可靠等优点。而官方版本的 Cisco Anyconnect
配置较为繁琐,需要在管理界面同时部署多平台客户端才能支持多平台。相比之下 OpenConnect
在这点就具有优势,可以在官方版本无法跨平台时替代使用。
命令行模式:
1 2 3 4 |
$ sudo apt-get install -y \ openconnect libopenconnect-dev \ network-manager-openconnect-gnome \ resolvconf |
安装完成之后,在网络管理界面上的 VPN
设置界面上可以配置 Cisco Anyconnect
相关的项目。
如果刚刚安装之后, VPN
设置界面上没有出现这个选项,则可能需要重启系统才行。
参考链接
ubuntu 18.04 Android Studio运行模拟器时提示“/dev/kvm device: permission denied”
升级 ubuntu
系统, 从 16.04.5
升级到 18.04.1
,接着又开始配置各种软件环境。
当配置好 Android
开发环境,准备创建一个模拟器并运行程序环境看是否OK时,问题出现了。
创建和运行时都提示:/dev/kvm device: permission denied
或者 /dev/kvm device: open failed
,而且模拟器跑不起来。
执行命令查看:
1 2 |
$ ls -al /dev/kvm crw------- 1 root root 10, 232 11月 17 22:37 /dev/kvm |
需要安装 qemu-kvm
并把当前用户加入到 kvm
用户组即可:
1 2 3 4 5 6 |
$ sudo apt install qemu-kvm $ sudo adduser `whoami` kvm $ ls -al /dev/kvm crw-rw---- 1 root kvm 10, 232 11月 18 14:40 /dev/kvm |
然后运行模拟器。
如果依旧报错,则需要修改 /dev/kvm 的所有者为当前用户,如下:
1 |
$ sudo chown `whoami` /dev/kvm |
参考链接
ubuntu 18.04 "nvidia-340 导致 /usr/lib/x86_64-linux-gnu/libGL.so.1 转移到 /usr/lib/x86_64-linux-gnu/libGL.so.1.distrib"
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 |
$ sudo apt-get install cuda 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 cuda 已经是最新版 (10.1.243-1)。 您也许需要运行“apt --fix-broken install”来修正上面的错误。 下列软件包有未满足的依赖关系: cuda-drivers : 依赖: libnvidia-gl-418 (>= 418.87.00) 但是它将不会被安装 libnvidia-ifr1-418 : 依赖: libnvidia-gl-418 但是它将不会被安装 nvidia-driver-418 : 依赖: libnvidia-gl-418 (= 418.87.00-0ubuntu1) 但是它将不会被安装 推荐: libnvidia-compute-418:i386 (= 418.87.00-0ubuntu1) 推荐: libnvidia-decode-418:i386 (= 418.87.00-0ubuntu1) 推荐: libnvidia-encode-418:i386 (= 418.87.00-0ubuntu1) 推荐: libnvidia-ifr1-418:i386 (= 418.87.00-0ubuntu1) 推荐: libnvidia-fbc1-418:i386 (= 418.87.00-0ubuntu1) 推荐: libnvidia-gl-418:i386 (= 418.87.00-0ubuntu1) E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)。 $ sudo apt --fix-broken install 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 正在修复依赖关系... 完成 下列软件包是自动安装的并且现在不需要了: lib32gcc1 libc6-i386 使用'sudo apt autoremove'来卸载它(它们)。 将会同时安装下列软件: libnvidia-gl-418 下列【新】软件包将被安装: libnvidia-gl-418 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。 有 68 个软件包没有被完全安装或卸载。 需要下载 0 B/32.2 MB 的归档。 解压缩后会消耗 164 MB 的额外空间。 您希望继续执行吗? [Y/n] 获取:1 file:/var/cuda-repo-10-1-local-10.1.243-418.87.00 libnvidia-gl-418 418.87.00-0ubuntu1 [32.2 MB] (正在读取数据库 ... 系统当前共安装有 293566 个文件和目录。) 正准备解包 .../libnvidia-gl-418_418.87.00-0ubuntu1_amd64.deb ... dpkg-query: 没有找到与 libnvidia-gl-410 相匹配的软件包 nvidia-340 导致 /usr/lib/x86_64-linux-gnu/libGL.so.1 转移到 /usr/lib/x86_64-linux-gnu/libGL.so.1.distrib dpkg-divert: 错误: 删除 被 libnvidia-gl-418 转移的 /usr/lib/x86_64-linux-gnu/libGL.so.1 时 软件包名不匹配 发现了 nvidia-340 导致 /usr/lib/x86_64-linux-gnu/libGL.so.1 转移到 /usr/lib/x86_64-linux-gnu/libGL.so.1.distrib dpkg: 处理归档 /var/cuda-repo-10-1-local-10.1.243-418.87.00/./libnvidia-gl-418_418.87.00-0ubuntu1_amd64.deb (--unpack)时出错: new libnvidia-gl-418:amd64 package pre-installation script subprocess returned error exit status 2 在处理时有错误发生: /var/cuda-repo-10-1-local-10.1.243-418.87.00/./libnvidia-gl-418_418.87.00-0ubuntu1_amd64.deb E: Sub-process /usr/bin/dpkg returned an error code (1) |
解决方案如下:
1 2 3 4 5 |
# 解除nvidia 340全部依赖 $ LC_MESSAGES=C dpkg-divert --list '*nvidia-340*' | sed -nre 's/^diversion of (.*) to .*/\1/p' | xargs -rd'\n' -n1 -- sudo dpkg-divert --remove $ dpkg-divert --package nvidia-340 --remove /usr/lib/i386-linux-gnu/libGL.so.1 |
参考链接
发现了 nvidia-340 导致 /usr/lib/i386-linux-gnu/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so.1.distrib...
ubuntu 18.04 systemd-udevd进程CPU占用特别高,CUDA Toolkit 10.1 Update 2安装之后出现
最近在T440笔记本的ubuntu 18.04系统上安装最新的CUDA Toolkit 10.1 Update 2
之后,发现 systemd-udevd
进程CPU占用特别高,执行 sudo /lib/systemd/systemd-udevd -D
,会发现持续输出如下信息:
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 |
RUN '/bin/systemctl start --no-block nvidia-persistenced.service' /lib/udev/rules.d/71-nvidia.rules:12 RUN '/sbin/modprobe nvidia-modeset' /lib/udev/rules.d/71-nvidia.rules:16 RUN '/sbin/modprobe nvidia-drm' /lib/udev/rules.d/71-nvidia.rules:20 RUN '/sbin/modprobe nvidia-uvm' /lib/udev/rules.d/71-nvidia.rules:24 RUN '/usr/bin/nvidia-smi' /lib/udev/rules.d/71-nvidia.rules:28 starting '/bin/systemctl start --no-block nvidia-persistenced.service' Process '/bin/systemctl start --no-block nvidia-persistenced.service' succeeded. starting '/sbin/modprobe nvidia-modeset' seq 115679 queued, 'remove' 'module' seq 115680 queued, 'add' 'module' seq 115681 queued, 'add' 'slab' seq 115682 queued, 'add' 'drivers' seq 115681 running seq 115682 running seq 115681 processed seq 115683 queued, 'remove' 'slab' seq 115684 queued, 'remove' 'drivers' seq 115683 running seq 115683 processed seq 115682 processed seq 115684 running seq 115684 processed seq 115685 queued, 'remove' 'module' '/sbin/modprobe nvidia-modeset'(err) 'modprobe: ERROR: could not insert 'nvidia_modeset': No such device' Process '/sbin/modprobe nvidia-modeset' failed with exit code 1. |
解决方法如下:
1 |
$ sudo rm -rf /lib/udev/rules.d/71-nvidia.rules |
参考链接
Ubuntu通过apt-get安装指定版本和查询指定软件有多少个版本
一、通过apt-get安装指定版本
1 |
$ apt-get install <<package name>>=<<version>> |
二、查询指定软件有多少个版本
说明:在Linux用这个查询并不能完全的把所有版本都列举出来,因为每个版本都与系统版本和CPU架构有关,比如一个软件支持Ubuntu系统的16.04的CPU架构为amd64的版本只有1.0和1.2,其余都不支持,所以列举时就只有两款。
列举版本列表:
0、通过网站搜索:
1、
1 |
$ apt-cache madison <<package name>> |
将列出所有来源的版本。如下输出所示:
1 2 3 4 5 6 |
$ apt-cache madison vim vim | 2:7.3.547-1 | http://debian.mirrors.tds.net/debian/ unstable/main amd64 Packages vim | 2:7.3.429-2 | http://debian.mirrors.tds.net/debian/ testing/main amd64 Packages vim | 2:7.3.429-2 | http://http.us.debian.org/debian/ testing/main amd64 Packages vim | 2:7.3.429-2 | http://debian.mirrors.tds.net/debian/ testing/main Sources vim | 2:7.3.547-1 | http://debian.mirrors.tds.net/debian/ unstable/main Sources |
madison
是一个 apt-cache
子命令,可以通过 man apt-cache
查询更多用法。
2、
1 |
$ apt-cache policy <<package name>> |
将列出所有来源的版本。信息会比上面详细一点,如下输出所示:
1 2 3 4 5 6 7 8 9 10 11 |
$ apt-cache policy gdb gdb: Installed: 7.7.1-0ubuntu5~14.04.2 Candidate: 7.7.1-0ubuntu5~14.04.2 Version table: *** 7.7.1-0ubuntu5~14.04.2 0 500 http://fr.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages 100 /var/lib/dpkg/status 7.7-0ubuntu3 0 500 http://fr.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages 500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages |
policy
是一个 apt-cache
子命令,可以通过 man apt-cache
查询更多用法。
3、
1 |
$ apt-cache showpkg <<package name>> |
4、
1 |
$ apt-get install -s <<package-name>> |
说明:这个命令只是模拟安装时会安装哪些软件列表,但不会例举出每个软件有多少个版本
5、
1 |
$ aptitude versions <<package name>> |
参考:https://manpages.debian.org/unstable/aptitude/aptitude.8.en.html
6、
1 |
$ apt-show-versions -a <<package name>> |
说明:列举出所有版本,且能查看是否已经安装。还可以通过apt-show-versions -u <<package name>>来查询是否有升级版本。
参考:http://manpages.ubuntu.com/manpages/trusty/man1/apt-show-versions.1p.html
7、
1 |
$ whohas -d Debian,Ubuntu <<package name>> | tr -s ' ' '\t' | cut -f 1-3 | column -t |
8、
1 |
$ rmadison -u debian,ubuntu,bpo <<package name>> | cut -d "|" -f 1-3 |
单个详情:
1、
1 |
$ apt-cache show <<package name>> |
说明:查询指定包的详情,不管是否已经安装。
2、
1 |
$ dpkg -l <<package name>> |
说明:效果和上面基本一致,但是结果是列表详情展示,会提示是否已经删除了之后还有依赖包没有删除等。
3、
1 |
$ dpkg -s <<package name>> |
说明:必须是安装的包才能显示详情。
4、
1 |
$ dpkg-query -s <<package name>> |
说明:同上,效果一致。
使用技巧:
1、可以在查询后面带上一些参数来实现筛选
1 |
$ apt-cache show package | grep Version |
1 |
$ apt-show-versions | more |