From b7931b437a78febb734778b98de3e24522157389 Mon Sep 17 00:00:00 2001 From: Alexis Date: Sun, 22 Mar 2020 15:13:31 +1100 Subject: [PATCH] README: Add table of contents. --- README.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 96d0b1ac36..befffa81e0 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,28 @@ for a general overview of how to contribute and the [Manual](https://github.com/void-linux/void-packages/blob/master/Manual.md) for details of how to create source packages. +### Table of Contents + +- [Requirements](#requirements) +- [chroot methods](#chroot-methods) +- [Quick setup in Void](#quick-setup) +- [Install the bootstrap packages](#install-bootstrap) +- [Configuration](#configuration) +- [Directory hierarchy](#directory-hierarchy) +- [Building packages](#building-packages) +- [Package build options](#build-options) +- [Sharing and signing your local repositories](#sharing-and-signing) +- [Rebuilding and overwriting existing local packages](#rebuilding) +- [Enabling distcc for distributed compilation](#distcc) +- [Distfiles mirrors](#distfiles-mirrors) +- [Cross compiling packages for a target architecture](#cross-compiling) +- [Using xbps-src in a foreign Linux distribution](#foreign) +- [Remaking the masterdir](#remaking-masterdir) +- [Keeping your masterdir uptodate](#updating-masterdir) +- [Building 32bit packages on x86_64](#building-32bit) +- [Building packages natively for the musl C library](#building-for-musl) +- [Building void base-system from scratch](#building-base-system) + ### Requirements - GNU bash @@ -36,6 +58,7 @@ multiple utilities to accomplish this task: > NOTE: `xbps-src` does not allow building as root anymore. Use one of the chroot methods shown above. + ### chroot methods #### xbps-uunshare(1) (default) @@ -89,6 +112,7 @@ To enable it: $ cd void-packages $ echo XBPS_CHROOT_CMD=proot >> etc/conf + ### Quick setup in Void Clone the `void-packages` git repository, install the bootstrap packages: @@ -106,6 +130,7 @@ Type: to see all available targets/options and start building any available package in the `srcpkgs` directory. + ### Install the bootstrap packages The `bootstrap` packages are a set of packages required to build any available source package in a container. There are two methods to install the `bootstrap`: @@ -141,6 +166,7 @@ used as dependencies in the source packages tree. If you want to customize those replacements, copy `etc/defaults.virtual` to `etc/virtual` and edit it accordingly to your needs. + ### Directory hierarchy The following directory hierarchy is used with a default configuration file: @@ -177,6 +203,7 @@ The description of these directories is as follows: - `hostdir/sources`: to store package sources. - `hostdir/binpkgs`: local repository to store generated binary packages. + ### Building packages The simplest form of building package is accomplished by running the `pkg` target in `xbps-src`: @@ -203,6 +230,7 @@ It is possible to avoid using remote repositories completely by using the `-N` f > The default local repository may contain multiple *sub-repositories*: `debug`, `multilib`, etc. + ### Package build options The supported build options for a source package can be shown with `xbps-src show-options`: @@ -242,6 +270,7 @@ i.e `XBPS_PKG_OPTIONS_xorg_server=opt`. The list of supported package build options and its description is defined in the `common/options.description` file or in the `template` file. + ### Sharing and signing your local repositories To share a local repository remotely it's mandatory to sign it and the binary packages @@ -279,6 +308,7 @@ Each time a binary package is created, a package signature must be created with > It is not possible to sign a repository with multiple RSA keys. + ### Rebuilding and overwriting existing local packages If for whatever reason a package has been built and it is available in your local repository @@ -294,6 +324,7 @@ Reinstalling this package in your target `rootdir` can be easily done too: > Please note that the `package expression` must be properly defined to explicitly pick up the package from the desired repository. + ### Enabling distcc for distributed compilation Setup the slaves (machines that will compile the code): @@ -324,6 +355,7 @@ The slave 192.168.2.101 has a CPU with 8 cores and the /9 for the number of jobs The slave 192.168.2.102 is set to run at most 2 compile jobs to keep its load low, even if its CPU has 4 cores. The XBPS_MAKEJOBS setting is increased to 16 to account for the possible parallelism (2 + 9 + 2 + some slack). + ### Distfiles mirror(s) In etc/conf you may optionally define a mirror or a list of mirrors to search for distfiles. @@ -348,6 +380,7 @@ using the `file://` prefix or simply an absolute path on your build host (e.g. / Mirror locations specified this way are bind mounted inside the chroot environment under $XBPS_MASTERDIR and searched for distfiles just the same as remote locations. + ### Cross compiling packages for a target architecture Currently `xbps-src` can cross build packages for some target architectures with a cross compiler. @@ -359,6 +392,7 @@ If a source package has been adapted to be **cross buildable** `xbps-src` will a If the build for whatever reason fails, might be a new build issue or simply because it hasn't been adapted to be **cross compiled**. + ### Using xbps-src in a foreign Linux distribution xbps-src can be used in any recent Linux distribution matching the CPU architecture. @@ -386,7 +420,7 @@ and `xbps-src` should be fully functional; just start the `bootstrap` process, i The default masterdir is created in the current working directory, i.e `void-packages/masterdir`. - + ### Remaking the masterdir If for some reason you must update xbps-src and the `bootstrap-update` target is not enough, it's possible to recreate a masterdir with two simple commands (please note that `zap` keeps your `ccache/distcc/host` directories intact): @@ -394,12 +428,14 @@ If for some reason you must update xbps-src and the `bootstrap-update` target is $ ./xbps-src zap $ ./xbps-src binary-bootstrap + ### Keeping your masterdir uptodate Sometimes the bootstrap packages must be updated to the latest available version in repositories, this is accomplished with the `bootstrap-update` target: $ ./xbps-src bootstrap-update + ### Building 32bit packages on x86_64 Two ways are available to build 32bit packages on x86\_64: @@ -416,6 +452,7 @@ The second mode (native) needs a new x86 `masterdir`: $ ./xbps-src -m masterdir-x86 binary-bootstrap i686 $ ./xbps-src -m masterdir-x86 ... + ### Building packages natively for the musl C library A native build environment is required to be able to cross compile the bootstrap packages for the musl C library; this is accomplished by installing them via `binary-bootstrap`: @@ -437,6 +474,7 @@ Your new masterdir is now ready to build packages natively for the musl C librar To see if the musl C dynamic linker is working as expected. + ### Building void base-system from scratch To rebuild all packages in `base-system` for your native architecture: