我正在 Makefile 中的一些东西看起来像这样:
压缩包:
mkdir -p tmp/tarball/etc/service
mkdir -p tmp/tarball/usr/local
mkdir -p tmp/tarball/opt/myproject
cd 传感器数据;制作
cd 传感器隧道;制作设备名称
cp -r sensorservices tmp/tarball/etc/service
# 在这里制作一个 tarball,例如:
# chroot tmp/tarball;tar -czvf myproject.tar.gz 。
这个想法是,我将能够进入该./tmp/tarball目录,并创建一个 tarball,当在系统上解压缩时,它会将自身解压缩到/etc/service,/usr/local和/opt/myproject.
经典方法似乎是使用,tar -czvf -C tmp/tarball .但这会导致以 .tar 开头的条目的 tar 列表./。
我的灵感来自 Go 语言的包,这表明它应该安装:
tar -C /usr/local -xzf go1.0.3.linux-amd64.tar.gz
Run Code Online (Sandbox Code Playgroud)
这对我的用例来说是理想的,我希望能够做到:
tar -C / -xzf myproject.tar.gx
Run Code Online (Sandbox Code Playgroud)
这反过来会将最初的文件提取~/some-working-directory/tmp/tarball/_____到/_____,这意味着我可以简单地伪造安装结构。
当然,这可能会更好地通过类似fpm.
我偶然发现了fakechroot,这似乎很有希望,但并不令人惊讶,chroot 中不存在 tar,当我开始进入那个兔子洞时,我只是假设我做错了什么,应该寻求帮助。
来自 GNU tar 手册:
当
tar从存档中提取存档成员时,它会从成员名称中删除所有前导斜杠(“/”)。这会导致存档中的绝对成员名称被视为相对文件名。这允许您将此类成员提取到您想要的任何位置,而不是仅限于在存档中指定的确切目录中提取成员。例如,如果存档成员的名称为“/etc/passwd”,tar 将提取它,就好像该名称确实是“etc/passwd”一样。
因此我的 tar 创建看起来像这样:
tar -czvf myproject.tar.gz -C tmp/tarball ./
./
./etc/
./etc/service/
./etc/service/sensorservices/
./usr/
./usr/local/
./opt/
./opt/myproject/
Run Code Online (Sandbox Code Playgroud)
安装时:
sudo tar --directory / -xzf ./myproject.tar.gz
sudo tar -C / -xzf ./myproject.tar.gz
Run Code Online (Sandbox Code Playgroud)
然后一切都会按预期进行,无论好坏。
| 归档时间: |
|
| 查看次数: |
5730 次 |
| 最近记录: |