我们(我的工作场所)有一个基于NVIDIA TK1的嵌入式产品,它运行自定义版本的Ubuntu for ARM。作为我们产品的安装例程的一部分,我们有一个自定义脚本,可以从Web下载大量软件包和存档,并提取和安装它们。
理想情况下,我们要做的是将这些软件包和存档预先下载到“本地”存储库中,以便我们的产品使用与我们的应用程序一起使用的已知版本。自动更新软件包已被禁用,最终产品无论如何都很少能够访问互联网,我们只是想确保每个产品所用的软件包版本保持不变。
作为示例,以下是更新脚本的一部分:
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
安装所有这些软件包是否可行/安全?
答案 0 :(得分:0)
一件好事就是使用某种debootstrap
来构建自定义图像,然后在设备上进行闪存。
要缓存apt-get
apt-cacher
。我没有尝试过,但它的缓存可以冻结。
对于本地存储库 - reprepro
。