Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/install_aur
blob: 6452c4288181d6f2de8c877a1ec8d182dc3c126d (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
#!/bin/bash

# offline_mirror_path - is used to temporarily store build AUR packages
#                       in order to "host" them to the build process.
#                       The path will be on the build machine, not inside the build itself.

work_dir=$1
arch=$2
offline_mirror_path="/tmp/aur_offline"

# A func to download, build and host AUR packages to the ISO build process
build_aur () {
    old_dir=`pwd`
    package=$1
    # Prep with a build-user (removed at the end):
    # TODO: Check if already exists, if so, randomize name/don't remove at the end.
    # TODO: Don't give permission to wheel, give it only to this user (easy, but needs debugging first)
    useradd -m -G wheel builder
    sed -i 's/# %wheel ALL=(ALL) NO/%wheel ALL=(ALL) NO/' /etc/sudoers

    # Extract the AUR package.
    cd /tmp
    rm -rf ${package} ${package}.tar.gz
    wget "https://aur.archlinux.org/cgit/aur.git/snapshot/${package}.tar.gz"
    tar xvzf "${package}.tar.gz"

    cd ${package}
    build_dir=$(pwd)
    chown -R builder.builder /tmp/${package}
    echo " => Buiilding ${package}"
    su - builder -c "(cd ${build_dir}; makepkg -s --noconfirm)" >/dev/null 2>&1


    echo " => Adding ${package} to local AUR hosting directory ${offline_mirror_path}"
    mkdir -p ${offline_mirror_path}
    sh -c "cp *.xz ${offline_mirror_path}/"
    sh -c "repo-add ${offline_mirror_path}/aur_offline.db.tar.gz ${offline_mirror_path}/*.xz"

    ## Long term storage inside the ISO? (if we want to install from CD to disk or host it to others)
    # sh -c "mv *.xz ${old_dir}/$2/$1.pkg.tar.xz"

    cd ${old_dir}
    userdel builder
    rm -rf /home/builder
    rm -rf /tmp/${package}
    rm /tmp/${package}.tar.gz
}

echo "Starting to sync upstream changes to offline mirror."
rm -rf /tmp/sync /tmp/local

echo " => Building AUR packages (found in packages.aur)"
for package in $(cat ${work_dir}/packages.aur); do
	build_aur package
done

if [[ -z $(cat ${work_dir}/pacman.conf | grep '\[aur_offline\]') ]]; then
    echo " => Adding offline mirror to the chroot environment"

    echo "[aur_offline]" >> ${work_dir}/pacman.conf
    echo "Server = file:///tmp/aur_offline" >> ${work_dir}/pacman.conf
    echo "SigLevel = Optional TrustAll" >> ${work_dir}/pacman.conf
fi

## Long term storage, if we want to be able to index our newly build files
## while installing down to disk later, we need to index the AUR packages.
#echo " => Adding packages to offline database"
#sh -c "repo-add --new ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/arch_offline.db.tar.gz ${work_dir}/${arch}/airootfs/srv/http/archlinux/arch_offline/os/${arch}/*.pkg.tar.xz" >/dev/null 2>&1

pacman --config ${work_dir}/pacman.conf -Sy
pacman -Sy
echo "Done syncing offline mirror."