在openSUSE-Leap-15.6-DVD-x86_64-Media自制应用软件离线包——备份91个视频解码器的rpm包

在openSUSE-Leap-15.6-DVD-x86_64-Media自制应用软件离线包------备份91个视频解码器的rpm包

opensuse leap 16.0要求电脑CPU是x86_64-v2,而我的电脑CPU是x86_64-v1,所以极限就是安装使用opensuse leap 15.6,它的EOL(End of Life),也就是俗称的"停服",达到2026年4月30日将完全停止支持和维护。所以要自制应用软件离线包,例如本文讲述备份91个视频解码器的rpm包

https://en.opensuse.org/openSUSE:Roadmap

Leap 15.6

Milestone Date Notes

Public Availability Wed, Jun 12, 2024

End of Life Thu, Apr 30, 2026 No longer supported. Time to upgrade

一、另外划分出一个25GB的分区重新安装opensuse leap 15.6

台式机的/dev/sda10分区是25GB的是已经安装opensuse leap 15.6并作为日常使用的,我在硬盘的最后空间划分出一个25GB的分区重新安装opensuse leap 15.6专门用于实验自制各种应用软件离线包,虽然只有一行文字的描述,但是背后的工作量是很大的,要根据自己的实际情况和掌握linux经验来实现这个目的

二、所有repo文件都加上keeppackages=1

进入/etc/zypp/repos.d/文件夹使用文本编辑软件打开所有repo文件在最后新开一行加上keeppackages=1

localhost:~ # cd /etc/zypp/repos.d/

localhost:/etc/zypp/repos.d # cat packman.repo

packman

name=Packman

baseurl=https://mirrors.tuna.tsinghua.edu.cn/packman/suse/openSUSE_Leap_15.6/

enabled=1

type=rpm-md

gpgcheck=1

gpgkey=https://ftp.fau.de/packman/suse/openSUSE_Leap_$releasever/repodata/repomd.xml.key

autorefresh=1

keeppackages=1

priority=70

localhost:/etc/zypp/repos.d # cat repo-oss.repo

repo-oss

name=Main Repository

enabled=1

autorefresh=1

baseurl=https://mirrors.tuna.tsinghua.edu.cn/opensuse/distribution/leap/15.6/repo/oss/

keeppackages=1

localhost:/etc/zypp/repos.d # cat repo-non-oss.repo

repo-non-oss

name=Non-OSS Repository

enabled=1

autorefresh=1

baseurl=https://mirrors.tuna.tsinghua.edu.cn/opensuse/distribution/leap/15.6/repo/non-oss/

keeppackages=1

localhost:/etc/zypp/repos.d # cat repo-openh264.repo

repo-openh264

name=Open H.264 Codec (openSUSE Leap)

enabled=1

autorefresh=1

baseurl=http://codecs.opensuse.org/openh264/openSUSE_Leap/

keeppackages=1

localhost:/etc/zypp/repos.d # cat vlc.repo

vlc

enabled=1

autorefresh=1

baseurl=https://download.videolan.org/pub/vlc/SuSE/15.6/

gpgcheck=1

keeppackages=1

三、连接互联网安装视频解码器,影音软件能播放视频文件,网页浏览器firefox能播放网页视频

localhost:~ # zypper install opi

localhost:~ # opi codecs

跳出大量信息,先安装37个rpm包,再安装48个,再安装3个,再安装1个,再安装2个,37+48+3+1+2=91个

localhost:~ # tree /var/cache/zypp/packages/

├── packman

│ ├── Essentials

│ │ ├── noarch

│ │ │ └── pipewire-lang-1.0.5+git36.60deeb2-150600.3.10.pm.1.noarch.rpm

│ │ └── x86_64

│ │ ├── Mesa-23.3.4-150600.83.8.pm.2.x86_64.rpm

│ │ ├── Mesa-dri-23.3.4-150600.83.8.pm.3.x86_64.rpm

...

...

