一般的centos7安装桌面都是通过组安装的,如果离线安装不太方便。

我不想像大多数人一下,就下载rpm,然后一把梭全部安装。
因此将iso内的group配置成本地的模式
repotrack不仅解决了包的依赖包,还解决了依赖包和依赖包之间的关系

制作本地安装源的iso

准备环境

下载包与所需要的依赖库

cd /root/
yum -y install yum-utils epel-release centos-release-scl wget
mkdir stress-zcloud-x86_64-local

准备手动更新的包列表
如果联网了,yum可以通过更新本地的rpm包来解决间接依赖问题。如果自动扫描依赖不充足,需要手动指定需要准备的依赖包

cat << EOF >rpm_list.txt
# python
python3-pip

# gcc10
devtoolset-10-gcc

# other-tools
yum-utils
createrepo

wget
stress
tree
htop
net-tools
putty
sysstat
gcc-c++

# resolve dependencies
avahi-autoipd

EOF

我这里还夹带的常用工具,其实我实测公司的镜像只需要夹带avahi-autoipd足够了

保存文件

yum clean all
repotrack -p /root/stress-zcloud-x86_64-local/ $(sed -e '/#/d;/^[ ]*$/d' rpm_list.txt)

获取组rpm包

使用repoquery -g -a获取所需下载的列表,下面预先填的就是安装gnome必备的一些组

for i in "core" "guest-agents" "guest-desktop-agents" "fonts" "dial-up" "internet-browser" "gnome-desktop";do  
    repoquery --qf=%{name} -g --list --grouppkgs=all "$i" | \
       xargs -I{} repotrack  -p /root/stress-zcloud-x86_64-local/ {}; 
  done

获取现有的组配置

下载centos7的iso,CentOS-7-x86_64-Everything-2009.iso,将其挂载到mnt目录

mount CentOS-7-x86_64-Everything-2009.iso /mnt/
cd /mnt/repodata/

有一个文件名带有c7-x86_64-comps.xml,即group文件,将其拷贝出来使用。重命名为stress-zcloud-x86_64-local-comps.xml

cp *c7-x86_64-comps.xml /root/stress-zcloud-x86_64-local-comps.xml

安装createrepo,会在指定文件夹下创建repodata/repomd.xml

yum install -y createrepo
createrepo /root/stress-zcloud-x86_64-local/

将group编入repo文件

createrepo -g /root/stress-zcloud-x86_64-local-comps.xml /root/stress-zcloud-x86_64-local/

打包已下载的软件包成iso

mkisofs -o stress-zcloud-x86_64-local.iso -J -R -V zcloud stress-zcloud-x86_64-local

# -r参数 将所有的文件属性设置所有人可读属性
# -o参数  指定光盘名称
# -V参数 后指定光盘集合的ID(Windows上挂载后驱动器的名称)
# -J参数  保持原始文件名
# -R参数 递归,将文件夹下的所有文件打包 

使用本地安装源

将文件上传到/var/tmp/目录:scp stress-zcloud-x86_64-local.iso root@192.168.68.13:/var/tmp/stress-zcloud-x86_64-local.iso
参考nvidia使用的目录,挂载到/var/stress-zcloud-x86_64-local/,用来提供yum install 的服务文件

挂载

mkdir /var/stress-zcloud-x86_64-local/
mount /var/tmp/stress-zcloud-x86_64-local.iso /var/stress-zcloud-x86_64-local/

使用匹配非/etc/yum.repos.d/内cuda与stress的文件,将其移走

find /etc/yum.repos.d/ -type f  ! -name 'cuda*' ! -name 'stress*' -name '*.repo' -exec mv {} {}.bk \;

配置本地yum源,关闭gpg检查

cat << EOF >/etc/yum.repos.d/stress-zcloud-x86_64-local.repo
[stress-zcloud-x86_64-local]
name=stress-zcloud-x86_64-local
baseurl=file:///var/stress-zcloud-x86_64-local
enabled=1
gpgcheck=0
EOF

使本地源生效

yum clean all && yum makecache

查看生效的源

yum repolist
yum grouplist

使用

sudo yum groupinstall "GNOME Desktop"

sudo yum install $(sed -e '/#/d;/^[ ]*$/d' rpm_list.txt)

可能会有冲突,人工检查冲突来源,比如尝试使用官方源看是否有冲突,少用--skip-broken

设置默认从桌面启动,然后重启服务器

systemctl set-default graphical

参考:
Possible to download all the packages from "groupinstall" and then run ( yum --nogpgcheck localinstall *.rpm )?
How to Install GNOME Desktop(GUI) on CentOS 7
How to use yum to download a package without installing it
How to create custom package groups from a custom yum repository?

最后修改:2022 年 12 月 08 日
如果觉得我的文章对你有用,请随意赞赏