blob: 91a0021cff0c6d6951b6d891640512264cecd09a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#!/bin/sh
# shellcheck source=./default.conf
. "./default.conf"
# prepare the i486-chroot for stage 1
# prepare pacman in i486-chroot
if test ! -d $STAGE1_CHROOT; then
# create and initialize a new i486 chroot in $STAGE1_CHROOT
echo "Creating chroot for stage 1 artifacts in $STAGE1_CHROOT"
mkdir $STAGE1_CHROOT
# prepare directories for a new pacman root
mkdir -p $STAGE1_CHROOT/etc/pacman.d $STAGE1_CHROOT/var/lib/pacman \
$STAGE1_CHROOT/var/cache/pacman/pkg \
$STAGE1_CHROOT/var/log $STAGE1_CHROOT/etc/pacman.d/gnupg/ \
$STAGE1_CHROOT/etc/pacman.d/hooks/
# adapt configuration to work from outside the chroot to write artifacts
# into the chroot
cp /etc/pacman.conf $STAGE1_CHROOT/etc/.
sed -i '/\[archlinuxfr\]/,// d' $STAGE1_CHROOT/etc/pacman.conf
sed -i '/\[multilib\]/,// d' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@^Architecture.*@Architecture = i486@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@#RootDir.*@RootDir = /home/cross/i486-root@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@#DBPath.*@DBPath = /home/cross/i486-root/var/lib/pacman/@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@#CacheDir.*@CacheDir = /home/cross/i486-root/var/cache/pacman/pkg/@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@#LogFile.*@LogFile = /home/cross/i486-root/var/log/pacman.log@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@#GPGDir.*@GPGDir = /home/cross/i486-root/etc/pacman.d/gnupg/@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@#HookDir.*@HookDir = /home/cross/i486-root/etc/pacman.d/hooks/@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@^HoldPkg@#HoldPkg@g' $STAGE1_CHROOT/etc/pacman.conf
# disable all standard repos
sed -i 's@\(^Include = /etc/pacman.d/mirrorlist\)@#\1@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@\[core\]@#[core]@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@\[extra\]@#[extra]@g' $STAGE1_CHROOT/etc/pacman.conf
sed -i 's@\[community\]@#[community]@g' $STAGE1_CHROOT/etc/pacman.conf
# add a temporary package repo in the filesystem
cat >>$STAGE1_CHROOT/etc/pacman.conf <<EOF
[temp]
SigLevel = Never
Server = file://$STAGE1_CHROOT/packages/\$arch
EOF
# create a local package directory
mkdir -p $STAGE1_CHROOT/packages $STAGE1_CHROOT/packages/i486
repo-add -n $STAGE1_CHROOT/packages/i486/temp.db.tar.gz $STAGE1_CHROOT/packages/i486/*
# finally, test and initialize ALPM library
sudo pacman --config $STAGE1_CHROOT/etc/pacman.conf -r $STAGE1_CHROOT -Syyu
pacman --config $STAGE1_CHROOT/etc/pacman.conf -r $STAGE1_CHROOT -Q
fi
if test ! -d $STAGE1_BUILD; then
# prepare the build enviroment
mkdir $STAGE1_BUILD
cd $STAGE1_BUILD || exit 1
# prepare makepkg for building into the i486-chroot
cp /usr/bin/makepkg $STAGE1_BUILD/makepkg-i486
# patch run_pacman in makepkg, we cannot pass the pacman root to it as parameter ATM
sed -i "s@\"\$PACMAN_PATH\"@\"\$PACMAN_PATH\" --config $STAGE1_CHROOT/etc/pacman.conf -r $STAGE1_CHROOT@" makepkg-i486
# prepare a configuration for building the packages with makepkg
# fitting to the destination architecture
cp /etc/makepkg.conf makepkg-i486.conf
sed -i "s@^CARCH=.*@CARCH=\"i486\"@" makepkg-i486.conf
sed -i "s@^CHOST=.*@CHOST=\"${TARGET_ARCH}\"@" makepkg-i486.conf
CPUS=$(nproc)
sed -i "s@^#MAKEFLAGS=.*@MAKEFLAGS=\"-j$CPUS\"@" makepkg-i486.conf
sed -i "s@-march=x86-64 -mtune=generic @@" makepkg-i486.conf
sed -i "s@-march=i686 -mtune=generic @@" makepkg-i486.conf
echo "Prepared the stage 1 build environment."
fi
if test ! -d $CROSS_HOME/packages32; then
# get packages repo from Archlinux32 for the diffs
git clone $GIT_URL_ARCHLINUX32_PACKAGES $CROSS_HOME/packages32
echo "Fetched Archlinux32 diffs for packages."
fi
echo "Stage 1 repos ready."
|