summaryrefslogtreecommitdiff
path: root/scripts/sarge
blob: b929544da43f8ef0a5954f872022766aba58d4bf (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
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
mirror_style release
download_style apt

LIBC=libc6
if [ "$ARCH" = "alpha" ] || [ "$ARCH" = "ia64" ]; then
  LIBC="libc6.1"
fi

work_out_debs () {

    required="base-files base-passwd bash bsdutils coreutils libacl1 libattr1 debconf debconf-i18n liblocale-gettext-perl libtext-wrapi18n-perl libtext-charwidth-perl debianutils diff dpkg dselect libblkid1 e2fsprogs e2fslibs libcomerr2 libss2 libuuid1 findutils grep gzip hostname libcap1 libc6 libdb1-compat libdb3 libncurses5 libnewt0.51 libpam-modules libpam-runtime libpam0g libperl5.8 libpopt0 login makedev mawk modutils mount ncurses-base ncurses-bin passwd perl-base procps sed slang1a-utf8 initscripts sysvinit sysv-rc tar util-linux whiptail libgcc1 gcc-3.3-base libstdc++5"

    base="adduser apt apt-utils libdb4.2 at base-config aptitude libsigc++-1.2-5c102 bsdmainutils console-common console-tools libconsole console-data cpio cron dhcp-client ed exim4 exim4-base exim4-config exim4-daemon-light libgcrypt11 libgnutls11 libgpg-error0 libopencdk8 libtasn1-2 fdutils gettext-base groff-base ifupdown info klogd libssl0.9.7 liblzo1 zlib1g liblockfile1 libpcre3 libwrap0 logrotate mailx man-db libgdbm3 manpages nano net-tools netbase netkit-inetd iputils-ping nvi ppp pppconfig pppoe pppoeconf libpcap0.7 sysklogd tasksel libtextwrap1 tcpd telnet libtext-iconv-perl wget"

    without_package () {
        echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
    }
    subst_package () {
        echo "$3" | tr ' ' '\n' | sed "s/^$1$/$2/" | tr '\n' ' '
    }

    IPFWTOOL=iptables

    case $ARCH in
        "alpha")
            required="$(subst_package "libc6" "libc6.1" "$required")"
            base="$base pciutils"
	    IPFWTOOL="ipchains"
            ;;
        "arm")
            base="$base libgpmg1"
	    IPFWTOOL="ipchains iptables"
            ;;
        "i386")
	    required="$(without_package "libperl5.8" "$required")"
            base="$base pciutils psmisc"
	    IPFWTOOL="ipchains iptables"
            ;;
        "ia64")
            required="$(subst_package "libc6" "libc6.1" "$required") libreadline4"
            base="$base elilo efibootmgr dosfstools libparted1.6-12 parted"
            ;;
        "m68k")
            required="$required libreadline4"
            base="$base atari-bootstrap atari-fdisk amiga-fdisk eject mac-fdisk pmac-fdisk-cross vmelilo"
	    IPFWTOOL="ipchains"
            ;;
        "powerpc")
            required="$required libreadline4"
            base="$base mac-fdisk amiga-fdisk psmisc powerpc-utils pciutils hfsutils"
	    IPFWTOOL="ipchains iptables"
            ;;
        "sparc")
            base="$base silo eject pciutils sparc-utils"
	    IPFWTOOL="ipchains iptables"
            ;;
        "mips")
            base="$base dvhtool pciutils"
            ;;
        "mipsel")
            base="$base pciutils"
            ;;
        "hppa")
            base="$base palo pciutils"
            required="$(without_package "libstdc++2.10-glibc2.2" "$required")"
            ;;
        s390|s390x)
            # base-config depends on console-tools and console-data
            # so we can't exclude them although they are useless on s390
            base="$base s390-tools telnetd devfsd"
            base="$(without_package "console-tools-libs" "$base")"
            base="$(without_package "fdutils" "$base")"
            base="$(without_package "ppp" "$base")"
            base="$(without_package "pppconfig" "$base")"
            base="$(without_package "pppoe" "$base")"
            base="$(without_package "pppoeconf" "$base")"
            ;;
	sh*)
	    base="$base libstdc++3 gcc-3.0-base"
	    base="$(without_package "fdutils" "$base")"
	    required="$required libgcc1"
	    required="$(without_package "libstdc++2.10-glibc2.2" "$required")"
	    ;;
        "amd64")
            base="$base pciutils psmisc"
	    IPFWTOOL="iptables"
            ;;
        *)
            # who knows?
            ;;
    esac

    base="$base $IPFWTOOL"
}

