blob: f8b5951b0c18871823a0b7c29a78f1240b1fc00f (
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
135
136
137
138
139
|
#! /bin/bash
#
# cachepacs - install pkgs to cache dir, but don't isntall
#
# Author: James Meyer (based on inpacs)
# Working directory:
TMPDIR=/tmp/inpacs$$
# File containing (filtered) list of base packages + added packages
basepacks=${TMPDIR}/basepacks
APP="$( basename $0 )"
exitfunc () {
# Remove temporary files
rm -rf ${TMPDIR}
exit $1
}
# Default pacman db path (this is a statement, not a configuration, so
# do not change it!)
DBPATH="/var/lib/pacman"
# Default package cache, on the target
TARGETCACHE="${CACHE}"
# A host or remote package cache:
HOSTCACHE=""
# Absolute /path/to/file containing list of packages for 2nd install phase:
ADDEDPACKS=""
# Source file for base package list:
BASEPACKSFILE=""
# Source file for list of vetoed base packages:
VETOFILE=""
# Source directory for pacman database directories:
DBDIR=""
# pacman executable:
PACMANX="pacman -f"
# pacman configuration file
PACMANK="/etc/pacman.conf"
checkfile ()
{
f=$( readlink -m $1 )
if ! [ -f "${f}" ]; then
echo "ERROR: File doesn't exist: ${f}"
exitfunc
fi
}
checkdir ()
{
f=$( readlink -m $1 )
if ! [ -d "${f}" ]; then
echo "ERROR: Directory doesn't exist: ${f}"
exitfunc
fi
}
while getopts ":k:a:c:b:x:y:P:" Option
do
case ${Option} in
k ) checkfile ${OPTARG}
PACMANK=${f} ;;
a ) checkfile ${OPTARG}
CACHEPACKSFILE=${f} ;;
y ) checkdir ${OPTARG}
DBDIR=${f} ;;
P ) checkfile ${OPTARG}
PACMANX=${f} ;;
#* ) usage ;;
esac
done
shift $((${OPTIND} - 1))
INSTLDIR="$1"
# grep the cachedir out of the installed pacman.conf
PCCACHE=`grep CacheDir $INSTLDIR/etc/pacman.conf|cut -d= -f2|cut -d\/ -f2-`
CACHEDIR=${INSTLDIR}/$PCCACHE
echo "INSTLDIR=${INSTLDIR}"
echo "PACMANK=${PACMANK}"
echo "CACHEDIR=${CACHEDIR}"
echo "DBDIR=${DBDIR}"
echo "PACMANX=${PACMANX}"
echo
# test if the script is started by root user. If not, exit
if [ $UID -ne 0 ]; then
echo "Only root can run ${APP}"; exitfunc 1
fi
echo "//"
echo "// downloading packages to ${CACHEDIR}"
PACMAN="${PACMANX} --config ${PACMANK} --noconfirm"
rm -rf ${TMPDIR}
mkdir -p ${TMPDIR}
# Helper function for installing a list of packages
doInstall() {
mkdir -p ${INSTLDIR}/sys
mkdir -p ${INSTLDIR}/proc
mount --bind /sys ${INSTLDIR}/sys
mount --bind /proc ${INSTLDIR}/proc
${PACMAN} -r ${INSTLDIR} -Sw $1
RET=$?
umount ${INSTLDIR}/proc
umount ${INSTLDIR}/sys
if [ ${RET} -ne 0 ]; then
echo "//"
echo "// Package $1 FAILED."
echo "//"
return 1
fi
}
PACMAN="${PACMAN} --cachedir $CACHEDIR"
########## GET LIST OF CACHE PACKAGES
echo "//"
echo "// ** Getting cache package list ..."
if [ -n "${CACHEPACKSFILE}" ]; then
echo "// from: ${CACHEPACKSFILE}"
CACHEPKGS=$( cat ${CACHEPACKSFILE} | grep -v "#" )
else
echo " no cache package file found"
exit 0
fi
doInstall "${CACHEPKGS}"
if [ $? -ne 0 ]; then exitfunc 1; fi
exitfunc
|