Debian是一个十分受欢迎且用途多样的的Linux发行版和派系,你可以在轻轨控制系统、广告屏、个人笔记本、开发板,甚至物联网设备上找到Debian的身影。而在昨天的博客中,您将会看见:
乙女解剖deb包的解包
Debian卸载程序
UEFIの号哭
不太聪明的内核更新方案
罗莎莉亚看了都说好的程序更新
危依赖危
杀害那种Arch人
等等是不是串台到某著名铁道up那儿去了
1deb包的结构以及DEBIAN目录内文件的解读
deb包是Debian系系统所使用的程序安装包,你可以使用dpkg-deb-x以解压deb包的内容,并使用dpkg-deb-e/DEBIAN解压deb包的主控文件。
当你解压完毕后,你应该听到以下的目录结构:
在这种解压出的目录中linux解压命令,包的根目录即代表着Linux系统的根目录,比如你想要在`/usr/bin/`下创建一个名为`tadokoro`的文件,这么你的目录树就应当为:
DEBIAN文件夹是deb包的主控文件目录linux空间,内部通常分为control、postinst和postrm三个文件,分别控制程序的信息、配置和卸载配置,不会被安装进系统根目录中。不仅这种文件以外,你可能就会找到用于申明合同的copyright、定义软件包编译规则的rules、记录软件包更变的changelog、在解包前进行配置的preinst,和在软件包实际被删掉前会被执行的prerm。
另外,`DEBIAN`文件夹及其下属文件的权限应被设为`0755`,即`rwxrw-rw-`deb文件安装 linux,否则将会出现难以打包的情况。
1.1control的内容和作用
control文件的内容通常如下,此处使用一位同学开发的一款名为“LuminaChat”的软件作为示例:
在以上的事例中,这种数组的涵义如下:
-Package数组用于定义该deb包的包名,相当于com.termux这样的Android应用程序包名。
-Version数组申明了该deb包的版本。
-License数组申明了该deb软件包所使用的条款/开源合同。
-Vendor数组申明了该软件包的供应商,通常情况下该数组是非必需的。
-Architecture数组申明了该软件包运行所需的CPU构架。常用的构架有amd64(x86_64)、i386(x86)、arm64和armhf。虽然有些不同的构架名称对应着另一个完全兼容甚至完全相同的构架,但dpkg依然会由于构架不符而拒绝安装该deb包,诸如arm64与armv8,armhf与armeabi-v7a。
-Maintainer数组申明了该软件包的维护者。
-Depends数组申明了被该软件包依赖的其他软件包。
-Recommends数组申明了该软件包推荐安装的其他包。
-Section数组申明了该软件包的类别。常见的类别有utils、net、doc和x11等。
-Priority数组申明了该软件包在系统中的优先级。优先级的值通常为required、important、standard或optional,分别代表系统正常运行所必需的软件包(删掉将造成系统完全损毁)、系统正常运行所须要的软件包(或最低限度的必要工具)、在默认情况下会被安装且不会与其他同级别包冲突的软件包和可能与其他软件包出现冲突的普通软件包。除此以外还有extra级别,但目前已被弃用。
-Homepage数组申明了该软件包的项目主页。
-Description数组为该软件包的描述deb文件安装 linux,会在被`aptsearch`搜索时显示(假如早已上传软件包到apt源的话)。
不仅以上数组以外,其他软件包的control文件内可能都会包含:
-申明建议安装的软件包的Suggests数组。
-申明源代码名称的Source数组。
-定义软件安装前必须安装的软件包的Pre-Depends数组。
-申明软件包是否为系统运行所需必要软件包的Essential数组。
1.2DEBIAN目录下的其他文件
本节将不再赘言postinst和postrm以外文件的用途。
postinst文件通常用于软件包解压后的文件权限修改及配置文件创建。你可以把它当作shell脚本使用,例如:
postrm文件用于软件包卸载后的配置工作,你也可以把它当作一个shell脚本来使用。
不过shell脚本有哪些用呢?
没错,你可以这样使用。
假如你将EFI分区挂载到了文件系统的话,这就除了可以称作DebianUninstaller,还可以称作UEFI快乐器了,能让硬碟上所有系统都快乐的那个。
另外,你也可以使用以上的方式打包LinuxKernel。但这些方式并不是很聪明,由于打包后的deb文件太大了。
2胡乱使用deb包的后果
众所周知,你可以在ArchLinux内安装dpkg和apt。使用dpkg并不会导致多严重的后果,由于dpkg会制止你在缺位依赖的情况下安装deb包(dpkg难以读取pacman包)。但若果你使用了apt,那就是另一个故事了...
apt会手动补全所有的依赖,也就造成大多数系统文件会被apt替换。在你使用apt安装包之后重启系统,你大几率会遇到由C运行库版本不正确造成的KernelPanic。
本文转自我的个人博客,以CCBY-SA4.0()合同进行共享。