│ │ ├── pipewire-tools-1.0.5+git36.60deeb2-150600.3.10.pm.1.x86_64.rpm

│ │ ├── vlc-codecs-3.0.21-150600.2.5.pm.6.x86_64.rpm

│ │ └── vlc-noX-3.0.21-150600.2.5.pm.6.x86_64.rpm

│ └── Multimedia

│ └── x86_64

│ └── libass9-0.17.4-150600.2.pm.2.x86_64.rpm

├── repo-openh264

│ └── x86_64

│ ├── gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64.rpm

│ ├── libopenh264-8-2.6.0-2.sle150600.1.x86_64.rpm

│ └── mozilla-openh264-2.6.0-2.sle150600.1.x86_64.rpm

├── repo-oss

│ ├── noarch

│ └── x86_64

│ ├── dav1d-1.4.0-150600.1.2.x86_64.rpm

│ ├── gstreamer-plugins-good-extra-1.24.0-150600.1.1.x86_64.rpm

...

│ ├── libvidstab1_1-1.1.0-bp156.3.4.x86_64.rpm

│ ├── libzmq5-4.2.3-3.15.4.x86_64.rpm

│ └── zeromq-tools-4.2.3-3.15.4.x86_64.rpm

└── vlc

└── x86_64

└── vlc-codec-gstreamer-3.0.21-150601.409.1.x86_64.rpm

16 directories, 91 files

最后报告/var/cache/zypp/packages有16个文件夹和91个文件,是对得上opi codecs安装文件的数量的,复制整个文件夹packages到移动硬盘就算是备份91个视频解码器的rpm包了

四、从/var/log/zypp/history制作rpm包列表

进入保存最多rpm包的文件夹直接安装马上得到报错Failed dependencies缺少信赖相关包

localhost:~/var/cache/zypp/packages/packman/Essentials/x86_64 # rpm -ivh *.rpm

warning: Mesa-23.3.4-150600.83.8.pm.2.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 1abd1afb: NOKEY

error: Failed dependencies:

libvidstab.so.1.1()(64bit) is needed by libavfilter11-8.0-150600.2.pm.1.x86_64

libzmq.so.5()(64bit) is needed by libavfilter11-8.0-150600.2.pm.1.x86_64

需要root用户使用gedit文本编辑器打开/var/log/zypp/history文件,组合键Ctrl+f输入opi回车,找到输入opi codecs命令之后zypper安装记录,使用鼠标选中那37条记录------组合键Ctrl+c复制------gedit文本编辑器软件界面------单击左上角的加号图标,新建空白文档------组合键Ctrl+v粘贴------组合键Ctrl+s保存------名称为opi_codecs-history37.txt

localhost:~ # gedit /var/log/zypp/history

2025-10-25 23:58:51|command|root@localhost.localdomain|'zypper' 'dup' '--from' 'packman' '--allow-downgrade' '--allow-vendor-change'|------------安装37个rpm包

2025-10-26 00:00:45|command|root@localhost.localdomain|'zypper' 'in' '--from' 'packman' 'ffmpeg' 'libavcodec-full' 'vlc-codecs' 'gstreamer-plugins-bad-codecs' 'gstreamer-plugins-ugly-codecs' 'gstreamer-plugins-libav' 'libfdk-aac2' 'pipewire-aptx' 'ffmpeg>=5'|------------安装48个rpm包

2025-10-26 00:01:34|command|root@localhost.localdomain|'zypper' 'in' 'gstreamer-plugins-good' 'gstreamer-plugins-good-extra' 'gstreamer-plugins-bad' 'gstreamer-plugins-ugly' 'dav1d'|------------安装3个rpm包

2025-10-26 00:01:52|command|root@localhost.localdomain|'zypper' 'dup' '--from' 'repo-openh264' '--allow-downgrade' '--allow-vendor-change'|------------安装1个rpm包

2025-10-26 00:02:04|command|root@localhost.localdomain|'zypper' 'in' 'mozilla-openh264' 'libgstopenh264.so()(64bit)'|------------安装2个rpm包

