在 Debian 9 中删除构建依赖包

Deleting build dependency packages in Debian 9

我有一个脚本来编译LEMP服务器的几个程序(nginx,php,openssl等...),我想知道编译完成后我可以删除哪些包。

我在脚本中安装和清理包的地方留下了代码片段。

包安装

    # TODO: check this: Packages that can be deleted after the script is finished.

    apt-get -y install libxau-dev libxdmcp-dev xorg-sgml-doctools \
    libexpat1-dev xsltproc docbook-xsl \
    docbook-xml needrestart autoconf \
    automake m4 bison \
    build-essential g++ pkg-config \
    autotools-dev libtool expect \
    libcunit1-dev x11proto-core-dev file \
    libenchant-dev libjemalloc-dev gnu-standards \
    autoconf-archive g++-multilib gcc-multilib \
    libstdc++-6-dev gcc-6-locales \
    g++-6-multilib valgrind valgrind-mpi \
    valkyrie gcj-jdk flex \
    tk-dev libc-ares-dev

    # TODO: check this: Important packages that must be installed.

    apt-get -y install coreutils binutils uuid-dev wget \
    mcrypt libmcrypt-dev cython \
    perl libpcre3 libpcre3-dev  \
    libxml2-dev libxslt1-dev \
    libfreetype6-dev libfontconfig1-dev \
    libtiffxx5 libjpeg62-turbo-dev libjpeg-dev libpng-dev \
    libbz2-dev zlib1g-dev libzip-dev \
    libjansson-dev \
    libgmp-dev libev-dev libevent-dev \
    libsqlite3-dev libgdbm-dev libdb-dev \
    libsystemd-dev libspdylay-dev \
    libaio-dev libncurses5-dev \
    libunistring-dev libunbound-dev \
    trousers libidn2-0 \
    libicu-dev libltdl-dev libpspell-dev libreadline-dev \
    libc6-dev libc-dbg libpam0g-dev libmsgpack-dev libstemmer-dev libbsd-dev \
    gettext debian-keyring liblinear-tools liblinear-dev \
    libdbi-perl libboost-all-dev rsync net-tools libdbd-mysql-perl \
    re2c libboost-dev libboost-thread-dev qt4-qmake libqt4-dev \
    libssl-dev golang python-dev python3-dev python-setuptools

包裹清洁

apt-get -y remove libxau-dev libxdmcp-dev xorg-sgml-doctools \
libexpat1-dev xsltproc docbook-xsl \
docbook-xml needrestart autoconf \
automake m4 bison \
build-essential g++ pkg-config \
autotools-dev libtool expect \
libcunit1-dev x11proto-core-dev file \
libenchant-dev libjemalloc-dev gnu-standards \
autoconf-archive g++-multilib gcc-multilib \
libstdc++-6-dev gcc-6-locales \
g++-6-multilib valgrind valgrind-mpi \
valkyrie gcj-jdk flex \
tk-dev libc-ares-dev

apt-get -y autoremove apt-get clean

我想做这种清理是个好习惯,我可以清理所有名称以 -dev 结尾的包。或者这会影响什么?

谢谢。

这一切都取决于。

如果您 compiling 使用适当的打包工具和工作流程创建一个或多个 Debian 软件包,然后安装它们(通过 dpkg),这些软件包将包含依赖信息(有些是自动检测到的——比如 run/load 生成的二进制文件需要哪些动态库;其他的是在打包过程中手动添加的)。 然后,这些依赖项将确保所有必需的包都将保持安装状态。

但是,如果您只是编译一些随机软件 superserver 并通过 make install 安装它,系统无法知道您的二进制文件 /usr/local/bin/superserver 实际上需要 Debian 的存在包。

当您安装一些 -dev 包以满足构建依赖时,这可能会引入一些额外的包(通常是相应的动态库;例如安装 libfoo-dev 将确保您也有 libfoo0 已安装)。 一旦您删除了所有依赖于另一个已自动安装以满足这些依赖性的软件包(例如 libfoo-dev)的软件包(例如 libfoo-dev),那么 apt-get -y autoremove 将自动删除这些剩余部分。

因此,如果您的 superserver 依赖于 libfoo0 但系统不知道它,您最终会得到一个损坏的 superserver 二进制文件。