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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
$NetBSD: patch-sysupgrade.sh,v 1.8 2022/04/15 09:10:56 nia Exp $
* Don't reject https in sysupgrade_fetch()
* Add ARCHIVE_EXTENSION variable (Fix PR pkg/53697)
* Use direct paths to etcupdate and postinstall
(protect against user misconfiguration).
--- sysupgrade.sh.orig 2013-07-28 21:27:57.000000000 +0000
+++ sysupgrade.sh
@@ -39,7 +39,8 @@ shtk_import process
#
# Please remember to update sysbuild(1) if you change this list.
SYSUPGRADE_CONFIG_VARS="AUTOCLEAN CACHEDIR DESTDIR ETCUPDATE KERNEL
- POSTINSTALL_AUTOFIX RELEASEDIR SETS"
+ POSTINSTALL_AUTOFIX RELEASEDIR SETS
+ ARCHIVE_EXTENSION"
# Directory in which to keep downloaded release files.
@@ -66,6 +67,11 @@ sysupgrade_set_defaults() {
shtk_config_set ETCUPDATE "yes"
shtk_config_set KERNEL "AUTO"
shtk_config_set SETS "AUTO"
+ if [ "$(uname -p)" = 'x86_64' ] || [ "$(uname -p)" = 'sparc64' ]; then
+ shtk_config_set ARCHIVE_EXTENSION "tar.xz"
+ else
+ shtk_config_set ARCHIVE_EXTENSION "tgz"
+ fi
}
@@ -163,18 +169,29 @@ require_cached_file() {
# The set to be extracted must have been previously fetched into the cache
# directory by sysupgrade_fetch command.
#
-# \param set_name Name of the set to extract, without the .tgz extension.
+# \param set_name Name of the set to extract, without the archive extension.
extract_set() {
local set_name="${1}"; shift
+ local arch_ext="$(shtk_config_get ARCHIVE_EXTENSION)"
- require_cached_file "${set_name}.tgz"
+ require_cached_file "${set_name}.${arch_ext}"
local destdir="$(shtk_config_get_default DESTDIR "")"
- local set_tgz="$(get_cached_file "${set_name}.tgz")"
+ local set_arch="$(get_cached_file "${set_name}.${arch_ext}")"
shtk_cli_info "Extracting ${set_name} into ${destdir}/"
[ -z "${destdir}" ] || shtk_process_run mkdir -p "${destdir}"
- progress -zf "${set_tgz}" tar -xp -C "${destdir}/" -f -
+ case "${arch_ext}" in
+ tgz)
+ progress -zf "${set_arch}" tar -xp -C "${destdir}/" -f -
+ ;;
+ tar.xz)
+ progress -f "${set_arch}" tar -xJp -C "${destdir}/" -f -
+ ;;
+ *)
+ shtk_cli_error "Unsupported archive extension ${arch_ext}"
+ ;;
+ esac
}
@@ -189,9 +206,10 @@ sysupgrade_fetch() {
local releasedir="$(shtk_config_get RELEASEDIR)"
local cachedir="$(shtk_config_get CACHEDIR)"
+ local arch_ext="$(shtk_config_get ARCHIVE_EXTENSION)"
local fetch_files=
for set_name in $(shtk_config_get SETS); do
- fetch_files="${fetch_files} binary/sets/${set_name}.tgz"
+ fetch_files="${fetch_files} binary/sets/${set_name}.${arch_ext}"
done
if shtk_config_has KERNEL; then
local kernel_name="$(shtk_config_get KERNEL)"
@@ -199,7 +217,7 @@ sysupgrade_fetch() {
fi
case "${releasedir}" in
- ftp://*|http://*)
+ ftp://*|http://*|https://*)
mkdir -p "${cachedir}"
for relative_file in ${fetch_files}; do
@@ -320,6 +338,7 @@ sysupgrade_modules() {
#
# \param ... Names of the sets to extract, to override SETS.
sysupgrade_sets() {
+ local arch_ext="$(shtk_config_get ARCHIVE_EXTENSION)"
local sets=
for set_name in "${@:-$(shtk_config_get SETS)}"; do
case "${set_name}" in
@@ -334,7 +353,7 @@ sysupgrade_sets() {
done
for set_name in ${sets}; do
- require_cached_file "${set_name}.tgz"
+ require_cached_file "${set_name}.${arch_ext}"
done
shtk_cli_info "Upgrading base system"
@@ -346,6 +365,7 @@ sysupgrade_sets() {
# Runs etcupdate to install new configuration files.
sysupgrade_etcupdate() {
+ local arch_ext="$(shtk_config_get ARCHIVE_EXTENSION)"
[ ${#} -eq 0 ] || shtk_cli_usage_error "etcupdate does not take any" \
"arguments"
@@ -366,12 +386,12 @@ sysupgrade_etcupdate() {
local sflags=
for set_name in ${sets}; do
- require_cached_file "${set_name}.tgz"
- sflags="${sflags} -s$(get_cached_file "${set_name}.tgz")"
+ require_cached_file "${set_name}.${arch_ext}"
+ sflags="${sflags} -s$(get_cached_file "${set_name}.${arch_ext}")"
done
shtk_cli_info "Upgrading /etc interactively"
- etcupdate -a -l ${sflags}
+ /usr/sbin/etcupdate -a -l ${sflags}
}
@@ -381,6 +401,7 @@ sysupgrade_etcupdate() {
sysupgrade_postinstall() {
local sets=
local sets="$(shtk_list_filter '*etc' $(shtk_config_get SETS))"
+ local arch_ext="$(shtk_config_get ARCHIVE_EXTENSION)"
if [ -z "${sets}" ]; then
shtk_cli_info "Skipping postinstall (no etc sets in SETS)"
return 0
@@ -392,8 +413,8 @@ sysupgrade_postinstall() {
local sflags=
for set_name in ${sets}; do
- require_cached_file "${set_name}.tgz"
- sflags="${sflags} -s$(get_cached_file "${set_name}.tgz")"
+ require_cached_file "${set_name}.${arch_ext}"
+ sflags="${sflags} -s$(get_cached_file "${set_name}.${arch_ext}")"
done
shtk_cli_info "Performing postinstall checks"
@@ -402,17 +423,20 @@ sysupgrade_postinstall() {
postinstall "-d${destdir}/" ${sflags} fix \
$(shtk_config_get POSTINSTALL_AUTOFIX)
fi
- postinstall "-d${destdir}/" ${sflags} "${@:-check}" \
+ /usr/sbin/postinstall "-d${destdir}/" ${sflags} "${@:-check}" \
|| shtk_cli_error "Some postinstall(8) checks have failed"
}
# Cleans up the cache directory.
sysupgrade_clean() {
+ local arch_ext="$(shtk_config_get ARCHIVE_EXTENSION)"
+
[ ${#} -eq 0 ] || shtk_cli_usage_error "clean does not take any arguments"
shtk_cli_info "Cleaning downloaded files"
rm -f "$(shtk_config_get CACHEDIR)"/*.*gz*
+ rm -f "$(shtk_config_get CACHEDIR)"/*.${arch_ext}*
}
|