localhost:~ # awk -F '|' '{ print 3,4,$5}' opi_codecs-history37.txt

...

pipewire 1.0.5+git36.60deeb2-150600.3.10.pm.1 x86_64

pipewire-lang 1.0.5+git36.60deeb2-150600.3.10.pm.1 noarch

使用awk命令以符号|为分隔符,提取第3、4、5部分内容,再制作成rpm列表,保存到opi_codecs-rpm37.txt

localhost:~ # tail -n 2 opi_codecs-history37.txt

2025-10-25 23:59:11|install|pipewire|1.0.5+git36.60deeb2-150600.3.10.pm.1|x86_64||packman|f03b0ba83e5c60c2aa4445be3c31c89cc80ebe6ecb66afb029fe36ca8be83800|

2025-10-25 23:59:11|install|pipewire-lang|1.0.5+git36.60deeb2-150600.3.10.pm.1|noarch||packman|73786b7aec8a8ad816e60d1a0cce64d4b78af3466e7c492765a40dd1b03016dd|

localhost:~ # awk -F '|' '{ print 3"-"4"."$5".rpm"}' opi_codecs-history37.txt

...

pipewire-1.0.5+git36.60deeb2-150600.3.10.pm.1.x86_64.rpm

pipewire-lang-1.0.5+git36.60deeb2-150600.3.10.pm.1.noarch.rpm

localhost:~ # tree /var/cache/zypp/packages/|grep pipewire-lang

│ │ │ └── pipewire-lang-1.0.5+git36.60deeb2-150600.3.10.pm.1.noarch.rpm

localhost:~ # awk -F '|' '{ print 3"-"4"."$5".rpm"}' opi_codecs-history37.txt > opi_codecs-rpm37.txt

五、在rpm列表前头加上rpm -ivh制作成安装脚本install_rpm37.bash

在/root创建文件夹opi_codecs91并将91个rpm包都复制到这里

localhost:~ # mkdir opi_codecs91

localhost:~ # find /var/cache/zypp/packages/

localhost:~ # cp /var/cache/zypp/packages/repo-oss/x86_64/* /root/opi_codecs91/

localhost:~ # cp /var/cache/zypp/packages/repo-oss/noarch* /root/opi_codecs91/

localhost:~ # cp /var/cache/zypp/packages/packman/Essentials/x86_64/* /root/opi_codecs91/

localhost:~ # cp /var/cache/zypp/packages/packman/Essentials/noarch/* /root/opi_codecs91/

localhost:~ # cp /var/cache/zypp/packages/packman/Multimedia/x86_64/* /root/opi_codecs91/

localhost:~ # cp /var/cache/zypp/packages/vlc/x86_64/* /root/opi_codecs91/

localhost:~ # cp /var/cache/zypp/packages/repo-openh264/x86_64/* /root/opi_codecs91/

localhost:~ # ls /root/opi_codecs91 |wc -l

91

localhost:~ # awk '{print "rpm -ivh "$1}' opi_codecs-rpm37.txt

...

rpm -ivh pipewire-1.0.5+git36.60deeb2-150600.3.10.pm.1.x86_64.rpm

rpm -ivh pipewire-lang-1.0.5+git36.60deeb2-150600.3.10.pm.1.noarch.rpm

localhost:~ # awk '{print "rpm -ivh "$1}' opi_codecs-rpm37.txt > install_rpm37.bash

localhost:~ # cp install_rpm37.bash opi_codecs91/

localhost:~ # cd opi_codecs91/

localhost:~/opi_codecs91 #

localhost:~/opi_codecs91 # bash install_rpm37.bash

warning: libquicktime0-1.2.4+git20180804.fff99cd-150600.2.pm.10.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 1abd1afb: NOKEY

Preparing... ################################# [100%]

file /usr/lib64/libquicktime.so.0.0.0 from install of libquicktime0-1.2.4+git20180804.fff99cd-150600.2.pm.10.x86_64 conflicts with file from package libquicktime0-1.2.4+git20180804.fff99cd-1.19.x86_64

