Makefile: Automatically use fakemachine if not uid 0
fakemachine launches a virtual machine reusing the host system's /usr, and runs commands as root on that virtual machine. It's used by debos, but can also be used to wrap arbitrary commands, in particular vmdb2; it's enough to run the parts of vmdb2 that need to mount filesystems and run apt. This won't work if fakemachine isn't available (in particular on non-x86), but that seems better than just failing altogether. Signed-off-by: Simon McVittie <smcv@debian.org>
This commit is contained in:
parent
5aadb0116a
commit
821aff4e19
8
Makefile
8
Makefile
|
@ -12,6 +12,12 @@ xzimages: $(addsuffix .img.xz,$(platforms))
|
||||||
images: $(addsuffix .img,$(platforms))
|
images: $(addsuffix .img,$(platforms))
|
||||||
yaml: $(addsuffix .yaml,$(platforms))
|
yaml: $(addsuffix .yaml,$(platforms))
|
||||||
|
|
||||||
|
ifeq ($(shell id -u),0)
|
||||||
|
as_root =
|
||||||
|
else
|
||||||
|
as_root = fakemachine -v $(CURDIR) -- env --chdir $(CURDIR)
|
||||||
|
endif
|
||||||
|
|
||||||
target_platforms:
|
target_platforms:
|
||||||
@echo $(platforms)
|
@echo $(platforms)
|
||||||
|
|
||||||
|
@ -122,7 +128,7 @@ raspi_4_bullseye.yaml: raspi_base_bullseye.yaml
|
||||||
|
|
||||||
%.img: %.yaml
|
%.img: %.yaml
|
||||||
touch $(@:.img=.log)
|
touch $(@:.img=.log)
|
||||||
time nice vmdb2 --verbose --rootfs-tarball=$(subst .img,.tar.gz,$@) --output=$@ $(subst .img,.yaml,$@) --log $(subst .img,.log,$@)
|
time nice $(as_root) vmdb2 --verbose --rootfs-tarball=$(subst .img,.tar.gz,$@) --output=$@ $(subst .img,.yaml,$@) --log $(subst .img,.log,$@)
|
||||||
chmod 0644 $@ $(@,.img=.log)
|
chmod 0644 $@ $(@,.img=.log)
|
||||||
|
|
||||||
_ck_root:
|
_ck_root:
|
||||||
|
|
|
@ -30,10 +30,12 @@ Debian Buster (10) or higher system:
|
||||||
* debootstrap
|
* debootstrap
|
||||||
* time
|
* time
|
||||||
* kpartx
|
* kpartx
|
||||||
|
* fakemachine (optional, only available on amd64)
|
||||||
|
|
||||||
To install these (as root):
|
To install these (as root):
|
||||||
```shell
|
```shell
|
||||||
apt install -y vmdb2 dosfstools qemu-utils qemu-user-static debootstrap binfmt-support time kpartx
|
apt install -y vmdb2 dosfstools qemu-utils qemu-user-static debootstrap binfmt-support time kpartx
|
||||||
|
apt install -y fakemachine
|
||||||
```
|
```
|
||||||
|
|
||||||
Do note that –at least currently– vmdb2 uses some syntax that is available
|
Do note that –at least currently– vmdb2 uses some syntax that is available
|
||||||
|
@ -50,8 +52,10 @@ little as possible in a parametrized way. The master recipe is
|
||||||
[raspi_master.yaml](raspi_master.yaml).
|
[raspi_master.yaml](raspi_master.yaml).
|
||||||
|
|
||||||
A Makefile is supplied to drive the build of the recipes into images.
|
A Makefile is supplied to drive the build of the recipes into images.
|
||||||
Some portions of building the image will require root privileges, thus
|
If `fakemachine` is installed, it can be run as an unprivileged user.
|
||||||
you'll need to execute *make* below as root.
|
Otherwise, because some steps of building the image require root privileges,
|
||||||
|
you'll need to execute `make` as root.
|
||||||
|
|
||||||
The argument to `make` is constructed as follows:
|
The argument to `make` is constructed as follows:
|
||||||
`raspi_<model>_<release>.<result-type>`
|
`raspi_<model>_<release>.<result-type>`
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue