我们(我的工作场所)有一个基于 NVIDIA TK1 的嵌入式产品,该产品正在运行针对 ARM 的自定义构建的 Ubuntu。作为我们产品设置例程的一部分,我们有一个自定义脚本,它可以从网络上下载大量的包和文件,提取并安装它们。
理想情况下,我们要做的是将这些包和存档预下载到“本地”存储库中,以便我们的产品使用可与我们的应用程序一起使用的已知版本。包的自动更新被禁用,最终产品无论如何都很少访问互联网,我们只是想确保所使用的包版本对于每个发货的产品保持相同。
例如,以下是更新脚本的部分内容:
sudo apt-get install -y linux-firmware
sudo apt-get install -y '.*libxcb.*' libxrender-dev libxi-dev libfontconfig1-dev libudev-dev libx11-dev libx11-xcb-dev libext-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get install -y gcc-4.9 g++-4.9
sudo apt-get install -y ros-indigo-desktop
# This one is shortened as its a long URL
wget cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
sudo dpk -i cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
显然,大量的包会有很多依赖项,所以如果有一种方法可以将所有必需的包和所有必需的依赖项下载到本地包存储库并更改我的脚本以便从那里安装它们,那将理想。
我不确定哪种方式是解决此问题的最佳方式。
我曾建议将所有软件包安装到基础产品上,然后“克隆”文件系统并将其推送到其他模块上,但我真的不知道这样做的利弊。
更新
好的,所以我在 /var/cache/apt/archives/
文件夹中发现了大量的包,它们似乎都与我们的脚本安装的内容有关。
使用 sudo dpkg -i *.deb
安装所有这些包是否可行/安全?
最佳答案
一个好办法是使用某种debootstrap
来构建自定义镜像,然后将其闪存到设备上。
要缓存 apt-get
,可以使用 apt-cacher
。我没试过,但是它的缓存是可以卡住的。
对于本地存储库 - reprepro
。
关于linux - Ubuntu Linux - 从本地存储库安装软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954915/