一、實(shí)驗(yàn)背景
Ubuntu作為最優(yōu)秀的Linux發(fā)行版之一,是初學(xué)者入門的不二選擇,但Linux有個(gè)最大的問題,就是離了網(wǎng)絡(luò)就廢了。
在Windows系統(tǒng)中,安裝軟件十分方便,下載安裝程序,直接setup就可以了。
其實(shí)Linux安裝軟件也非常方便,前提是在聯(lián)網(wǎng)的情況下,但要是離線安裝,就無法享用apt的優(yōu)勢(shì)了,而直接使用dpkg安裝,各種軟件的依賴關(guān)系絕對(duì)讓你頭疼。
在某些對(duì)安全要求比較嚴(yán)的地方,是沒有上網(wǎng)環(huán)境的,如果我們要在不能聯(lián)網(wǎng)的Ubuntu上安裝特定的軟件包(比如nginx),怎么辦?
類比CentOS,聰明如果你,一定想到了將指定的軟件包及其依賴先在有網(wǎng)的機(jī)器上下載下來,然后拷貝到不能聯(lián)網(wǎng)的機(jī)器,搭建本地倉庫(源),執(zhí)行安裝。
那么問題來了:
1. 怎么在有網(wǎng)的機(jī)器上將一個(gè)特定軟件包及其依賴一次性下載下來?
2. 怎么在不能聯(lián)網(wǎng)的機(jī)器,搭建本地倉庫(源)?
二、實(shí)驗(yàn)環(huán)境
操作系統(tǒng): Ubuntu16.04?
serverA? ?192.168.1.101? ? 能聯(lián)網(wǎng)
serverB? 192.168.1.102? ? 不能聯(lián)網(wǎng)
三、在serverA上制作nginx離線安裝包
1. 添加nginx官方倉庫
Official Debian/Ubuntu packages
https://www.nginx.com/resources/wiki/start/topics/tutorials/install

#? vim??/etc/apt/sources.list.d/nginx.list
##############################################
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx
##############################################

# apt-get update
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys? ABF5BD827BD9BF62

添加倉庫(源)信任的另一種方式
#? vim??/etc/apt/sources.list.d/nginx.list
##########################################################
deb? ? ? ?[trusted=yes]? ? ? http://nginx.org/packages/ubuntu/? ?xenial nginx
deb-src? [trusted=yes]? ? ?http://nginx.org/packages/ubuntu/? ?xenial nginx
###########################################################

# apt-get update

列出添加的nginx源中軟件包
#? ll /var/lib/apt/lists/*nginx*
#? grep -E "Package:|Version:" Package /var/lib/apt/lists/nginx.org_packages_ubuntu_dists_xenial_nginx_binary-amd64_Packages
# grep? -E "Package:|Version:" Package? /var/lib/apt/lists/nginx.org_packages_ubuntu_dists_xenial_nginx_binary-amd64_Packages | awk '{print $2}'



# apt-cache madison nginx
# apt-cache policy nginx


2. 下載nginx主包及其依賴
# mkdir -p /root/nginxDeps
# cd???/root/ngixDeps
# apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nginx=1.16.0-1~xenial | grep -v i386| grep "^\w" | sort -u
#??apt-get download? $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nginx=1.16.0-1~xenial | grep -v i386| grep "^\w" | sort -u)



# dpkg-scanpackages . | gzip -9c > Packages.gz


3.將/root/nginxDeps目錄打包,拷貝到serverB離線機(jī)器
#? tar? -zcf? ?nginxDeps.tar.gz? ???nginxDeps
四、在serverB利用離線安裝包搭建本地源
# tar? -zxf? ??nginxDeps.tar.gz? -C? /tmp
注意:不能解壓在/root 目錄下,否則會(huì)報(bào)沒有讀取權(quán)限!
# cp /etc/apt/sources.list? ??/etc/apt/sources.list.bak
# echo? >? /etc/apt/sources.list?
#? vi? ?/etc/apt/sources.list??
#########################################
deb [trusted=yes] file:///tmp/nginxDeps/? ? ./
#########################################
?

# apt-get clean all
# apt-get update

# apt -y install nginx


還原倉庫文件
#???cp? /etc/apt/sources.list.bak? ?/etc/apt/sources.list
#? rm? -rf? /tmp/nginxDeps
如上,我們實(shí)現(xiàn)了nginx在Ubuntu上的離線安裝,其他軟件的安裝方法類似,觸類旁通,舉一反三。
六、參考
Get Docker CE for Ubuntu
https://docs.docker.com/install/linux/docker-ce/ubuntu
How To Build Local APT?Repositories?
https://www.centos.bz/2017/07/apt-mirror-deploy-ubuntu-local-repositry
https://odzangba.wordpress.com/2006/10/13/how-to-build-local-apt-repositories
How To Install Softwares Offline In Ubuntu 16.04
https://www.ostechnix.com/install-softwares-offline-ubuntu-16-04
https://www.jb51.net/article/99570.htm
Is there an apt command to download a deb file from the repositories to the current directory?
https://askubuntu.com/questions/30482/is-there-an-apt-command-to-download-a-deb-file-from-the-repositories-to-the-curr
How to list/download the recursive dependencies of a debian package?
https://stackoverflow.com/questions/22008193/how-to-list-download-the-recursive-dependencies-of-a-debian-package
How to download all dependencies and packages to directory?
https://stackoverflow.com/questions/13756800/how-to-download-all-dependencies-and-packages-to-directory
How To Create A Local Debian/Ubuntu Mirror With apt-mirror?
https://www.howtoforge.com/local_debian_ubuntu_mirror
How do I download a package from apt-get without installing it?
https://stackoverflow.com/questions/4419268/how-do-i-download-a-package-from-apt-get-without-installing-it
How to Force update from unsigned repository Ubuntu 16.04 ?
https://askubuntu.com/questions/732985/force-update-from-unsigned-repository-ubuntu-16-04
How to download .deb package and all dependencies?
https://superuser.com/questions/876727/how-to-download-deb-package-and-all-dependencies
Ubuntu 16.04: Download deb package and all package dependencies
https://www.hiroom2.com/2016/08/10/ubuntu-16-04-download-deb-package-and-all-package-dependencies
How to list all packages from a repository in ubuntu / debian?
https://serverfault.com/questions/252333/list-all-packages-from-a-repository-in-ubuntu-debian
https://www.linuxuprising.com/2018/11/how-to-list-all-packages-in-repository.html
https://askubuntu.com/questions/220478/how-to-get-list-of-installable-packages-from-repositories
THE DEB AND DEB-SRC TYPES: GENERAL FORMAT
https://manpages.debian.org/testing/apt/sources.list.5.en.html