Einrichtung und Konfiguration von sbuild (mit btrfs)

Pakete

root@vs76:~> apt-get install sbuild btrfs-tools debootstrap 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
btrfs-tools is already the newest version.
The following extra packages will be installed:
  dctrl-tools debian-keyring devscripts dh-python diffstat distro-info-data dput equivs hardening-includes iso-codes libarchive-zip-perl libboost-filesystem1.55.0
  libboost-program-options1.55.0 libboost-regex1.55.0 libboost-system1.55.0 libclass-accessor-perl libclass-data-inheritable-perl libclass-inspector-perl libclone-perl
  libcommon-sense-perl libconvert-binhex-perl libcrypt-ssleay-perl libdevel-stacktrace-perl libdigest-hmac-perl libdistro-info-perl libemail-date-format-perl
(...)
Setting up python3-debian (0.1.27) ...
Setting up python3-magic (1:5.22+15-2) ...
Setting up libsbuild-perl (0.65.2-1) ...
Setting up sbuild (0.65.2-1) ...
Setting up dh-python (1.20141111-2) ...
Processing triggers for libc-bin (2.19-17) ...
root@vs76:~> 

Filesystem erzeugen

root@vs76:~> mkfs.btrfs -f /dev/sda3
Btrfs v3.17
See http://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
fs created label (null) on /dev/sda3
	nodesize 16384 leafsize 16384 sectorsize 4096 size 37.03GiB
root@vs76:~>

Ordner anlegen und subvolume erzeugen

root@vs76:~> mkdir -p /srv/chroots/sid-amd64-sbuild
root@vs76:~> mount /dev/sda3 /srv/chroots/sid-amd64-sbuild/
root@vs76:~> btrfs subvolume create /srv/chroots/sid-amd64-sbuild/buildd-base
Create subvolume '/srv/chroots/sid-amd64-sbuild/buildd-base'
root@vs76:~> umount /srv/chroots/sid-amd64-sbuild 
root@vs76:~> mount -o subvol=buildd-base /dev/sda3 /srv/chroots/sid-amd64-sbuild/
root@vs76:~> mkdir /srv/chroots/sid-amd64-sbuild/snapshots
root@vs76:~>

chroot erzeugen

root@vs76:~> debootstrap --no-check-gpg --variant=buildd --include=eatmydata unstable /srv/chroots/sid-amd64-sbuild/ ftp://ftp.de.debian.org/debian
I: Retrieving Release 
I: Retrieving Packages 
I: Validating Packages 
(...)
I: Configuring liblsan0:amd64...
I: Configuring dpkg-dev...
I: Configuring libasan1:amd64...
I: Configuring libgcc-4.9-dev:amd64...
I: Configuring apt...
I: Configuring libcloog-isl4:amd64...
I: Configuring libstdc++-4.9-dev:amd64...
I: Configuring cpp-4.9...
I: Configuring cpp...
I: Configuring gcc-4.9...
I: Configuring gcc...
I: Configuring g++-4.9...
I: Configuring g++...
I: Configuring build-essential...
I: Configuring libc-bin...
I: Base system installed successfully.
root@vs76:~> 

User zu sbuild hinzufuegen

root@vs76:~> adduser glaubitz sbuild
Adding user `glaubitz' to group `sbuild' ...
Adding user glaubitz to group sbuild
Done.
root@vs76:~> 

sbuild-Key erzeugen

root@vs76:~> mkdir ~/.gnupg
root@vs76:~> sbuild-update --keygen
Generating archive key.
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 288 more bytes)(...)
root@vs76:~>

schroot-Konfiguration

root@vs76:~> cat /etc/schroot/chroot.d/sid-amd64-sbuild 
[sid-amd64-sbuild]
type=btrfs-snapshot
description=Debian sid btrfs snapshot
btrfs-source-subvolume=/srv/chroots/sid-amd64-sbuild
btrfs-snapshot-directory=/srv/chroots/sid-amd64-sbuild/snapshots
groups=root,sbuild,glaubitz
root-groups=root,sbuild,glaubitz
source-root-users=glaubitz,sbuild
command-prefix=eatmydata
root@vs76:~> 

fstab anpassen

root@vs76:~> cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file sys>	<mount point>	<type>	<options>	<dump>	<pass>
UUID=43c64b32-d7b5-4cca-ae5f-682d5a74c3e3	/	ext4	rw	0	1	# device at install: /dev/sda1
#UUID=3d418983-22f9-413f-a7a1-1e34200537f9	/local_scratch	ext4	rw	0	2	# device at install: /dev/sda3
UUID=a8e2a2c1-a05b-40ca-9417-825bf2a7939b	/var	ext4	rw	0	2	# device at install: /dev/sda6
UUID=8433560c-8a2b-4a75-827e-bf95db8d60ba	none	swap	sw	0	0	# device at install: /dev/sda5
/dev/floppy	/media/floppy	auto	rw,noauto,user 0 0
/dev/cdrom	/media/cdrom	auto	rw,noauto,user 0 0
/dev/usbstick	/media/usbstick	auto	rw,noauto,user 0 0
none	/tmp	tmpfs	defaults	0	0
home:/srv/home /home nfs vers=3,nosuid,nodev,intr,tcp,comment=systemd.automount 0 0

