blob: 22d76fc8d0753f3c491fe842bd102dea32cc22ea (
plain) (
blame)
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
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
#!/bin/sh
#
# fase_1.sh - FreeBSD From Scratch, Primera Fase: Instalación del Sistema.
# Uso: ./fase_1.sh
#
# $FreeBSD$
set -x -e
PATH=/bin:/usr/bin:/sbin:/usr/sbin
# Requisitos:
#
# a) Haber completado sin errores "make buildworld" y "make buildkernel"
# b) Particiones sin usar (al menos una para el sistema de ficheros raíz,
# probablemente más para los nuevos /usr y /var, a gusto de cada uno.)
# El punto montaje de la raíz bajo la que va usted a crear el sistema nuevo.
# Sólo va a usarse como punto de montaje; que no se usará espacio en él
# puesto que todos los ficheros serán depositados en el o los sistemas
# de ficheros que están efectivamente montados.
DESTDIR=/rootnuevo
SRC=/usr/src # Aquí está su árbol de fuentes.
# ---------------------------------------------------------------------------- #
# Primer Paso: Creación de un árbol de directorios vacío bajo $DESTDIR.
# ---------------------------------------------------------------------------- #
step_one () {
# El nuevo raíz del sistema de ficheros. Obligatorio.
# Cambie los nombres de dispositivo (DEV_*) para hacerlos acordes con
# sus necesidades o el "script" le
# estallará en la cara.
DEV_ROOT=/dev/da3s1a
mkdir -p ${DESTDIR}
newfs ${DEV_ROOT}
tunefs -n enable ${DEV_ROOT}
mount -o noatime ${DEV_ROOT} ${DESTDIR}
# Sistemas de ficheros extra y sus correspondientes puntos de montaje.
# Opcional.
DEV_VAR=/dev/vinum/var_a
newfs ${DEV_VAR}
tunefs -n enable ${DEV_VAR}
mkdir -m 755 ${DESTDIR}/var
mount -o noatime ${DEV_VAR} ${DESTDIR}/var
DEV_USR=/dev/vinum/usr_a
newfs ${DEV_USR}
tunefs -n enable ${DEV_USR}
mkdir -m 755 ${DESTDIR}/usr
mount -o noatime ${DEV_USR} ${DESTDIR}/usr
mkdir -m 755 -p ${DESTDIR}/usr/ports
mount /dev/vinum/ports ${DESTDIR}/usr/ports
# Aquí crearemos los demás directorios. Obligatorio.
cd ${SRC}/etc; make distrib-dirs DESTDIR=${DESTDIR}
# Personalmente me gusta enlazar tmp a var/tmp. Opcional.
cd ${DESTDIR}; rmdir tmp; ln -s var/tmp
}
# ---------------------------------------------------------------------------- #
# Segundo Paso: Poblamos el árbol de directorios /etc que está vacío aún y
# ubicamos unos cuantos ficheros en /.
# ---------------------------------------------------------------------------- #
step_two () {
# Añada o borre de ésta lista según su criterio. La mayoría son obligatorios.
for f in \
/.profile \
/etc/group \
/etc/hosts \
/etc/inetd.conf \
/etc/ipfw.conf \
/etc/make.conf \
/etc/master.passwd \
/etc/nsswitch.conf \
/etc/ntp.conf \
/etc/printcap \
/etc/profile \
/etc/rc.conf \
/etc/resolv.conf \
/etc/start_if.xl0 \
/etc/ttys \
/etc/ppp/* \
/etc/mail/aliases \
/etc/mail/aliases.db \
/etc/mail/hal9000.mc \
/etc/mail/service.switch \
/etc/ssh/*key* \
/etc/ssh/*_config \
/etc/X11/XF86Config-4 \
/boot/splash.bmp \
/boot/loader.conf \
/boot/device.hints ; do
cp -p ${f} ${DESTDIR}${f}
done
# Borre el temproot que haya creado mergemasger. Si lo ha creado.
TEMPROOT=/var/tmp/temproot.fase1
if test -d ${TEMPROOT}; then
chflags -R 0 ${TEMPROOT}
rm -rf ${TEMPROOT}
fi
mergemaster -i -m ${SRC}/etc -t ${TEMPROOT} -D ${DESTDIR}
cap_mkdb ${DESTDIR}/etc/login.conf
pwd_mkdb -d ${DESTDIR}/etc -p ${DESTDIR}/etc/master.passwd
# Mergemaster no crea ficheros vacíos por ejemplo en /var/log. Lo haremos
# aquí pero sin sobreescribir (y destruír) ficheros copiados en el bucle
# de más arriba.
cd ${TEMPROOT}
find . -type f | sed 's,^\./,,' |
while read f; do
if test -r ${DESTDIR}/${f}; then
echo "${DESTDIR}/${f} ya existe; no copiado"
else
echo "Creando ${DESTDIR}/${f} vacío"
cp -p ${f} ${DESTDIR}/${f}
fi
done
chflags -R 0 ${TEMPROOT}
rm -rf ${TEMPROOT}
}
# ---------------------------------------------------------------------------- #
# Tercer Paso: Instalando el mundo (install world).
# ---------------------------------------------------------------------------- #
step_three () {
cd ${SRC}
make installworld DESTDIR=${DESTDIR}
}
# ---------------------------------------------------------------------------- #
# Cuarto Paso: Instalación del kernel y los módulos.
# ---------------------------------------------------------------------------- #
step_four () {
cd ${SRC}
# loader.conf y device.hints son necesarios para installkernel.
# Si en el segundo paso no los ha copiado hágalo tal y como se muestra en
# las dos líneas siguientes.
# cp sys/boot/forth/loader.conf ${DESTDIR}/boot/defaults
# cp sys/i386/conf/GENERIC.hints ${DESTDIR}/boot/device.hints
make installkernel DESTDIR=${DESTDIR} KERNCONF=NOMBRE_DE_SU_KERNEL
}
# ---------------------------------------------------------------------------- #
# Quinto Paso: Instalación y modificación de algunos ficheros clave.
# ---------------------------------------------------------------------------- #
step_five () {
# Creamos /etc/fstab; obligatorio. Modifíquelo para que coincida con sus
# dispositivos.
cat <<EOF >${DESTDIR}/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/da3s1b none swap sw 0 0
/dev/da4s2b none swap sw 0 0
/dev/da3s1a / ufs rw 1 1
/dev/da1s2a /src ufs rw 0 2
/dev/da2s2f /share ufs rw 0 2
/dev/vinum/var_a /var ufs rw 0 2
/dev/vinum/usr_a /usr ufs rw 0 2
/dev/vinum/home /home ufs rw 0 2
/dev/vinum/ncvs /home/ncvs ufs rw,noatime 0 2
/dev/vinum/ports /usr/ports ufs rw,noatime 0 2
#
/dev/cd0 /dvd cd9660 ro,noauto 0 0
/dev/cd1 /cdrom cd9660 ro,noauto 0 0
proc /proc procfs rw 0 0
EOF
# Más directorios; opcional.
mkdir -m 755 -p ${DESTDIR}/src; chown root:wheel ${DESTDIR}/src
mkdir -m 755 -p ${DESTDIR}/share; chown root:wheel ${DESTDIR}/share
mkdir -m 755 -p ${DESTDIR}/dvd; chown root:wheel ${DESTDIR}/dvd
mkdir -m 755 -p ${DESTDIR}/home; chown root:wheel ${DESTDIR}/home
mkdir -m 755 -p ${DESTDIR}/usr/ports; chown root:wheel ${DESTDIR}/usr/ports
# Configuración de la zona horaria; no es obligatorio pero casi.
cp ${DESTDIR}/usr/share/zoneinfo/Antarctica/South_Pole ${DESTDIR}/etc/localtime
if test -r /etc/wall_cmos_clock; then
cp -p /etc/wall_cmos_clock ${DESTDIR}/etc/wall_cmos_clock
fi
}
# ---------------------------------------------------------------------------- #
# Sexto Paso: Lo que considero importante tener cuando accedo a un sistema
# nuevo por primera vez.
# NOTA: No instale demasiados binarios en éste paso. Con el sistema viejo
# en funcionamiento y los nuevos binarios y ficheros de cabecera instalados
# es casi seguro tener problemas de bootstrap. Los "ports" deberían compilarse
# después de haber arrancado el nuevo sistema.
# ---------------------------------------------------------------------------- #
step_six () {
chroot ${DESTDIR} sh -c "cd /usr/ports/shells/zsh; make clean install clean"
chroot ${DESTDIR} sh -c "cd /etc/mail; make install" # configuración
# de sendmail
# Si no enlazamos simbólicamente compat los ficheros de linux_base
# irán a parar al sistema de ficheros raíz.
cd ${DESTDIR}; mkdir -m 755 usr/compat
chown root:wheel usr/compat; ln -s usr/compat
mkdir -m 755 usr/compat/linux
mkdir -m 755 boot/grub
# Creación de los directorios "spool" para las impresoras que hay en
# mi /etc/printcap
cd ${DESTDIR}/var/spool/output/lpd; mkdir -p as od ev te lp da
touch ${DESTDIR}/var/log/lpd-errs
# Más ficheros que quiero heredar del sistema antíguo.
for f in \
/var/cron/tabs/root \
/var/mail/* \
/boot/grub/*; do
cp -p ${f} ${DESTDIR}${f}
done
# Si no tiene /home en una partición compartida es un buen momento para
# copiarlo al sitio correcto.
# mkdir -p ${DESTDIR}/home
# cd /home; tar cf - . | (cd ${DESTDIR}/home; tar xpvf -)
# Como novedad en FreeBSD 5.x perl está en /usr/local/bin pero la
# mayoría de "scripts" esperan encontrarlo en /usr/bin/perl y así lo
# reflejan en su primera línea; use un enlace simbólico para que funcionen.
cd ${DESTDIR}/usr/bin; ln -s ../local/bin/perl
cd ${DESTDIR}/usr; rmdir src; ln -s ../src/current src
}
do_steps () {
step_one
step_two
step_three
step_four
step_five
step_six
}
do_steps 2>&1 | tee fase_1.log
# EOF $RCSfile: fase_1.sh,v $ vim: tabstop=2:expandtab:
|