warning: libavutil56_70-4.4.6-150600.19.pm.1.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 1abd1afb: NOKEY

Preparing... ################################# [100%]

file /usr/lib64/libavutil.so.56.70.100 from install of libavutil56_70-4.4.6-150600.19.pm.1.x86_64 conflicts with file from package libavutil56_70-4.4-150600.11.1.x86_64

...

报错file xxx from install of NEW_RPM conflicts with file from package OLD_RPM,只能加上参数--force替换和强制安装了

localhost:~/opi_codecs91 # rm install_rpm37.bash

localhost:~/opi_codecs91 # awk '{print "rpm -ivh --force"$1}' /root/opi_codecs-rpm37.txt > /root/opi_codecs91/install_rpm37.bash

localhost:~/opi_codecs91 # bash install_rpm37.bash

warning: libquicktime0-1.2.4+git20180804.fff99cd-150600.2.pm.10.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 1abd1afb: NOKEY

Preparing... ################################# [100%]

Updating / installing...

1:libquicktime0-1.2.4+git20180804.f################################# [100%]

warning: libavutil56_70-4.4.6-150600.19.pm.1.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 1abd1afb: NOKEY

Preparing... ################################# [100%]

Updating / installing...

1:libavutil56_70-4.4.6-150600.19.pm################################# [100%]

...

六、制作48个rpm包列表再制作成安装脚本install_rpm48.bash

localhost:~ # awk -F '|' '{ print 3"-"4"."$5".rpm"}' opi_codecs-history48.txt > opi_codecs-rpm48.txt

localhost:~ # awk '{print "rpm -ivh "$1}' opi_codecs-rpm48.txt > opi_codecs91/install_rpm48.bash

localhost:~ # cd opi_codecs91/

localhost:~/opi_codecs91 # ls

...

install_rpm37.bash

install_rpm48.bash

...

localhost:~/opi_codecs91 # bash install_rpm48.bash

warning: libavutil60-8.0-150600.2.pm.1.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 1abd1afb: NOKEY

Preparing... ################################# [100%]

Updating / installing...

1:libavutil60-8.0-150600.2.pm.1 ################################# [100%]

warning: libavutil55-3.4.14-150600.2.pm.1.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 1abd1afb: NOKEY

Preparing... ################################# [100%]

...

没有报错发生,能够正常全部安装48个包

七、制作6个rpm包列表再制作成安装脚本install_rpm6.bash

localhost:~ # awk -F '|' '{ print 3"-"4"."$5".rpm"}' opi_codecs-history6.txt > opi_codecs-rpm6.txt

localhost:~ # awk '{print "rpm -ivh --force "$1}' /root/opi_codecs-rpm6.txt > /root/opi_codecs91/install_rpm6.bash

报错file xxx from install of NEW_RPM conflicts with file from package OLD_RPM,只能加上参数--force替换和强制安装了

localhost:~ # cd opi_codecs91/

localhost:~/opi_codecs91 # bash -vx install_rpm6.bash

...

rpm -ivh --force mozilla-openh264-2.6.0-2.sle150600.1.x86_64.rpm

  • rpm -ivh --force mozilla-openh264-2.6.0-2.sle150600.1.x86_64.rpm
    Preparing... ################################# [100%]
    Updating / installing...
    1:mozilla-openh264-2.6.0-2.sle15060################################# [100%]
    rpm -ivh --force gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64.rpm
  • rpm -ivh --force gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64.rpm
    Preparing... ################################# [100%]
    Updating / installing...
    1:gstreamer-plugin-openh264-1.24.12################################# [100%]

八、制作卸载脚本

一般很少卸载视频解码器的,就是逆向过程,先卸载6个rpm包,再卸载48个,再卸载37个

localhost:~ # awk -F '|' '{ print 3"-"4"."$5".rpm"}' opi_codecs-history6.txt

dav1d-1.4.0-150600.1.2.x86_64.rpm

