summaryrefslogtreecommitdiff
path: root/newroot
blob: acf84c6cbe6f3d500e1517ffe34ef2be9952fb18 (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
#!/bin/bash
# Copyleft 2012 - Nicolás Reynolds <fauno@parabola.nu>
# Bootstraps a Parabola root, useful for base systems, build chroots, etc.
# Note: this is a very basic script that let's you do whatever you want, so
# it's not foolproof ;)

# Attempt to provide some help
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    echo "Installs a Parabola root on the current dir"
    echo "Usage: newroot [custom package1 ...]"
    echo ""
    echo "Environment variables:"
    echo -e "WORKDIR \tThe install dir"
    echo -e "LOGFILE \tAn alternate logfile ($PWD/pacman.log)"
    echo -e "PACCACHE\tThe pacman cache (guessed)"
    exit
fi

# Fail at any error
set -E

if [ ! -w / ]; then echo "Run as root."; exit 1; fi

# Should work unless you have a messy pacman.conf
function find_cache() {
    grep "CacheDir\s*=\s*" /etc/pacman.conf | tail -n1 | cut -d"=" -f2 | tr -d " "
}

# Build on the current dir or WORKDIR env var
WORKDIR="${WORKDIR:-${PWD}}"
LOGFILE="${LOGFILE:-${WORKDIR}/pacman.log}"
PACCACHE="${PACCACHE:-$(find_cache)}"
# Do a last attempt to have a pacman cache
PACCACHE="${PACCACHE:-/var/cache/pacman/pkg}"

export WORKDIR LOGFILE PACCACHE

function pacman() {
    /usr/bin/pacman -r "${WORKDIR}" \
                    --dbpath "${WORKDIR}"/var/lib/pacman \
                    --logfile "${LOGFILE}" \
                    --noconfirm \
                    --needed \
                    --cachedir "${PACCACHE}" \
                    --config /etc/pacman.conf $@
}

# Bootstrap!
mkdir -p "${WORKDIR}"/var/lib/pacman

# We need to do this twice or the install won't find the databases
pacman -Sy
pacman -S base $@