first_stage_install () {
    extract $required

    mkdir -p "$TARGET/var/lib/dpkg"
    : >"$TARGET/var/lib/dpkg/status"
    echo >"$TARGET/var/lib/dpkg/available"

    setup_etc
    if [ ! -e "$TARGET/etc/fstab" ]; then
        echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
        chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
    fi

    setup_devices

    x_feign_install () {
        local pkg="$1"
        local deb="$(debfor $pkg)"
        local ver="$(extract_deb_field "$TARGET/$deb" Version)"

        mkdir -p "$TARGET/var/lib/dpkg/info"

        echo \
"Package: $pkg
Version: $ver
Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"

        touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
    }

    x_feign_install dpkg
}

second_stage_install () {
    x_core_install () {
	smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
    }

    p () {
	baseprog="$(($baseprog + ${1:-1}))"
    }

    setup_proc
    in_target /sbin/ldconfig

    DEBIAN_FRONTEND=noninteractive
    DEBCONF_NONINTERACTIVE_SEEN=true
    export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN

    baseprog=0
    bases=40

    p; progress $baseprog $bases INSTBASE "Installing base system" #1
    info INSTCORE "Installing core packages..."

    p; progress $baseprog $bases INSTBASE "Installing base system" #2
    ln -sf mawk "$TARGET/usr/bin/awk"
    x_core_install base-files base-passwd
    p; progress $baseprog $bases INSTBASE "Installing base system" #3
    x_core_install dpkg

    if [ ! -e "$TARGET/etc/localtime" ]; then
        ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
    fi

    p; progress $baseprog $bases INSTBASE "Installing base system" #4
    x_core_install $LIBC

    p; progress $baseprog $bases INSTBASE "Installing base system" #5
    x_core_install perl-base
    p; progress $baseprog $bases INSTBASE "Installing base system" #6
    rm "$TARGET/usr/bin/awk"
    x_core_install mawk
    p; progress $baseprog $bases INSTBASE "Installing base system" #7
    x_core_install debconf

    info UNPACKREQ "Unpacking required packages..."

    p; progress $baseprog $bases INSTBASE "Installing base system" #8
    smallyes '' | repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages.  This will be attempted up to five times." "" dpkg --force-depends --unpack $(debfor $required)
    p 10; progress $baseprog $bases INSTBASE "Installing base system" #18

    info CONFREQ "Configuring required packages..."

    mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
    echo \
"#!/bin/sh
echo
echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
    chmod 755 "$TARGET/sbin/start-stop-daemon"

    setup_dselect_method apt

    p; progress $baseprog $bases INSTBASE "Installing base system" #19
    smallyes '' | in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" dpkg --configure --pending --force-configure-any --force-depends
    p 10; progress $baseprog $bases INSTBASE "Installing base system" #29

#    if [ ! -e "$TARGET/etc/exim/exim.conf" ]; then
#        mkdir -p "$TARGET/etc/exim"
#        touch "$TARGET/etc/exim/exim.conf"
#    fi

    info INSTBASE "Installing base packages..."

    p; progress $baseprog $bases INSTBASE "Installing base system" #30
    smallyes '' | repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages.  This will be re-attempted up to five times." "" dpkg --force-auto-select --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base)

    rm -f "$TARGET/usr/sbin/sendmail"
    ln -sf /bin/true "$TARGET/usr/sbin/sendmail"

    smallyes '' | repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages.  This will be attempted 5 times." "" dpkg  --force-confold --skip-same-version  --configure -a

    rm -f "$TARGET/usr/sbin/sendmail"
    ln -sf exim4 "$TARGET/usr/sbin/sendmail"

    p 9; progress $baseprog $bases INSTBASE "Installing base system" #39

    mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"

    progress $bases $bases INSTBASE "Installing base system" #40
    info BASESUCCESS "Base system installed successfully."
}