14

Ubuntu上通过源码包编译安装软件包

 3 years ago
source link: https://note.qidong.name/2020/04/ubuntu-src-deb/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Ubuntu上通过源码包编译安装软件包

2020-04-04 10:35:42 +08  字数:1302  标签: Linux

Debian/Ubuntu系列(也许得加上所有Linux发行版),官方源自带的软件包, 包括可执行文件、静态链接库、动态链接库,在源中都有对应的源码包。 通过下载对应的源码包,可以离线构建其对应的软件包。

以下以gcc为例,介绍如果查询软件包、下载源码包,以及通过源码包构建其软件包。

查询软件

https://packages.ubuntu.com/,可通过搜索,查找到所有官方软件包。

比如,gcc的16.04(xenial)地址:https://packages.ubuntu.com/xenial/gcc

在其左上角,可以找到gcc对应的源码包:gcc-defaults。 除了gcc外,它还对应了cppg++等几十个软件包。

下载源码包

以下在Docker容器中,网络隔绝条件下进行。 在容器中,可下载gcc-defaults源码包:

cd ~
apt update
apt install -y dpkg-dev
apt-get source gcc-defaults

对Debian,源码包默认是处于注释状态,不可用。 需要在/etc/apt/sources.list中,取消那行注释。

通过apt-get source <PACKAGE>,可下载任意源码包。 在Ubuntu 16.04,执行完已自动解压。

# tree .
.
|-- gcc-defaults-1.150ubuntu1
|   |-- c89
|   |-- c89.1
|   |-- c99
|   |-- c99.1
|   |-- classpath.security
|   |-- debian
|   |   |-- README.Debian
|   |   |-- README.Debian.m4
|   |   |-- aot-compile
|   |   |-- aotcompile.py
|   |   |-- changelog
|   |   |-- classfile.py
|   |   |-- compat
|   |   |-- control
|   |   |-- control.cross-ada.in
|   |   |-- control.cross-ml.in
|   |   |-- control.cross.in
|   |   |-- control.doc
|   |   |-- control.hppa64.in
|   |   |-- control.native.in
|   |   |-- control.pkg-config.in
|   |   |-- control.source
|   |   |-- copyright
|   |   |-- copyright.libgcj-common
|   |   |-- cpp.postinst
|   |   |-- cpp.prerm
|   |   |-- dh_javadoc
|   |   |-- dh_nativejava
|   |   |-- disable_64_gcc
|   |   |-- g++.postinst.in
|   |   |-- g++.prerm
|   |   |-- g77-doc.prerm
|   |   |-- g77.postinst.in
|   |   |-- g77.prerm
|   |   |-- gcc.postinst.in
|   |   |-- gcc.preinst
|   |   |-- gcc.prerm
|   |   |-- gdc.preinst
|   |   |-- generate-cacerts.pl.in
|   |   |-- gfortran.postinst.in
|   |   |-- gfortran.prerm
|   |   |-- gij.prerm
|   |   |-- libgcj-bc.overrides
|   |   |-- libgcj-common.postinst
|   |   |-- libgcj-common.preinst
|   |   |-- libgcj-common.prerm
|   |   |-- postinst-rebuild-gcj-db
|   |   |-- postrm-rebuild-gcj-db
|   |   |-- rebuild-gcj-db
|   |   |-- rebuild-security-providers
|   |   `-- rules
|   |-- fsf-funding.7
|   |-- gfdl.7
|   `-- gpl.7
|-- gcc-defaults_1.150ubuntu1.dsc
`-- gcc-defaults_1.150ubuntu1.tar.gz

2 directories, 55 files

源码包中,gcc-defaults_1.150ubuntu1.tar.gz并不是直接的源码,而是构建相关配置文件,解压后就是gcc-defaults-1.150ubuntu1

准备编译依赖

apt-get build-dep gcc-defaults

这里会安装所有编译gcc-defaults需要的软件包,如makepython等。

离线构建

cd gcc-defaults-1.150ubuntu1
dpkg-buildpackage

大概需要2分钟。构建完成后,可以在上级目录查看构建产物:

# ls ..
cpp-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb             gccgo-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb                gfortran-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb
cpp-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb             gccgo-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb              gfortran-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb
cpp-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb           gccgo-doc_6-20160210-1ubuntu1_amd64.deb                         gfortran-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb
cpp-doc_5.3.1-1ubuntu1_amd64.deb                           gccgo-multilib-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb       gfortran_5.3.1-1ubuntu1_amd64.deb
cpp-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb             gccgo-multilib-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb         gobjc++-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb
cpp-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb         gccgo-multilib_6-20160210-1ubuntu1_amd64.deb                    gobjc++-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb
cpp-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb               gccgo-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb                gobjc++-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb
cpp_5.3.1-1ubuntu1_amd64.deb                               gccgo-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb            gobjc++-multilib-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb
g++-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb             gccgo-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb                  gobjc++-multilib-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb
g++-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb             gccgo_6-20160210-1ubuntu1_amd64.deb                             gobjc++-multilib-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb
g++-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb           gcj-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb                  gobjc++-multilib-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb
g++-multilib-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb    gcj-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb                  gobjc++-multilib_5.3.1-1ubuntu1_amd64.deb
g++-multilib-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb  gcj-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb                gobjc++-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb
g++-multilib-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb    gcj-jdk_5.3.1-1ubuntu1_amd64.deb                                gobjc++-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb
g++-multilib-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb      gcj-jre-headless_5.3.1-1ubuntu1_amd64.deb                       gobjc++-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb
g++-multilib_5.3.1-1ubuntu1_amd64.deb                      gcj-jre_5.3.1-1ubuntu1_amd64.deb                                gobjc++_5.3.1-1ubuntu1_amd64.deb
g++-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb             gcj-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb                  gobjc-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb
g++-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb         gcj-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb              gobjc-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb
g++-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb               gcj-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb                    gobjc-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb
g++_5.3.1-1ubuntu1_amd64.deb                               gdc-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb                  gobjc-multilib-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb
gcc-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb             gdc-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb                  gobjc-multilib-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb
gcc-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb             gdc-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb                gobjc-multilib-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb           gdc-multilib-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb       gobjc-multilib-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-defaults-1.150ubuntu1                                  gdc-multilib-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb         gobjc-multilib_5.3.1-1ubuntu1_amd64.deb
gcc-defaults_1.150ubuntu1.dsc                              gdc-multilib-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb           gobjc-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-defaults_1.150ubuntu1.tar.gz                           gdc-multilib_5.3.1-1ubuntu1_amd64.deb                           gobjc-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-defaults_1.150ubuntu1_amd64.changes                    gdc-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb                  gobjc-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-doc_5.3.1-1ubuntu1_amd64.deb                           gdc-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb              gobjc_5.3.1-1ubuntu1_amd64.deb
gcc-hppa64-linux-gnu_5.3.1-1ubuntu1_amd64.deb              gdc-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb                    libgcj-bc_5.3.1-1ubuntu1_amd64.deb
gcc-multilib-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb    gdc_5.3.1-1ubuntu1_amd64.deb                                    libgcj-common_4.9.3-9ubuntu1_all.deb
gcc-multilib-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb  gfortran-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb             libphobos-dev_5.3.1-1ubuntu1_amd64.deb
gcc-multilib-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb    gfortran-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb             pkg-config-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-multilib-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb      gfortran-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb           pkg-config-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb
gcc-multilib_5.3.1-1ubuntu1_amd64.deb                      gfortran-doc_5.3.1-1ubuntu1_amd64.deb                           pkg-config-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb
gcc-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb             gfortran-multilib-arm-linux-gnueabi_5.3.1-1ubuntu1_amd64.deb    pkg-config-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb         gfortran-multilib-arm-linux-gnueabihf_5.3.1-1ubuntu1_amd64.deb  pkg-config-powerpc64le-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb               gfortran-multilib-powerpc-linux-gnu_5.3.1-1ubuntu1_amd64.deb    pkg-config-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gcc_5.3.1-1ubuntu1_amd64.deb                               gfortran-multilib-s390x-linux-gnu_5.3.1-1ubuntu1_amd64.deb
gccgo-aarch64-linux-gnu_5.3.1-1ubuntu1_amd64.deb           gfortran-multilib_5.3.1-1ubuntu1_amd64.deb

这些就是gcc-defaults对应的软件包,可直接在当前系统上安装使用。

结论

https://packages.ubuntu.com/source/xenial/,可以查看到Ubuntu 16.04所有的源码包。 这个页面是按类别给出子页面,底部有完整列表链接。 它们能够完整编译出https://packages.ubuntu.com/xenial/这个页面显示的所有软件包。

Linux发行版是通过对源码包进行版本管控,自动构建出对应的软件包。 虽然直接使用的是软件包,但发行的ISO中已经包含了所有软件的源码的对应版本。

从本文也大概可看出,一个开源发行版的第一方软件生态建设,是怎样一个流程。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK