Ubuntu上通过源码包编译安装软件包
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
外,它还对应了cpp
、g++
等几十个软件包。
下载源码包 ¶
以下在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需要的软件包,如make
、python
等。
离线构建 ¶
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中已经包含了所有软件的源码的对应版本。
从本文也大概可看出,一个开源发行版的第一方软件生态建设,是怎样一个流程。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK