[Dev] Fauno's workflow
Luke T. Shumaker
lukeshu at sbcglobal.net
Fri Nov 30 06:45:22 GMT 2012
Fauno put this file in /doc/ in libretools, but I felt the best way to
discuss it was an email
Fauno wrote:
> ## fauno's way
>
> During packaging, I don't usually restart a build from scratch if I have to
> make changes to the PKGBUILD. I use a lot of commenting out commands already
> ran, `makepkg -R`, etc. When I used `libremakepkg` I ended up using a lot more
> `librechroot` and working from inside the unconfigured chroot, because
> `makechrootpkg` (the underlying technology for `libremakepkg`) tries to be too
> smart.
I'm not sure that's a "safe" way to build packages. I might do that
while getting a package to build, but I always build from scratch at
the end. "ccache" makes this bearable.
Also, libremakepkg no longer uses makechrootpkg, and is *very*
transparent and doesn't try to be too smart.
* Copies the PKGBUILD and sources in (ok, some clever things happen
to copy the sources)
* Runs checks on the PKGBUILD (currently pkgbuild-check-nonfree,
eventually librenamcap)
* Runs "makepkg -o"
* Runs checks on the source directory
* Runs "makepkg -e" with networking dissabled in the chroot
* Copies the resulting packages to SRCDEST.
> When I started writing `treepkg` I found that mounting what I need directly on
> the chroot and working from inside it was much more comfortable and simple than
> having a makepkg wrapper doing funny stuff (for instance, mangling makepkg.conf
> and breaking everything.)
There is still some mangling of pacman.conf that I don't understand
(maybe it is important; I'm affraid to remove code I don't understand)
https://labs.parabola.nu/issues/256
However, all that happens to makepkg.conf is it sets PKGDEST and SRCDEST.
> This is how the chroot is configured:
>
> * Create the same user (with same uid) on the chroot that the one I use regularly.
>
> * Give it password-less sudo on the chroot.
>
> * Bind mount /home to /chroot/home, where I have the abslibre-mips64el clone.
I'm not sure that's a good idea; maybe it works for you, but
* A lot of tools look at configuration in $HOME; a chroot means it is
a fresh directory... unless you bind mount /home.
* A chroot also protects you from a misbehaving build script messing
with your $HOME.
> * Bind mount /var/cache/pacman/pkg to /chroot/var/cache/pacman/pkg
> * Put these on system's fstab so I don't have to do it everytime
archroot (librechroot's backend) bind mounts that for you so you don't have to
have it in fstab or do it manually.
> * Configure makepkg.conf to PKGDEST=CacheDir and SRCDEST to something on my home.
>
> Workflow:
>
> * Enter the chroot with `systemd-nspawn -D/chroot` and `su - fauno`.
>
> * From another shell (I use tmux) edit the abslibre or search for updates with
> `git log --no-merges --numstat`.
>
> * Pick a package and run `treepkg` from its dir on the chroot, or retake
> a build with `treepkg /tmp/package-treepkg-xxxx`. (Refer to doc/treepkg
> here).
>
> What this allows:
>
> * Not having to worry about the state of the chroot. `chcleanup` removes and
> adds packages in a smart way so shared dependencies stay and others move
> along (think of installing and removing qt for a complete kde
> rebuild).
`librechroot -c` now uses chcleanup to clean the chroot.
> * Building many packages in a row without recreating a chroot for every one of
> them.
libremakepkg did not recreate the chroot automatically before, and
can't now.
> * Knowing that any change you made to the chroot stays as you want (no one
> touches your makepkg.conf)
For someone who doesn't work from inside the chroot, only setting
PKGDEST and SRCDEST seems to be a good balance between "don't mess
with my stuff" and "just work".
> * Hability to run regular commands, not through a chroot wrapper. I can `cd` to
> a dir and use `makepkg -whatever` on it and nothing breaks.
>
> * No extra code spent on wrappers.
Again, I'm working to make libremakepkg provide more checks than
simply working in a clean chroot does.
Happy hacking,
~ Luke Shumaker
More information about the Dev
mailing list