我有一个定制Ubuntu ISO,其中安装了我所需的所有软件包,来自目录/pool/extras/
。现在,我希望能够复制.deb
从此目录中选择一个包( )/pool/extras
并将其保存到另一个地点比如说,我知道某个用户的主目录存在(/home/myuser/
)。我尝试在预播种
d-i preseed/late_command string if [ -f /media/cdrom/pool/extras/mypkg.deb ]; then cp -f /media/cdrom/pool/extras/mypkg.deb /home/myuser; fi
但这似乎不起作用!这种方法正确吗?或者还有其他方法可以从中获取包裹(也许在稍后阶段)/pool/extras
?
答案1
我至少有一个建议给你。我知道这是可行的,因为我在用 Ubuntu 14.4 开发一个项目,这个机制对我来说很有效。
首先是 preesed.cfg preseed-lat 命令
d-i preseed/late_command string \
cd /target; \
wget http://sub.webserver.domain/directory/script; \
chmod +x ./script; \
chroot ./ ./script; \
rm -f ./script
我们在此处称为脚本的文件包含 gats 在
安装时执行的代码:
就像是
wget http://sub.webserver.tdl/dir/run -O /etc/profile.d/run.sh
chmod +x /etc/profile.d/run.sh
如您所见,此方法需要网络服务器。如果您有 ISO,则可以将两个文件存储在 ISO 的根目录中,然后使用以下命令
d-i preseed/run string script
在这种情况下,脚本必须与 preseed.cfg 位于同一目录中
在上面的例子中,脚本文件只是将 run.sh 复制到 profile.d 目录,其中每个 sh 文件都在用户登录时执行。
根据您要执行的操作,您可以使用脚本文件本身通过 sh-shell 命令复制文件,或者在用户登录后使用 profile.d 中的 sh 文件和 bash,并在完成操作后将其删除。
答案2
最后,ISO方式对我来说不起作用,因此我使用的解决方法是通过dpkg
:
在我的.deb
包中,在postinst
脚本(bash
)中,我添加了如下部分:
MYPKG=$(find $PWD -name mypkg.deb)
cp -f $MYPKG /home/myuser
令人惊讶的是,当我记录路径时,它确实是/media/cdrom/pool/extras/mypkg.deb
(如late_command
字符串中所用!):(
不确定为什么它不起作用d-i preseed/late_command