使用 bash 自动下载 deb 文件和依赖项,然后将它们提取到一个唯一的文件夹中,并进行压缩,以便在实时文件系统中使用

使用 bash 自动下载 deb 文件和依赖项,然后将它们提取到一个唯一的文件夹中,并进行压缩,以便在实时文件系统中使用

我正在开发一个实时文件系统,需要能够下载带有其依赖项的 deb 文件,我使用以下命令手动执行此操作:

apt download $(apt-cache depends --recurse --no-recommends --no-suggests
--no-conflicts --no-breaks --no-replaces --no-enhances
--no-pre-depends ${PACKAGES} | grep "^\w")

之后,我需要data.tar.gz从所需的 deb 包中提取所有文件,将它们合并到一个唯一的文件夹中(该mv命令在合并文件夹时不是很有用),我手动使用两者/usr/bin/ar xdpkg-deb稍后结合使用从 $DEB 中tar提取所有文件data.tar.gz

有没有一种 bash 方法可以自动化整个过程,而不管下载的 $DEB 文件的数量?

答案1

最后就这样结束了

#!/bin/bash
# Developed by Roberto Gonzalez for Slide Linux
# Root only
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi
FILE="`echo $1 | rev | cut -d. -f2- | rev`.fs"
archiveDir=/var/cache/apt/archives
destinationDir=/run/initramfs/memory/data/modules
apt update
apt install -d "$1" -y  || { echo 'apt2fs failed' ; exit 1; }
mkdir $archiveDir 2>/dev/null
mkdir $archiveDir/deb
mkdir $archiveDir/deb/WE
mv $archiveDir/*.deb $archiveDir/deb/  || { echo 'apt2fs failed' ; exit 1; }
cd $archiveDir/deb
for z in *.deb; do ar x $z data.tar.gz | tar xfv data.tar.gz -C WE/; done 2>/dev/null
for z in *.deb; do ar x $z data.tar.xz | tar xfv data.tar.xz -C WE/; done 2>/dev/null
for z in *.deb; do ar x $z data.tar.zst | tar xfv data.tar.zst -C WE/; done 2>/dev/null
# Some cleanup
    rm -rf WE/usr/share/doc 2>/dev/null
    rm -rf WE/usr/share/doc-base 2>/dev/null
    rm -rf WE/usr/share/fonts 2>/dev/null
    rm -rf WE/usr/share/locale 2>/dev/null
    rm -rf *.*
starthome 2>/dev/null
dir2fs $archiveDir/deb/WE $destinationDir/$FILE  || { echo 'apt2fs failed' ; exit 1; }
rm -rf $archiveDir
echo "Done. Module created"

尽管文件系统存在一些问题,导致某些模块无法使用,但仍然运行顺利。

相关内容