libcaca0-0.99.beta20-150600.1.6.x86_64.rpm

gstreamer-plugins-good-extra-1.24.0-150600.1.1.x86_64.rpm

libopenh264-8-2.6.0-2.sle150600.1.x86_64.rpm

mozilla-openh264-2.6.0-2.sle150600.1.x86_64.rpm

gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64.rpm

localhost:~ # awk -F '|' '{ print "rpm -e "3"-"4"."$5}' opi_codecs-history6.txt

rpm -e dav1d-1.4.0-150600.1.2.x86_64

rpm -e libcaca0-0.99.beta20-150600.1.6.x86_64

rpm -e gstreamer-plugins-good-extra-1.24.0-150600.1.1.x86_64

rpm -e libopenh264-8-2.6.0-2.sle150600.1.x86_64

rpm -e mozilla-openh264-2.6.0-2.sle150600.1.x86_64

rpm -e gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64

localhost:~ # rpm -aq |grep gstreamer-plugin-openh264

gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64

localhost:~ # awk -F '|' '{ print "rpm -e "3"-"4"."$5}' opi_codecs-history6.txt |tac

rpm -e gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64

rpm -e mozilla-openh264-2.6.0-2.sle150600.1.x86_64

rpm -e libopenh264-8-2.6.0-2.sle150600.1.x86_64

rpm -e gstreamer-plugins-good-extra-1.24.0-150600.1.1.x86_64

rpm -e libcaca0-0.99.beta20-150600.1.6.x86_64

rpm -e dav1d-1.4.0-150600.1.2.x86_64

cat‌(concatenate):从文件的第一行开始正向逐行显示内容,常用于查看、合并或复制文件内容。

‌tac‌:是 cat 的反向拼写,功能相反,从文件最后一行开始反向逐行显示内容,适用于调试日志文件等场景。

localhost:~ # awk -F '|' '{ print "rpm -e "3"-"4"."$5}' opi_codecs-history6.txt |tac > opi_codecs-remove6.bash

localhost:~ # bash -xv opi_codecs-remove6.bash

rpm -e gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64

  • rpm -e gstreamer-plugin-openh264-1.24.12-1.sle150600.2.x86_64
    rpm -e mozilla-openh264-2.6.0-2.sle150600.1.x86_64
  • rpm -e mozilla-openh264-2.6.0-2.sle150600.1.x86_64
    ...

localhost:~ # rpm -aq |grep gstreamer-plugin-openh264

没有显示,表示这个已经被移出系统了

结语:整个过程都是命令行,实际是要自己在草稿纸上手写流程导向的,从目的导向步骤实现,先有工程图纸再有施工制造,最开始从/var/log/zypp/history制作rpm包列表是用cut和sed命令实现的,改用awk命令就直观容易理解,平时也很少使用awk命令的,这次的实际应用能进一步熟悉awk了。

相关推荐
信仰_2739932437 小时前
Mysql中MVCC的流程
数据库·mysql
123461618 小时前
互联网大厂Java面试:从Spring Boot到微服务的探索
java·数据库·spring boot·微服务·面试·mybatis·orm
一 乐8 小时前
农产品销售系统|农产品电商|基于SprinBoot+vue的农产品销售系统(源码+数据库+文档)
java·javascript·数据库·vue.js·spring boot·后端·农产品销售系统
攀小黑8 小时前
docker 容器内nacos(若依plus打包)连接另一台内网服务器显示数据库连接失败
服务器·数据库·docker
七月稻草人8 小时前
Rust 与数据库连接池的集成:安全与性能的深度耦合
数据库·安全·rust
Andy8 小时前
Mysql基础2
android·数据库·mysql
wind_one18 小时前
2.基础--MySQL安装及启动
数据库·mysql
zymill8 小时前
hysAnalyser --- 支持UDP实时流分析和录制功能
udp·音视频·实时音视频·ts流分析·mpegts录制
2301_802939909 小时前
从零开始学习Redis(六):Redis最佳实践(使用经验总结)
redis