blob: cb819433ef816136eb7a25a6111e54f2d9cd89c4 (
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/bin/sh
# taken and slightly modified from the quickinst script.
# don't know why one should need a static pacman because we already have a working one on the livecd.
assure_pacman_static ()
{
PACMAN_STATIC=
[ -f /tmp/usr/bin/pacman.static ] && PACMAN_STATIC=/tmp/usr/bin/pacman.static
[ -f /usr/bin/pacman.static ] && PACMAN_STATIC=/usr/bin/pacman.static
if [ "$PACMAN_STATIC" = "" ]; then
cd /tmp
if [ "$var_PKG_SOURCE_TYPE" = "ftp" ]; then
echo "Downloading pacman..."
wget $PKGARG/pacman*.pkg.tar.gz
if [ $? -gt 0 ]; then
echo "error: Download failed"
exit 1
fi
tar -xzf pacman*.pkg.tar.gz
elif [ "$var_PKG_SOURCE_TYPE" = "cd" ]; then
echo "Unpacking pacman..."
tar -xzf $PKGARG/pacman*.pkg.tar.gz
fi
fi
[ -f /tmp/usr/bin/pacman.static ] && PACMAN_STATIC=/tmp/usr/bin/pacman.static
if [ "$PACMAN_STATIC" = "" ]; then
echo "error: Cannot find the pacman.static binary!"
exit 1
fi
}
# taken from the quickinst script. cd/ftp code merged together
target_write_pacman_conf ()
{
PKGFILE=/tmp/packages.txt
echo "[core]" >/tmp/pacman.conf
if [ "$var_PKG_SOURCE_TYPE" = "ftp" ]
then
wget $PKG_SOURCE/packages.txt -O /tmp/packages.txt || die_error " Could not fetch package list from server"
echo "Server = $PKGARG" >>/tmp/pacman.conf
fi
if [ "$var_PKG_SOURCE_TYPE" = "cd" ]
then
[ -f $PKG_SOURCE/packages.txt ] || die_error "error: Could not find package list: $PKGFILE"
cp $PKG_SOURCE/packages.txt /tmp/packages.txt
echo "Server = file://$PKGARG" >>/tmp/pacman.conf
fi
mkdir -p $var_TARGET_DIR/var/cache/pacman/pkg /var/cache/pacman &>/dev/null
rm -f /var/cache/pacman/pkg &>/dev/null
[ "$var_PKG_SOURCE_TYPE" = "ftp" ] && ln -sf $var_TARGET_DIR/var/cache/pacman/pkg /var/cache/pacman/pkg &>/dev/null
[ "$var_PKG_SOURCE_TYPE" = "cd" ] && ln -sf $PKGARG /var/cache/pacman/pkg &>/dev/null
}
# target_prepare_pacman() taken from setup. modified a bit
# configures pacman and syncs for the first time on destination system
#
# $@ repositories to enable (optional. default: core)
# returns: 1 on error
target_prepare_pacman() {
[ "$var_PKG_SOURCE_TYPE" = "cd" ] && local serverurl="${var_FILE_URL}"
[ "$var_PKG_SOURCE_TYPE" = "ftp" ] && local serverurl="${var_SYNC_URL}"
[ -z "$1" ] && repos=core
[ -n "$1" ] && repos="$@"
# Setup a pacman.conf in /tmp
cat << EOF > /tmp/pacman.conf
[options]
CacheDir = ${var_TARGET_DIR}/var/cache/pacman/pkg
CacheDir = /src/core/pkg
EOF
for repo in $repos
do
#TODO: this is a VERY, VERY dirty hack. we fall back to ftp for any non-core repo because we only have core on the CD. also user maybe didn't pick a mirror yet
if [ "$repo" != core ]
then
add_pacman_repo target ${repo} 'Include = /etc/pacman.d/mirrorlist'
else
add_pacman_repo target ${repo} "Server = ${serverurl}"
fi
done
# Set up the necessary directories for pacman use
[ ! -d "${var_TARGET_DIR}/var/cache/pacman/pkg" ] && mkdir -m 755 -p "${var_TARGET_DIR}/var/cache/pacman/pkg"
[ ! -d "${var_TARGET_DIR}/var/lib/pacman" ] && mkdir -m 755 -p "${var_TARGET_DIR}/var/lib/pacman"
infofy "Refreshing package database..."
$PACMAN_TARGET -Sy >$LOG 2>&1 || return 1
return 0
}
# $1 target/runtime
list_pacman_repos ()
{
[ "$1" != runtime -a "$1" != target ] && die_error "list_pacman_repos needs target/runtime argument"
[ "$1" = target ] && conf=/tmp/pacman.conf
[ "$1" = runtime ] && conf=/etc/pacman.conf
grep '\[.*\]' $conf | grep -v options | sed 's/\[//g' | sed 's/\]//g'
}
# $1 target/runtime
# $2 repo name
# $3 string
add_pacman_repo ()
{
[ "$1" != runtime -a "$1" != target ] && die_error "add_pacman_repo needs target/runtime argument"
[ -z "$3" ] && die_error "target_add_repo needs \$2 repo-name and \$3 string (eg Server = ...)"
[ "$1" = target ] && conf=/tmp/pacman.conf
[ "$1" = runtime ] && conf=/etc/pacman.conf
cat << EOF >> $conf
[${2}]
${3}
EOF
}
# taken from quickinst. TODO: figure this one out ASKDEV
pacman_what_is_this_for ()
{
PKGLIST=
# fix pacman list!
sed -i -e 's/-i686//g' -e 's/-x86_64//g' $PKGFILE
for i in $(cat $PKGFILE | grep 'base/' | cut -d/ -f2); do
nm=${i%-*-*}
PKGLIST="$PKGLIST $nm"
done
! [ -d $var_TARGET_DIR/var/lib/pacman ] && mkdir -p $var_TARGET_DIR/var/lib/pacman
! [ -d /var/lib/pacman ] && mkdir -p /var/lib/pacman
}
|