blob: aa61b354e9f0028107bc7d5b04c5082937aa4a36 (
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
|
#!/bin/sh
set -u
# This should be maintained in order of compatibility, i.e. each arch can also
# run programs built for the arches before it.
ARCHES='i686 amd64'
main()
{
local opt=
local host_arch=
local host_plat=
local mirror=
local install_arch=
while getopts 'a:P:m:' opt; do
case ${opt} in
a) host_arch="${OPTARG}";;
P) host_plat="${OPTARG}";;
m) mirror="${OPTARG}";;
?)
print_usage >&2
exit 1
;;
esac
done
shift $(($OPTIND - 1))
if [ ${#} -ne 1 ]; then
print_usage >&2
exit 1
fi
root="${1}"
install_arch="$(detect_arch)"
if [ "x${host_arch}" = 'x' ]; then
host_arch="${install_arch}"
else
validate_arch "${host_arch}"
fi
check_arch_compat "${install_arch}" "${host_arch}"
if [ "x${host_plat}" = 'x' ]; then
host_plat='dev'
fi
"${0%installers/inst-pc.sh}./miniprokit.sh" install \
-a "${host_arch}" -P "${host_plat}" \
${mirror:+-m} ${mirror} "${root}"
"${0%installers/inst-pc.sh}./miniprokit.sh" shell "${root}" \
<"${0%inst-pc.sh}data/pc.sh"
}
print_usage()
{
printf 'Usage: %s [-a <arch>] [-P <plat>] [-m <mirror>] <root>\n' "${0}"
}
error()
{
local status=${1}
local fmt="${2}"
shift 2
printf "Error: ${fmt}\n" "${@}" >&2
exit ${status}
}
detect_arch()
{
local uname_m=
local uname_s=
local arch=
uname_m="$( (uname -m) 2>/dev/null)" || uname_m='?'
uname_s="$( (uname -s) 2>/dev/null)" || uname_s='?'
case "${uname_m}:${uname_s}" in
'i686:Linux') arch='i686-linux-glibc';;
'x86_64:Linux') arch='amd64-linux-glibc';;
'?:?') error 2 'Architecture unknown';;
*) error 2 'Architecture unsupported';;
esac
printf '%s\n' "${arch}"
}
validate_arch()
{
local arch="${1}"
local arches=
arches=" ${ARCHES} "
if [ "x${arches#* ${arch} }" = "x${arches}" ]; then
error 2 'Unknown architecture "%s"' "${arch}"
fi
}
check_arch_compat()
{
local install_arch="${1}"
local host_arch="${2}"
local arches=
if [ "x${install_arch}" = "x${host_arch}" ]; then
return 0
fi
arches="$(printf ' %s ' ${ARCHES})"
if [ "x${arches#* ${host_arch} * ${install_arch} }" = "x${arches}" ]
then
error 2 'Cannot install a system of architecture %s on %s %s' \
"${host_arch}" 'a system of architecture' \
"${install_arch}"
fi
}
main "${@}"
|