在Ubuntu 20.04中禁用Snaps¶
在 snap软件包管理 我介绍了Ubuntu的容器方式运行桌面应用的包管理工具 snap ,这确实是一个神奇的工具,构建了安全的应用程序运行环境,且提供了不影响操作系统的无依赖安装应用。不过,在一些情况下可能会需要禁用snap:
生产环境大量运行基于 Docker Atlas 的 Kubernetes Atlas ,docker容器实现的是和snap相似目标
在 ARM Atlas 架构的 Raspberry Pi Atlas 硬件资源非常宝贵,我发现当网络启用时, snapd 会始终占用一个cpu核心的30%资源:
top - 06:39:00 up 1 min, 1 user, load average: 0.85, 0.36, 0.13 Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.8 us, 1.8 sy, 0.0 ni, 89.2 id, 3.2 wa, 0.0 hi, 0.1 si, 0.0 st MiB Mem : 1848.2 total, 1154.4 free, 199.4 used, 494.5 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1612.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1651 root 20 0 1072380 34368 13640 S 28.1 1.8 0:08.00 snapd 2306 ubuntu 20 0 10680 3120 2708 R 0.7 0.2 0:00.09 top 6 root 0 -20 0 0 0 I 0.3 0.0 0:00.08 kworker/0:0H-mmc_complete
这样即使待机状态 服务器温度检测 也看到核心问题达到50度以上(未使用风扇情况下)。所以有必要禁用不使用的snapd。
移除现存Snaps¶
在新安装的Ubuntu中,已经默认安装了部分snaps,可以通过以下命令查看:
snap list
例如,Raspberry Pi 4的Ubuntu Server 64位版本,输出显示:
Name Version Rev Tracking Publisher Notes
core18 20200707 1883 latest/stable canonical✓ base
lxd 4.0.2 16103 4.0/stable/… canonical✓ -
snapd 2.45.2 8543 latest/stable canonical✓ snapd
备注
snap core18 是Ubuntu 18.04 ,提供了在Ubuntu 20.04系统中运行上一个LTS版本应用的能力
并且,如果你执行 df -h
命令可以看到已经挂载了snap的服务:
/dev/loop0 49M 49M 0 100% /snap/core18/1883
/dev/loop1 64M 64M 0 100% /snap/lxd/16103
/dev/loop2 26M 26M 0 100% /snap/snapd/8543
/dev/loop3 49M 49M 0 100% /snap/core18/1888
使用
sudo snap remove <package>
命令移除:sudo snap remove lxd
但是不能先移除 snapd
,如果你执行 sudo snap remove snapd
会提示错误:
error: cannot remove "snapd": snap "snapd" is not removable: remove all other snaps first
所以先移除 core18
sudo snap remove core18
最后移除 snapd
sudo snap remove snapd
备注
此时 snapd
服务依然在运行,需要卸载 snapd
软件包来清理
检查文件系统挂载
df -h
可以看到所有snaps相关挂载都已经消除:Filesystem Size Used Avail Use% Mounted on udev 876M 0 876M 0% /dev tmpfs 185M 2.7M 183M 2% /run /dev/mmcblk0p2 117G 5.0G 108G 5% / tmpfs 925M 0 925M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 925M 0 925M 0% /sys/fs/cgroup /dev/mmcblk0p1 253M 97M 156M 39% /boot/firmware tmpfs 185M 0 185M 0% /run/user/1000
删除和清理snapd软件包:
sudo apt purge snapd
执行
apt autoremove
清理所有无用软件包:sudo apt autoremove
删除snap目录:
rm -rf ~/snap sudo rm -rf /snap sudo rm -rf /var/snap sudo rm -rf /var/lib/snapd
现在,所有snaps已经清理干净,我们将使用 Docker Atlas 构建 Kubernetes Atlas 。