ubuntu 18.04 离线源制作与安装
文章目录
- ubuntu 18.04 离线源制作与安装
- 下载安装包(主机:可联网)
- 生成包索引文件(主机:可联网)
- 生成签名(主机:可联网)
- 在不能上网的目标机上创建缓存目录(目标机:不能联网)
- 更换为本地源(目标机:不能联网)
- 导入公钥(目标机:不能联网)
- 更新源(目标机:不能联网)
- 一些问题:
- 删除密钥
- 关于/dev/null
- 报错:sudo: dpkg-scanpackages: command not found
- 注意
- 普通用户用sudo echo权限依旧写入不了文件
- Ubuntu中update、upgrade、full-upgrade的区别
- apt 和 apt-get的区别
- apt 和 apt-get的区别
说明:该方法是为了解决不能上外网的机器的安装依赖问题。大致思路就是将安装包及其依赖放到本地目录,然后生成索引,生成本地源。apt-get 版本高于1.5,
强制要求gpg对Release文件签名,否则无法使用,会相对复杂一些;低于1.5可用简单方法配置(同16.04方法)。
系统:Ubuntu 18.04
apt-get version:1.6.12(amd64)
下载安装包(主机:可联网)
目标机器是一个新安装系统的机器,所以需要做一个完整的包
# 清空缓存目录,该目录存的都是通过apt-get install 安装软件的的安装包及依赖包
sudo rm -rf /var/cache/apt/archives/*
# 下载安装包,-d选项是只下载,不进行解析安装(只能下载未安装的软件)
# 需要的安装包及依赖都会下载到 /var/cache/apt/archives 目录
sudo apt-get -d install <包名>
生成包索引文件(主机:可联网)
sudo touch /var/debs/Packages.gz
# 必须增加文件的读写执行权限
sudo chmod -R 777 /var/debs
# 需要进入到debs目录
cd /var/debs
# 需要安装apt-utils工具
sudo apt-get install apt-utils -y
# 创建索引
# apt-ftparchive packages . > Packages
# apt-ftparchive release ./ > Release
# debs父目录
apt-ftparchive packages debs > debs/Packages
cd debs
gzip -c Packages > Packages.gz
# 创建release file
apt-ftparchive release ./ > Release
生成签名(主机:可联网)
# 需要下载gpg
sudo apt install gpg
sudo apt install gnupg
sudo apt install rng-tools
# 生成公钥和私钥
gpg --gen-key
# 暂时没用到 gpg -a --export pub_id | apt-key add -
# 查看key
gpg --list-key
# 导出gpg公钥——供apt使用
# gpg -a --export username> username.pub
gpg -a --export robot> robot.pub
# 导出gpg私钥——供server端使用
# gpg -a --export-secret-keys username > Ubuntu_Local_Archive_Automatic_Signing_Key_2017.sec
gpg -a --export-secret-keys robot > Ubuntu_Local_Archive_Automatic_Signing_Key_2020.sec
# 生成ASCII码的签名文件
gpg --clearsign -o InRelease Release
gpg -abs -o Release.gpg Release
在不能上网的目标机上创建缓存目录(目标机:不能联网)
sudo mkdir -p /var/debs
# 将之前主机上/var/cache/apt/archives目录下的所有文件全部拷贝到 /var/debs目录下
sudo cp -r *** /var/debs/
更换为本地源(目标机:不能联网)
修改 /etc/apt/sources.list 文件
# 备份原文件
cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 修改源文件
sudo vim /etc/apt/sources.list
# 将原来内容全部删掉,然后增加一行
# 注意写法
deb file:/var debs/
导入公钥(目标机:不能联网)
# apt-key add username.pub
apt-key add robot.pub
更新源(目标机:不能联网)
sudo apt-get update
然后就可以使用sudo apt-get install命令安装相关的软件了
一些问题:
删除密钥
# 先删除私钥: gpg --delete-secret-keys [用户ID]
gpg --delete-secret-keys robot
# 再删除公钥: gpg --delete-key [用户ID]
gpg --delete-key robot
关于/dev/null
/dev/null位置的参数是指定一个文件,文件名不限,该文件的作用是用来重写覆盖deb软件包中控制文件的某些定义,它的第一行的格式,一行对应一个软件包:
package priority section
#package 指定你所要修改的软件包
#priority 有low,medium,high三个值
#section 用来指定软件包属于哪个section
如果不需要对deb软件包做任何修改你就可以直接指定一个/dev/null文件
报错:sudo: dpkg-scanpackages: command not found
# 需要安装dpkg-dev工具
sudo apt-get install dpkg-dev
注意
兼容性问题,如果我们制作安装包时,用的是64位的ubuntu,那么该离线包只能在其他64位系统上安装。
有些软件对ubuntu server和ubuntu desktop版也不兼容。总之,在什么系统下制作的离线包,就在什么系统下安装。
普通用户用sudo echo权限依旧写入不了文件
用root身份就可以。其实原因很简单,shell对‘>’解释干扰了对这个命令含义的判断。我们本想应该是这样的意思:让sudo执行后面的这些echo ‘1′ > ip_forward
,而实际上是:sudo echo ‘1′
,执行到这里,shell再把它的执行结果重定向到ip_forward里去!当然是无权限,因为流本身不会随echo那样被sudo“感染”上suid权限!
#方案一:让后面那一串东西搁一起执行
sudo sh -c ‘echo 1 > ip_forward’
#方案二:用tee
echo ‘1′ | sudo tee ip_forward
Ubuntu中update、upgrade、full-upgrade的区别
apt install update
:将远程软件库和本地软件库做对比,检查哪些软件可以更新,以及软件包依赖关系,给出一个分析报告。只检查不更新
apt install upgrade
:在执行upgrade 之前要先执行update ,根据update的分析报告去下载并更新软件。在以下几种情况,某个待升级的软件包不会被升级。
- 新软件包和系统的某个软件包有冲突
- 新软件包有新的依赖,但系统不满足依赖
- 安装新软件包时,要求先移除旧的软件包
apt install full-upgrade
:在执行full-upgrade
之前也要先执行update
,升级整个系统,必要时可以移除旧软件包
apt 和 apt-get的区别
简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合
的软件包
apt install full-upgrade
:在执行full-upgrade
之前也要先执行update
,升级整个系统,必要时可以移除旧软件包
apt 和 apt-get的区别
简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合