# chroots
/dev/sda3	/srv/chroots/sid-amd64-sbuild btrfs  defaults,subvol=buildd-base,noatime,nodiratime  0       0

# chroot procs
proc    /srv/chroots/sid-amd64-sbuild/proc      proc    defaults    0 0
sysfs   /srv/chroots/sid-amd64-sbuild/sys  sysfs   defaults      0 0
/dev/pts /srv/chroots/sid-amd64-sbuild/dev/pts  none    bind       0 0
root@vs76:~> 

sources.list im chroot erzeugen

root@vs76:~> cat /srv/chroots/sid-amd64-sbuild/etc/apt/sources.list
deb http://deb.physik.fu-berlin.de:9999/debian unstable main contrib non-free
deb-src http://deb.physik.fu-berlin.de:9999/debian unstable main contrib non-free
root@vs76:~>

Test-Build durchfuehren

glaubitz@vs76:~> dget -u http://http.debian.net/debian/pool/main/x/xbill/xbill_2.1-8.dsc
dget: retrieving http://http.debian.net/debian/pool/main/x/xbill/xbill_2.1-8.dsc
--2015-05-08 13:08:08--  http://http.debian.net/debian/pool/main/x/xbill/xbill_2.1-8.dsc
Resolving http.debian.net (http.debian.net)... 176.9.184.93, 5.153.231.35, 128.31.0.66, ...
Connecting to http.debian.net (http.debian.net)|176.9.184.93|:80... connected.
(...)
dpkg-source: info: unpacking xbill_2.1.orig.tar.gz
dpkg-source: info: unpacking xbill_2.1-8.debian.tar.gz
dpkg-source: info: applying 01_makefile_in.diff
dpkg-source: info: applying 02_hurd_logos.diff
dpkg-source: info: applying 03_fix_ftbfs_binutils_gold.diff
glaubitz@vs76:~> 
glaubitz@vs76:~> sbuild --arch=amd64 --source --arch-all -d sid xbill_2.1-8.dsc 
sbuild (Debian sbuild) 0.65.2 (24 Mar 2015) on vs76.physik.fu-berlin.de
(...)
┌──────────────────────────────────────────────────────────────────────────────┐
│ Summary                                                                      │
└──────────────────────────────────────────────────────────────────────────────┘

Build Architecture: amd64
Build-Space: 1792
Build-Time: 8
Distribution: sid
Host Architecture: amd64
Install-Time: 19
Job: xbill_2.1-8.dsc
Machine Architecture: amd64
Package: xbill
Package-Time: 40
Source-Version: 2.1-8
Space: 1792
Status: successful
Version: 2.1-8
────────────────────────────────────────────────────────────────────────────────
Finished at 20150508-1306
Build needed 00:00:40, 1792k disc space
glaubitz@vs76:~> 

Cross-Kompilation aktivieren

Dank QEMU lassen sich mit sbuild sogar Pakete fuer voellig andere Architekturen bauen.

Dazu muss man zunaechst erstmal QEMU installieren:

root@vs76:~> apt-get install qemu-user-static binfmt-support
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  binfmt-support qemu-user-static
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/6,961 kB of archives.
After this operation, 81.9 MB of additional disk space will be used.
Selecting previously unselected package binfmt-support.
(Reading database ... 81197 files and directories currently installed.)
Preparing to unpack .../binfmt-support_2.1.5-1_amd64.deb ...
Unpacking binfmt-support (2.1.5-1) ...
Selecting previously unselected package qemu-user-static.
Preparing to unpack .../qemu-user-static_2.1+dfsg-12+deb8u4_amd64.deb ...
Unpacking qemu-user-static (1:2.1+dfsg-12+deb8u4) ...
Processing triggers for systemd (215-17+deb8u2) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up binfmt-support (2.1.5-1) ...
insserv: Script zedv-merge-interfaces is broken: incomplete LSB comment.
insserv: missing `Required-Start:' entry: please add even if empty.
insserv: missing `Required-Stop:'  entry: please add even if empty.
insserv: script zedv-ntpdate: service ntp already provided!
insserv: Script zedv-merge-interfaces is broken: incomplete LSB comment.
insserv: missing `Required-Start:' entry: please add even if empty.
insserv: missing `Required-Stop:'  entry: please add even if empty.
Setting up qemu-user-static (1:2.1+dfsg-12+deb8u4) ...
Processing triggers for systemd (215-17+deb8u2) ...
root@vs76:~> 

Danach erzeugt man den chroot fuer die gewuenschte Architektur mit Hilfe der --foreign-Option, z.B. fuer armhf (Architektur des Raspberry Pi 2):

root@vs76:/local_scratch> debootstrap --no-check-gpg --variant=buildd --foreign --arch=armhf unstable sid-armhf-sbuild/ ftp://ftp.debian.org/debian/
root@vs76:/local_scratch> debootstrap --no-check-gpg --variant=buildd --foreign --arch=armhf unstable sid-armhf-sbuild/ ftp://ftp.debian.org/debian/
I: Retrieving Release 
I: Retrieving Packages 
I: Validating Packages 
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional required dependencies: adduser dmsetup insserv libapparmor1 libaudit1 libaudit-common libbz2-1.0 libcap2 libcap2-bin libcryptsetup4 libdb5.3 libdebconfclient0 libdevmapper1.02.1 libgcrypt20 libgpg-error0 libkmod2 libncursesw5 libseccomp2 libsemanage1 libsemanage-common libsystemd0 libudev1 libustr-1.0-1 systemd systemd-sysv 
I: Found additional base dependencies: binutils bzip2 cpp cpp-5 debian-archive-keyring dpkg-dev g++ g++-5 gcc gcc-5 gnupg gpgv libapt-pkg4.16 libasan2 libatomic1 libc6-dev libcc1-0 libc-dev-bin libdpkg-perl libgcc-5-dev libgdbm3 libgmp10 libgomp1 libisl13 libmpc3 libmpfr4 libreadline6 libstdc++-5-dev libstdc++6 libubsan0 libusb-0.1-4 linux-libc-dev make patch perl perl-modules readline-common xz-utils 
I: Checking component main on ftp://ftp.debian.org/debian...
I: Retrieving libacl1 2.2.52-2
I: Validating libacl1 2.2.52-2
I: Retrieving adduser 3.113+nmu3
I: Validating adduser 3.113+nmu3
I: Retrieving libapparmor1 2.10-2+b1
I: Validating libapparmor1 2.10-2+b1
(...)
I: Extracting libmount1...
I: Extracting libsmartcols1...
I: Extracting libuuid1...
I: Extracting mount...
I: Extracting util-linux...
I: Extracting liblzma5...
I: Extracting zlib1g...
root@vs76:/local_scratch>

Dann kopiert man die statisch-gelinkte QEMU-Binary fuer ARM einfach in den chroot und ruft danach ./debootstrap/debootstrap --second-stage auf, nachdem man mit chroot wieder in den chroot gewechselt ist:

root@vs76:/local_scratch> cd sid-armhf-sbuild/
root@vs76:/local_scratch/sid-armhf-sbuild> cp -av /usr/bin/qemu-arm-static usr/bin
‘/usr/bin/qemu-arm-static’ -> ‘usr/bin/qemu-arm-static’
root@vs76:/local_scratch/sid-armhf-sbuild> chroot .
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
I have no name!@vs76:/# ./debootstrap/debootstrap --second-stage
I: Keyring file not available at /usr/share/keyrings/debian-archive-keyring.gpg; switching to https mirror https://mirrors.kernel.org/debian
I: Installing core packages...
I: Unpacking required packages...
I: Unpacking libacl1:armhf...
I: Unpacking adduser...
I: Unpacking libapparmor1:armhf...
I: Unpacking libattr1:armhf...
I: Unpacking libaudit-common...
I: Unpacking libaudit1:armhf...
I: Unpacking base-files...
I: Unpacking base-passwd...
I: Unpacking bash...
I: Unpacking libbz2-1.0:armhf...
I: Unpacking libdebconfclient0:armhf...
I: Unpacking coreutils...
I: Unpacking libcryptsetup4:armhf...
I: Unpacking dash...
I: Unpacking libdb5.3:armhf...
(...)
I: Configuring dpkg-dev...
I: Configuring libgcc-5-dev:armhf...
I: Configuring libapt-pkg4.16:armhf...
I: Configuring apt...
I: Configuring gcc-5...
I: Configuring libstdc++-5-dev:armhf...
I: Configuring gcc...
I: Configuring g++-5...
I: Configuring g++...
I: Configuring build-essential...
I: Configuring libc-bin...
I: Base system installed successfully.
I have no name!@vs76:/# 

Dann einfach wie oben beschrieben eine schroot-Konfiguration fuer sid-armhf-build anlegen und dann beim Bauen mit sbuild einfach noch --arch=armhf mit angeben.

Fertig.

Logged in as: John Paul Adrian Glaubitz (glaubitz)
sbuildsetup.txt · Last modified: 2015/11/25 16:13 by glaubitz
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki