README: import documentation from void, with some twerks.

This commit is contained in:
Juan RP 2014-11-22 17:19:25 +01:00
parent 6ebff8ddb4
commit 59ead6227c
1 changed files with 211 additions and 2 deletions

213
README.md
View File

@ -3,14 +3,36 @@
This repository contains the XBPS source packages collection to build binary packages This repository contains the XBPS source packages collection to build binary packages
for the Void Linux distribution. for the Void Linux distribution.
To start using it first you'll need some external dependencies: The included `xbps-src` script will fetch and compile the sources, and install its
files into a `fake destdir` to generate XBPS binary packages that can be installed
through the `xbps-install(8)` utility.
- bash The `xbps-src` utility uses `xbps-uchroot(8)` to build packages in lightweight linux
`containers` thru the use of `namespaces`, that means that processes and bind mounts
(among others) won't be visible to other processes in the system.
### Requirements
- GNU bash
- xbps >= 0.41 - xbps >= 0.41
Make sure your user is added to the `xbuilder` group to be able to use `xbps-uchroot(8)`, Make sure your user is added to the `xbuilder` group to be able to use `xbps-uchroot(8)`,
otherwise `xbps-src` won't work correctly. otherwise `xbps-src` won't work correctly.
### Quick setup in Void
Add your user to the `xbuilder` group:
# usermod -a -G xbuilder <user>
Clone the `void-packages` git repository, install the bootstrap packages:
```
$ git clone git://github.com/voidlinux/void-packages.git
$ cd void-packages
$ ./xbps-src binary-bootstrap
```
Type: Type:
$ ./xbps-src -h $ ./xbps-src -h
@ -18,6 +40,15 @@ Type:
to see all available targets/options and start building any available package to see all available targets/options and start building any available package
in the `srcpkgs` directory. 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`:
- `bootstrap`: all bootstrap packages will be built from scratch.
- `binary-bootstrap`: the bootstrap binary packages are downloaded via XBPS repositories.
If you don't want to waste your time building everything from scratch probably it's better to use `binary-bootstrap`.
### Configuration ### Configuration
The `etc/defaults.conf` file contains the possible settings that can be overrided The `etc/defaults.conf` file contains the possible settings that can be overrided
@ -38,6 +69,184 @@ used as dependencies in the source packages tree.
If you want to customize those replacements, copy `etc/defaults.virtual` to `etc/virtual` If you want to customize those replacements, copy `etc/defaults.virtual` to `etc/virtual`
and edit it accordingly to your needs. and edit it accordingly to your needs.
### Directory tree
The following directory tree is used with a default configuration file:
/home/foo
|- void-packages
|- common
|- etc
|- srcpkgs
| |- xbps
| |- template
|
|- hostdir
| |- binpkgs ...
| |- ccache-<arch> ...
| |- distcc-<arch> ...
| |- repocache ...
| |- sources ...
|
|- masterdir
| |- builddir -> ...
| |- destdir -> ...
| |- host -> bind mounted from <hostdir>
| |- void-packages -> bind mounted from <void-packages>
The description of these directories is as follows:
- `masterdir`: master directory to be used as rootfs to build/install packages.
- `builddir`: to unpack package source tarballs and where packages are built.
- `destdir`: to install packages, aka **fake destdir**.
- `hostdir/ccache-<arch>`: to store ccache data if the `XBPS_CCACHE` option is enabled.
- `hostdir/distcc-<arch>`: to store distcc data if the `XBPS_DISTCC` option is enabled.
- `hostdir/repocache`: to store downloaded binary packages from remote repositories to resolve package dependencies.
- `hostdir/sources`: to store package source tarballs.
- `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`:
```
$ cd void-packages
$ ./xbps-src pkg <pkgname>
```
When the package and its required dependencies are built, the binary packages will be in
default local repository at `hostdir/binpkgs`; the path to this local repository can be added to
the xbps configuration files or by explicitly appending it via cmdline, i.e `xbps-install --repository=/path/to/hostdir/binpkgs`.
By default **xbps-src** will try to resolve package dependencies in this order:
- If dependency exists in the local repository, use it (`hostdir/binpkgs`).
- If dependency exists in a remote repository, use it.
- If dependency exists in a source package, use it.
It is possible to avoid using remote repositories completely by using the `-N` flag.
### Rebuilding and overwriting existing local packages
If for whatever reason a package has been built and it is available in your local repository
and you have to rebuild it without bumping its `version` or `revision` fields, it is possible
to accomplish this task easily with `xbps-src`:
$ ./xbps-src -f pkg xbps
Reinstalling this package in your target `rootdir` can be easily done too:
$ xbps-install --repository=/path/to/local/repo -yff xbps-0.25_1
> 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):
# xbps-install -Sy distcc
Enable and start the `distccd` service:
# ln -s /etc/sv/distccd /var/service
In the host (machine that executes xbps-src) enable the following settings in the `void-packages/etc/conf` file:
XBPS_DISTCC=yes
XBPS_DISTCC_HOSTS="192.168.2.101 192.168.2.102"
### Cross building packages for a target architecture
Currently `xbps-src` can cross build packages for some target architectures with a cross compiler. The supported target list is the following:
* i686 - for Linux i686 GNU.
* i686-musl - for Linux i686 Musl libc.
* armv6hf - for Linux ARMv6 EABI5 (LE Hard Float / GNU)
* armv6hf-musl - for Linux ARMv6 EABI5 (LE Hard Float / Musl libc)
* armv7hf - for Linux ARMv7 EABI5 (LE Hard Float / GNU)
* armv7hf-musl - for Linux ARMv7 EABI5 (LE Hard Float / Musl libc)
* mips - for Linux MIPS o32 (BE Soft Float / GNU)
* mipsel - for Linux MIPS o32 (LE Soft Float / GNU)
* x86_64-musl - for x86_64 Musl/Linux
If a source package has been adapted to be **cross buildable** `xbps-src` will automatically build the binary package(s) with a simple command:
$ ./xbps-src -a <target> pkg <pkgname>
If the build for whatever reason fails, might be a new build issue or simply because it hasn't been adapted to be **cross built**. Join #xbps on irc.freenode.net for more information.
### Using xbps-src in a foreign linux distribution
xbps-src can be used in any recent linux distribution matching the cpu architecture. At least a linux kernel 2.6.32 is required.
To use xbps-src in your linux distribution use the following instructions. Let's start downloading the xbps static binaries:
$ wget http://repo.voidlinux.eu/static/xbps-static-latest.<arch>-musl.tar.xz
$ mkdir ~/XBPS
$ tar xvf xbps-static-latest.<arch>.tar.xz -C ~/XBPS
$ export PATH=~/XBPS/usr/sbin:$PATH
A privileged group is required to be able to chroot with xbps-src, by default it's set to the `xbuilder` group, change this to your desired group:
# chown root:<group> ~/XBPS/usr/sbin/xbps-uchroot.static
# chmod 4750 ~/XBPS/usr/sbin/xbps-uchroot.static
Clone the `void-packages` git repository:
$ git clone git://github.com/voidlinux/void-packages
and `xbps-src` should be fully functional; just start the `bootstrap` process, i.e:
$ ./xbps-src binary-bootstrap
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):
$ ./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 i686/32bit packages on x86_64
A new x86 `masterdir` must be created to build 32bit packages:
$ ./xbps-src -m masterdir-x86 binary-bootstrap i686
Packages that are multilib only (32bit) must be built on a 32bit masterdir.
$ ./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`:
$ ./xbps-src binary-bootstrap
Now cross compile `base-chroot-musl` for your native architecture:
$ ./xbps-src -a x86_64-musl pkg base-chroot-musl
Wait until all packages are built and when ready, prepare a new masterdir with the musl packages:
$ ./xbps-src -m masterdir-x86_64-musl binary-bootstrap x86_64-musl
Your new masterdir is now ready to build natively packages for the musl C library. Try:
$ ./xbps-src -m masterdir-x86_64-musl chroot
$ ldd
To see if the musl C dynamic linker is working as expected.
### Contributing ### Contributing
See [Manual](https://github.com/voidlinux/xbps-packages/blob/master/Manual.md) See [Manual](https://github.com/voidlinux/xbps-packages/blob/master/Manual.md)