blob: d8823ac0a6e98b74978ea14df84e0b84341cd66d (
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
|
#!/bin/sh
extract () {
tar -h --no-overwrite-dir -vvxf $1 -C ${SYSROOT} 2>/dev/null | grep ^- | tr -s " " | cut -d" " -f6 | cut -c2-
}
install_package () {
local pkg_file="$1"
local name="$2"
local info_file="$pkg_file.info"
local installed_dir="${INSTALLED_DIR}/$name"
local info="$installed_dir/info"
local files="$installed_dir/files"
local checksum="$installed_dir/checksum"
set -- $(md5sum $pkg_file)
local package_checksum=$1
if [ ! -f $checksum ] || [ "$(cat $checksum)" != "$package_checksum" ]; then
mkdir -p "$installed_dir"
[ -f $files ] && mv $files $files.old
${VERBOSE} && printf "${BLACK}Extracting $name...\n"
extract $pkg_file > $files
[ -f $info_file ] && cp $info_file $info
echo $package_checksum > $checksum
if [ -f "$files.old" ]; then
for file in $(diff $files $files.old | grep ^\> | cut -d' ' -f2); do
rm -f ${SYSROOT}$file
done
rm $files.old
fi
return 0
else
${VERBOSE} && printf "${BLACK}Skipping $name; already installed...\n"
return 1
fi
}
get_package_filecount() {
local info=$(get_package_download_info $1)
set -- $info
echo $4
}
total_filecount() {
local packages=$@
local count=0
for package in $packages; do
local name=$(basename $package .xipkg | cut -d. -f2)
local c=$(get_package_filecount $name)
count=$((count+c))
done
echo $count
}
run_postinstall () {
postinstall="${SYSROOT}/var/lib/xipkg/postinstall"
if [ -d $postinstall ]; then
for file in $(ls $postinstall); do
f=$(basename $file)
# run the postinstall file
#
chmod 755 $file
if [ "${SYSROOT}" = "/" ]; then
sh "/var/lib/xipkg/postinstall/$f"
else
xichroot ${SYSROOT} "/var/lib/xipkg/postinstall/$f"
fi
if [ "$?" = "0" ]; then
rm $file &&
printf "${GREEN}run postinstall for $f!\n"
else
printf "${RED}failed running postinstall for $f!\n"
fi
done
fi
}
install () {
local packages=$@
${VERBOSE} && printf "${BLACK}Requested to install: $@\n${RESET}"
if [ "$#" = "0" ]; then
packages=$(ls ${INSTALLED_DIR})
fi
local missing=""
for package in $packages; do
[ ! -f $package ] && missing="$missing $(basename $package)"
done
if [ "${#missing}" != "0" ]; then
${VERBOSE} && printf "${BLACK}couldnt find: $missing\n${RESET}"
# warning: potential recursion loop here
get $missing
else
local total=$(total_filecount $packages 2>/dev/null || echo 1)
local files_files=""
for package in $packages; do
local name=$(basename $package .xipkg | cut -d. -f2)
${VERBOSE} && printf "${BLACK}installing $name from $package \n${RESET}"
install_package $package $name &
mkdir -p "${INSTALLED_DIR}/$name/"
filelist="${INSTALLED_DIR}/$name/files"
touch $filelist
files_files="$files_files $filelist"
done
wait_for_extract $total ${files_files}
run_postinstall
fi
}
reinstall () {
local packages=$@
remove $@
install $@
}
|