summaryrefslogtreecommitdiff
path: root/scripts/woody
blob: 12c65a379b20bd54bf5298c885e29f3a45bc6adf (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
mirror_style release
download_style apt
force_md5

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

work_out_debs () {

    required="base-files base-passwd bash bsdutils debconf debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname libcap1 libc6 libdb2 libdb3 libncurses5 libnewt0 libpam-modules libpam-runtime libpam0g libperl5.6 libpopt0 libreadline4 libstdc++2.10-glibc2.2 login makedev mawk modutils mount ncurses-base ncurses-bin passwd perl-base procps sed shellutils slang1 sysvinit tar textutils util-linux whiptail"

    base="adduser apt apt-utils at base-config bsdmainutils console-common console-tools console-tools-libs console-data cpio cron dhcp-client ed exim fdutils gettext-base groff-base ifupdown info klogd libident libldap2 liblockfile1 libpcre3 libsasl7 libwrap0 logrotate mailx man-db manpages modconf nano net-tools netbase netkit-inetd netkit-ping nvi ppp pppconfig pppoe pppoeconf libpcap0 sysklogd tasksel tcpd telnet"

    without_package () {
        echo "$2" | tr ' ' '\n' | grep -v "^$1$" | tr '\n' ' '
    }

    IPFWTOOL=iptables

    case $ARCH in
        "alpha")
            required="$(without_package "libc6" "$required") libc6.1"
            base="$base setserial aboot pciutils"
	    IPFWTOOL="ipchains"
            ;;
        "arm")
            base="$base setserial libgpmg1"
	    IPFWTOOL="ipchains iptables"
            ;;
        "i386")
            required="$(without_package "libperl5.6" "$required") mbr"
            base="$base lilo pciutils setserial syslinux psmisc pcmcia-cs"
	    IPFWTOOL="ipchains iptables"
            ;;
        "ia64")
            required="$(without_package "libc6" "$required") libc6.1 gcc-2.96-base"
            base="$base elilo efibootmgr dosfstools libparted1.4 parted"
            ;;
        "m68k")
            base="$base atari-bootstrap atari-fdisk amiga-fdisk eject mac-fdisk pmac-fdisk-cross setserial vmelilo"
	    IPFWTOOL="ipchains"
            ;;
        "powerpc")
            base="$base quik mac-fdisk amiga-fdisk psmisc powerpc-utils setserial pciutils hfsutils yaboot pcmcia-cs"
	    IPFWTOOL="ipchains iptables"
            ;;
        "sparc")
            base="$base silo eject pciutils sparc-utils"
	    IPFWTOOL="ipchains iptables"
            ;;
        "mips")
            base="$base dvhtool pciutils setserial" # pcmcia-cs
            ;;
        "mipsel")
            base="$base delo pciutils setserial" # pcmcia-cs
            ;;
        "hppa")
            base="$base palo libstdc++3 gcc-3.0-base"
            required="$(without_package "libstdc++2.10-glibc2.2" "$required")"
            ;;
        s390|s390x)
            # base-config depends on console-data and console-common
            # so we can't exclude them although they are useless on s390
            base="$base s390-tools telnetd devfsd"
            base="$(without_package "console-tools" "$base")"
            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")"
            ;;
        *)
            # 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
    export DEBIAN_FRONTEND

    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 exim "$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."
}