• Archlinux安装软件的那些事


    img
    个人主页:董哥聊技术
    我是董哥,嵌入式领域新星创作者
    创作理念:专注分享高质量嵌入式文章,让大家读有所得!
    img

    哈喽,老伙计们!

    最近EndeavourOS 也使用了一段时间,由于一些突发状况,不得不去重装系统

    登录上DistroWatch网站,发现EndeavourOS已经干掉了Manjaro,冲到了第二名;结合自己的使用体验,虽然也会遇到一些坑,但是无伤大雅,因此决定再次安装EndeavourOS

     

    1、ArchLinux

    image-20221127131357430

    EndeavourOS也属于ArchLinux的派生版。

    ArchLinux是一个独立开发的x86-64通用的GNU/Linux发行版,由加拿大程序设计师Judd Vinet从2001年早起开始开发,在2002年3月正式发行!

    它致力于通过滚动发布来提供大多数软件的最新稳定版本。默认安装一个最小的基本系统,由用户配置添加有意需要的内容。

     

    1.1 ArchLinux原则

    ArchLinux项目遵循简洁主义,其主要设计原则有:

    • 简单:避免任何不必要的添加、修改
    • 现代:尽全力保持处于最新的稳定版本,采用滚动升级策略,安装之后可以持续升级。
    • 实用:仓库中既提供了开源、自由的软件,也提供了闭源软件。实用性大于意识形态。
    • 用户中心性:该发行版旨在满足为其贡献者的需求,而不是试图吸引尽可能多的用户。它面向精通 GNU/Linux 的用户,或任何愿意阅读文档并解决自己问题的自己动手的态度的人。
    • 多功能性:Arch Linux 是一个通用的发行版。安装时只提供命令行环境;用户无需删除不需要的包,而是可以通过在x86-64架构的官方软件仓库中提供的数千个高质量包中进行选择来构建自定义系统。

     

    1.2 软件包管理

    1.2.1 软件仓库

    ArchLinux现存在以下官方仓库:

    • core:包含启动系统所必需的、链接互联网时可能需要的、编译软件包时需要的、检查、修复文件系统的工具、在安装过程中可能用到的软件包和它们的依赖。
    • extra:提供基本系统不需要的软件包,包括桌面环境和其他程序。
    • community:提供由社区构建和投票的软件包,包括因有足够投票而被“Trusted User”所收养的。
    • multilib:为x86_64用户提供的支持在64位环境下使用32位软件的集中化仓库。

     

    1.2.2 包管理器

    archlinux平台,常用的包管理器是pacmanaur,我们一般使用这两个包管理器来安装需要的软件。

    • pacmanArchLinux官方使用的软件包管理器,具有依赖处理和构建软件包的功能。

    • AURArch用户软件仓库(AUR:Arch User Repository),是一个面对广大Arch用户,以社区为主导的软件仓库,由开发者贡献他们自己的软件包,AUR社区对其进行投票,一旦某个软件包拥有足够多的票数,AUR的受信用户就会将它加入到[community]软件库,使得可以通过pacman来使用它们。

     

    2、Pacman

    image-20221127131639046

    2.1 pacman介绍

    pacman软件包管理器,是ArchLinux的一大亮点,其可以自动解决安装过程中的依赖问题, 自动下载并且安装所需要的软件包。

     

    2.2 pacman常用命令

    • pacman -S :安装指定软件包
    • pacman -R :移除指定软件包
    • pacman -U :更新指定软件包
    • pacman -Ss :查询指定软件包
    • pacman -Syy:同步软件包,让本地的包数据库与远程的软件仓库同步
    • pacman -Syu:同步远程软件库到本地,并保持系统到最新状态。

    具体详细的命令可以参考man pacman

    或者参考官方手册https://archlinux.org/pacman/pacman.8.html#_options

     

    2.3 pacman安装流程

    虽然我们经常随心所欲的pacman,但是我们真的知道其行为背后的意义吗?

    出问题的时候,我们能够准确定位到哪个环节的问题吗?

    下面我们分析一下pacman背后的动作!

     

    我们以flameshot为例,来看一下pacman安装流程

    2.3.1 查询软件包

    我们安装软件时,要确保远程arch软件仓库是否有对应的软件,以确保能够正常下载软件包。

    查询方式有两种

    sudo pacman -Ss "flameshot"			#可以根据关键词查找
    
    • 1
    • 第一种正如上面所写, 直接命令行查询!
    • 第二种:进入官方Arch软件仓库网站,进行查询https://archlinux.org/packages/

     

    2.3.2 安装软件包

    查询到想要的软件包后,进行安装!

    sudo pacman -S flameshot			# 写上对应的包名
    
    • 1

    安装过程,我们也来详细分析一下!

    sudo pacman -S flameshot			# 写上对应的包名
    [sudo] donge 的密码:正在解析依赖关系...
    正在查找软件包冲突...
    
    软件包 (1)           新版本    净变化    下载大小
    community/flameshot  12.1.0-1  2.78 MiB  0.58 MiB
    
    下载大小:      0.58 MiB
    全部安装大小:  2.78 MiB
    
    :: 进行安装吗? [Y/n] y
    :: 正在获取软件包......
     flameshot-12.1.0-1-x86_64                                                           593.3 KiB   721 KiB/s 00:01 [--------------------------------------------------------------------] 100%
    (1/1) 正在检查密钥环里的密钥                                                                                     [--------------------------------------------------------------------] 100%
    (1/1) 正在检查软件包完整性                                                                                       [--------------------------------------------------------------------] 100%
    (1/1) 正在加载软件包文件                                                                                         [--------------------------------------------------------------------] 100%
    (1/1) 正在检查文件冲突                                                                                           [--------------------------------------------------------------------] 100%
    :: 正在处理软件包的变化...
    (1/1) 正在安装 flameshot                                                                                         [--------------------------------------------------------------------] 100%
    flameshot 的可选依赖    gnome-shell-extension-appindicator: for system tray icon if you are using Gnome
        grim: for wlroots wayland support
        xdg-desktop-portal: for wayland support, you will need the implementation for your wayland desktop environment
    :: 正在运行事务后钩子函数...
    (1/3) Arming ConditionNeedsUpdate...
    (2/3) Updating icon theme caches...
    (3/3) Updating the desktop file MIME type cache...
    
    • 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
    1. 查找依赖关系,并解析依赖关系,如果有的话,会先安装依赖项!
    2. 查找软件包:在Arch软件管理中查询指定包,并进行下载。为了确保包的安全性,还要进行以下校验:
      1. 密钥检查
      2. 完整性检查
      3. 下载软件包
      4. 检查文件冲突
    3. 运行事后钩子函数
      1. 条件更新检查
      2. 图标主题更新
      3. 桌面文件更新

    最终,我们可以在桌面上直接调用该程序。

     

    Tip

    我们通过pacman下载的软件,一般存储在/var/cache/pacman/pkg/路径下,其后缀为tar.zst的压缩文件,然后再进行的安装。

    我们如果在网上下载其他的tar.zst后缀文件,我们可以通过pacman -U xxx.tar.zst命令直接安装!

     

    3、AUR

    image-20221127134405183

    3.1 AUR介绍

    AUR:Arch User Repository——Arch 用户软件仓库,是一个面对广大Arch用户、以社区为主导的软件仓库。

    AUR的初衷是组织社区内分享PKGBUILDAUR社区对它们进行投票或反对,一旦某个软件包拥有足够多的票数,AUR的受信用户就会将它加入到[community]软件库,使得可以通过pacmanABS来使用它们。

     

    谈到AUR,就不得不想到Yay

    image-20221127135032103

    yay——AUR Helper

    YayArch Linux 下基于 CLI 的最佳 AUR 助手,使用 Go 语言编写。我们能够使用yay快速安装AUR发布的软件包!

     

    Tip

    • 开发者一般提交的都是一个用包描述文件的集合(PKGBUILD)

    • 通过yay对包文件(PKGBUILD) 的解析,能够用于创建压缩包(.pkg.tar.zst)。

    • 最后生成的压缩包进行安装。

    该描述文件为PKGBUILD 可以被yaypamacaurman等工具自动构建或者makepkg手动构建,最后生成压缩包,用于安装软件。

    AUR上的所有内容都是由普通用户上传的,很少对他们的内容进行检查,由您来验证内容是否可以安全使用

     

    3.2 常用命令

    • yay -S :安装指定软件包
    • yay -R :移除i指定软件包
    • yay :查找指定安装包
    • yay:更新pacmanaur

     

    3.3 yay安装流程

    同样,我们使用yay来进行安装时,最好去弄明白其背后的原理!

     

    我们以wexin为例

    3.3.1 查询软件包

    我们安装软件时,要确保远程AUR软件仓库是否有对应的软件,以确保能够正常下载软件包。

    查询方式有两种

    yay "weixin"			#可以根据关键词查找
    
    • 1
    • 第一种正如上面所写, 直接命令行查询!
    • 第二种:进入官方AUR软件仓库网站,进行查询https://aur.archlinux.org/packages 在网站 中寻找安装包,可以根据VersionVotesPlpularlty来选择合适的安装包!

     

    3.3.2 安装软件包

    查询到想要的软件包后,进行安装!

    yay -S weixin			# 写上对应的包名
    
    • 1

    安装过程,我们也来详细分析一下!

    $ yay weixin
    6 aur/deepin-wxwork 2.8.10.2010deepin0-2 (+3 0.00) (孤立) (过时的: 2021-12-13) 
        Tencent Weixin Work Client on Deepin Wine
    5 aur/com.qq.weixin.work.deepin-x11 4.0.0.6007deepin10-1 (+3 1.44) 
        Deepin Wine Weixin Work on x11
    4 aur/com.qq.weixin.work.deepin 3.1.12.6001deepin8-1 (+9 0.01) (孤立) (过时的: 2021-12-13) 
        Deepin Wine Weixin Work
    3 aur/com.qq.weixin.deepin 3.2.1.154_14-2 (+12 0.57) 
        Deepin Wine WeChat
    2 aur/com.qq.weixin.spark 3.7.6.44spark0-1 (+16 0.15) 
        Tencent WeChat Client from Spark Store
    1 aur/deepin-wine-wechat 3.7.6.44-1 (+60 3.18) (过时的: 2022-11-14) 
        Tencent WeChat on Deepin Wine(com.qq.weixin.deepin) For Archlinux
    ==> 要安装的包 (示例: 1 2 3, 1-3 或 ^4)
    ==> 3
    :: 正在检查冲突...
    :: 正在检查内部冲突...
    [Repo Make:55]  libyuv-r2322+3aebf69d-1  libavif-0.11.1-1  libheif-1.14.0-1  gd-2.3.3-5  libgphoto2-2.5.30-1  libudev0-shim-1-4  vkd3d-1.5-1  libjpeg6-turbo-1.5.3-2  lib32-alsa-lib-1.2.8-1  lib32-alsa-plugins-1.2.7.1-1  lib32-libxtst-1.2.4-1  lib32-at-spi2-core-2.46.0-2  lib32-colord-1.4.6-1  lib32-gdk-pixbuf2-2.42.10-1  lib32-libogg-1.3.5-1  
    ......
    ......
    
    :: 安装后删除生成依赖? [y/N] 
    :: (1/4) 下载了 PKGBUILD: deepin-udis86
    :: (2/4) 下载了 PKGBUILD: deepin-wine6-stable
    :: (3/4) 下载了 PKGBUILD: deepin-wine-helper
    :: (4/4) 下载了 PKGBUILD: com.qq.weixin.deepin
      4 deepin-udis86                    (构建文件已存在)
      3 deepin-wine6-stable              (构建文件已存在)
      2 deepin-wine-helper               (构建文件已存在)
      1 com.qq.weixin.deepin             (构建文件已存在)
    ==> 显示哪些差异?==> [N]没有 [A]全部 [Ab]中止 [I]已安装 [No]未安装 或 (1 2 3, 1-3, ^4)
    ==> 
    :: (1/4) 正在解析 SRCINFO: deepin-udis86
    :: (2/4) 正在解析 SRCINFO: deepin-wine6-stable
    :: (3/4) 正在解析 SRCINFO: deepin-wine-helper
    :: (4/4) 正在解析 SRCINFO: com.qq.weixin.deepin
    正在解析依赖关系...
    正在查找软件包冲突...
    
    软件包 (55)                           新版本                净变化     下载大小
    extra/gd                              2.3.3-5                0.67 MiB  0.15 MiB
    multilib/lib32-alsa-lib               1.2.8-1                1.10 MiB  0.38 MiB
    multilib/lib32-alsa-plugins           1.2.7.1-1              0.30 MiB  0.07 MiB
    multilib/lib32-at-spi2-core           2.46.0-2               0.64 MiB  0.17 MiB
    multilib/lib32-cairo                  1.17.6-2               1.61 MiB  0.61 MiB
    
    ......
    ......
    
    下载大小:      20.20 MiB
    全部安装大小:  73.18 MiB
    :: 进行安装吗? [Y/n] 
    :: 正在获取软件包......
     lib32-gst-plugins-base-libs-1.20.4-1-x86_64                                        1548.6 KiB   633 KiB/s 00:02 [--------------------------------------------------------------------] 100%
     lib32-gtk3-1:3.24.35-2-x86_64                                                         2.8 MiB  1097 KiB/s 00:03 [----------------------------
     
    ......
    ......
    
    :: 正在运行事务后钩子函数...
    (1/7) Updating udev hardware database...
    (2/7) Reloading device manager configuration...
    (3/7) Arming ConditionNeedsUpdate...
    (4/7) Updating the MIME type database...
    (5/7) Probing GDK-Pixbuf loader modules...
    (6/7) Probing 32-bit GDK-Pixbuf loader modules...
    (7/7) Probing 32-bit GTK3 input method modules...
    ==> 正在创建软件包:com.qq.weixin.deepin 3.2.1.154_14-2 (2022年11月26日 星期六 21时06分21秒)
    ==> 获取源代码...
      -> 正在下载 com.qq.weixin.deepin_3.2.1.154deepin14_i386.deb...
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- -
    
    ......
    ......
    
    
    ==> 正在验证 source 文件,使用md5sums...
        udis86_1.72-4_i386.deb ... 通过100  670k  100  670k    0     0   394k      0  0:00:01  0:00:01 --:--:--  394k        0    00 : 000::0002: 2-6- : -0-::0-0-: 0 10 : 000::0002: 2 52 4236k89k
    
    ......
    ......
    
    
    ==> 正在检查运行时依赖关系...
    ==> 正在检查编译时依赖关系==> 获取源代码...
      -> 找到 udis86_1.72-4_i386.deb
    ==> 正在验证 source 文件,使用md5sums...
        udis86_1.72-4_i386.deb ... 通过==> 正在删除现存的 $srcdir/ 目录...
    ==> 正在释放源码...
      -> 正在解压缩 udis86_1.72-4_i386.deb,使用 bsdtar
    ==> 源代码已就绪。==> 正在创建软件包:deepin-udis86 1.72_4-2 (2022年11月26日 星期六 21时07分21秒)
    ==> 正在检查运行时依赖关系...
    ==> 正在检查编译时依赖关系==> 警告: 使用现存的 $srcdir/ 树==> 正在进入 fakeroot 环境...
    ==> 正在开始 package()...
    ==> 正在清理安装...
      -> 正在删除 libtool 文件...
      -> 正在清除不打算要的文件...
      -> 正在移除静态库文件...
      -> 正在从二进制文件和库中清除不需要的系统符号...
      -> 正在压缩 man 及 info 文档...
    ==> 正在检查打包问题...
    ==> 正在构建软件包"deepin-udis86"...
      -> 正在生成 .PKGINFO 文件...
      -> 正在生成 .BUILDINFO 文件...
      -> 正在生成 .MTREE 文件...
      -> 正在压缩软件包...
    ==> 正在离开 fakeroot 环境。==> 完成创建:deepin-udis86 1.72_4-2 (2022年11月26日 星期六 21时07分24秒)
    ==> 清理中...
     -> libgphoto2 未满足,正在刷新安装队列正在加载软件包...
    正在解析依赖关系...
    正在查找软件包冲突...
    
    软件包 (1)     新版本    净变化  
    
    deepin-udis86  1.72_4-2  0.14 MiB
    
    全部安装大小:  0.14 MiB
    
    :: 进行安装吗? [Y/n] 
    (1/1) 正在检查密钥环里的密钥                                                                                     [--------------------------------------------------------------------] 100%
    (1/1) 正在检查软件包完整性                                                                                       [--------------------------------------------------------------------] 100%
    (1/1) 正在加载软件包文件                                                                                         [--------------------------------------------------------------------] 100%
    (1/1) 正在检查文件冲突                                                                                           [--------------------------------------------------------------------] 100%
    :: 正在处理软件包的变化...
    (1/1) 正在安装 deepin-udis86                                                                                     [--------------------------------------------------------------------] 100%
    :: 正在运行事务后钩子函数...
    (1/1) Arming ConditionNeedsUpdate...
    ==> 正在创建软件包:deepin-wine6-stable 6.0.0.39-1 (2022年11月26日 星期六 21时07分25秒)
    ==> 正在检查运行时依赖关系...
    ==> 正在检查编译时依赖关系==> 获取源代码...
      -> 找到 deepin-wine6-stable_6.0.0.39-1_amd64.deb
    ==> 正在验证 source 文件,使用sha256sums...
        deepin-wine6-stable_6.0.0.39-1_amd64.deb ... 通过==> 正在删除现存的 $srcdir/ 目录...
    ==> 正在释放源码...
    ==> 源代码已就绪。==> 正在创建软件包:deepin-wine6-stable 6.0.0.39-1 (2022年11月26日 星期六 21时07分28秒)
    ==> 正在检查运行时依赖关系...
    ==> 正在检查编译时依赖关系==> 警告: 使用现存的 $srcdir/ 树==> 正在进入 fakeroot 环境...
    ==> 正在开始 package_deepin-wine6-stable()...
    ==> 正在清理安装...
      -> 正在删除 libtool 文件...
      -> 正在清除不打算要的文件...
      -> 正在移除静态库文件...
      -> 正在从二进制文件和库中清除不需要的系统符号...
      -> 正在压缩 man 及 info 文档...
    ==> 正在检查打包问题...
    ==> 正在构建软件包"deepin-wine6-stable"...
      -> 正在生成 .PKGINFO 文件...
      -> 正在生成 .BUILDINFO 文件...
      -> 正在生成 .MTREE 文件...
      -> 正在压缩软件包...
    ==> 正在离开 fakeroot 环境。==> 完成创建:deepin-wine6-stable 6.0.0.39-1 (2022年11月26日 星期六 21时08分45秒)
    ==> 清理中...
     -> p7zip 未满足,正在刷新安装队列正在加载软件包...
    
    ......
    ......
    
    
    :: 正在运行事务后钩子函数...
    (1/3) Arming ConditionNeedsUpdate...
    (2/3) Updating icon theme caches...
    (3/3) Updating the desktop file MIME type cache...
    
    
    • 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
    1. 查找软件包,选择对应软件包进行下载
    2. 检查并下载PKGBUILD构建文件,以确保安全性
    3. 通过PKGBUILDi来检查并解析依赖项,进行下载,以解决软件依赖关系
    4. 下载所需要的软件包,并进行校验
    5. 最后进行安装软件包

    Tip

    我们通过yay下载的PKGBUILD构建文件,一般存储在~/.cache/yay/路径下。

    根据PKGBUILD构建文件,下载后缀为tar.zst的软件包,然后再进行的安装。

    我们在网上直接下载的PKGBUILD文件,也可以通过以下命令安装

    # 生成后缀.pkg.tar.xz的压缩文件
    makepkg
    # 使用pacman安装
    sudo pacman -U *.pkg.tar.xz
    
    • 1
    • 2
    • 3
    • 4

     

    4、deb包安装

    image-20221127181308791

    最后,我们来了解以下Ubuntu/Debian系统下的deb包如何安装!

    大体思路如下

    • deb包转化为archlinux所能直接安装的包,如tar.zst
    • 然后利用sudo pacman -U *.pkg.tar.zst命令安装

    通常,将deb包转换为tar.zst的工具使用用debtap

    Good Luck!

     

    5、推荐文章

    [1]:https://blog.csdn.net/maweizz/article/details/122113502

    [2]:https://blog.csdn.net/weixin_53064820/article/details/127680536

    img

    点赞+关注,永远不迷路

    img
  • 相关阅读:
    【状态机设计】Moore、Mealy状态机、三段式、二段式、一段式状态机书写规范
    学透这份 300 页的 2022 最新 java 面试题及答案,让你成功定位阿里 P8
    Go语言进阶,并发通道机制搭建一个可注册昵称的聊天室
    【学习笔记】指向常量的指针和常量指针
    小学生python游戏编程arcade----坦克大战(1)
    StableVideo:使用Stable Diffusion生成连续无闪烁的视频
    桶排序以及排序内容大总结
    8万字带你入门Rust
    访问学者申请|面签的八大注意事项
    JVM原理(GC,内存),JAVA底层
  • 原文地址:https://blog.csdn.net/dong__ge/article/details/128091432