]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/tools/tinybsd/tinybsd
This commit was generated by cvs2svn to compensate for changes in r162503,
[FreeBSD/FreeBSD.git] / tools / tools / tinybsd / tinybsd
1 #!/bin/sh -
2 # Copyright (c) 2006 Jean Milanez Melo <jmelo@freebsdbrasil.com.br>
3 #                                      <jmelo@FreeBSD.org>
4 #                    Patrick Tracanelli <eksffa@freebsdbrasil.com.br>
5 #
6 # $FreeBSD$
7 #set -xv
8 CURRENTDIR=/usr/src/tools/tools/tinybsd
9 WORKDIR=/usr/obj/tinybsdbuild
10 KERNCONF=TINYBSD
11 DEFINSTARGS="-o 0 -g 0 -m 555"
12 SECTUNIT=$1
13 TRACKCYL=$2 
14 SECTRACK=$3
15 CONF=$4
16 IMG=$5
17 TS="=====>"
18
19 if [ "$#" -lt 3 ]
20 then
21   echo "Woops!
22    Usage: $0 <mediasize in sectors> <heads according to firmware> 
23    <sectors according to firmware> <conf> [<tinybsd image name>]
24
25    Example: $0 62592 4 32 
26
27         or
28
29   $0 62592 4 32 wireless
30
31    Run diskinfo(8) -v against your CF device to get correct information
32    about your disk."
33   exit 1
34 fi
35
36 check_conf() {
37         if [ -z ${CONF} ]
38         then
39                 CONF="default"
40                 echo "${TS} Alternative conf name not set; defaulting to 'default'"
41         fi
42 }
43
44 check_alt_imgname() {
45         if [ -z ${IMG} ]
46         then
47                 IMG="tinybsd.bin"
48                 echo "${TS} Alternative image name not set; defaulting to 'tinybsd.bin'"
49         fi
50 }
51
52 remove_workdir() {
53         chflags -R noschg ${WORKDIR}
54         echo "${TS} Removing "${WORKDIR}
55         rm -rf ${WORKDIR}
56         echo "${TS} Removing Build Kernel Directory"
57         rm -rf /usr/obj/usr/src/sys/${KERNCONF}
58         echo "${TS}  done."
59 }
60
61
62 prework() {
63         remove_workdir  
64         mkdir -p ${WORKDIR}
65 }
66
67
68 create_tree() {
69         echo "${TS} Creating directory hierarchy... "
70         mtree -deU -f /etc/mtree/BSD.root.dist -p ${WORKDIR}
71         mtree -deU -f /etc/mtree/BSD.usr.dist -p ${WORKDIR}/usr
72         mtree -deU -f /etc/mtree/BSD.var.dist -p ${WORKDIR}/var
73 }
74
75
76 copy_binaries() {
77 #set -xv
78         for file in `cat ${CURRENTDIR}/conf/${CONF}/tinybsd.basefiles | grep -v "#" | \
79                 cut -f1 -d":" | sort | uniq` ; do
80                 echo "${TS} Copying "/${file}" to "${WORKDIR}/${file} 
81                 cp -fp /${file} ${WORKDIR}/${file} ;
82         done
83 #set +xv
84 }
85
86 make_kernel() {
87         echo "${TS} Building customized tiny beastie kernel... "
88         cp -p ${CURRENTDIR}/conf/${CONF}/${KERNCONF} /usr/src/sys/i386/conf
89         cd /usr/src
90         make buildkernel KERNCONF=${KERNCONF} || exit 1
91         gzip -9 /usr/obj/usr/src/sys/${KERNCONF}/kernel
92         install ${DEFINSTARGS} /usr/obj/usr/src/sys/${KERNCONF}/kernel.gz ${WORKDIR}/boot/kernel/
93         install ${DEFINSTARGS} \
94           /usr/obj/usr/src/sys/${KERNCONF}/modules/usr/src/sys/modules/acpi/acpi/acpi.ko \
95             ${WORKDIR}/boot/kernel
96         install -o 0 -g 0 -m 444 /sys/i386/conf/GENERIC.hints ${WORKDIR}/boot/device.hints
97 }
98
99
100 copy_libraries() {
101 #set -xv
102         TDEPFILE="`mktemp -t deps`"
103         TDEPFILES="`mktemp -t depsymlnk`"
104
105         cd ${CURRENTDIR}/conf/${CONF}
106         for file in `cat tinybsd.basefiles | grep -v "#" | cut -f1 -d":"`; do
107                 ldd -f "%p\n" /${file} >> ${TDEPFILE} ; # don't worry on progs been "not dynamic"
108         done
109
110         for libdeplib in `cat ${TDEPFILE} | sort | uniq`; do
111                 ldd -f "%p\n" /${libdeplib} >> ${TDEPFILE} ;
112         done
113         
114         for pamdep in `ls -1 /usr/lib/pam*`; do
115                 echo $pamdep >> ${TDEPFILE} ;
116                 ldd -f "%p\n" /${pamdep} >> ${TDEPFILE} ;
117         done    
118         
119         for lib in `cat ${TDEPFILE} | sort | uniq`; do
120                 echo "${TS} Copying "${lib}" to "${WORKDIR}${lib}
121                 cp -fp ${lib} ${WORKDIR}${lib} ;
122         done
123
124         for depsymlink in `cat ${TDEPFILE}`; do
125                 echo "${TS} Checking if ${depsymlink} is a symbolic link"
126                 /bin/ls -l $depsymlink | grep "\->" | awk '{print $11":"$9}' >> ${TDEPFILES}
127         done
128
129         for i in `cat ${TDEPFILES}`; do
130                 SOURCE_FILE=`echo $i | awk -F ":" '{print $1}'`
131                 TARGET_FILE=`echo $i | awk -F ":" '{print $2}'`
132
133                 echo "${TS} Unlinking ${WORKDIR}${TARGET_FILE}"
134                 chroot ${WORKDIR} /bin/rm -f ${TARGET_FILE}
135
136                 echo "${TS} Symlinking ${SOURCE_FILE} to ${TARGET_FILE}"
137                 chroot ${WORKDIR} /bin/ln -s ${SOURCE_FILE} ${TARGET_FILE}
138         done
139
140         echo -n "${TS} Unlinking "
141         rm -fv ${TDEPFILE} ${TDEPFILES}
142 #set +xv
143 }
144
145
146 create_etc() {
147         cd /usr/src/etc/sendmail/
148         make freebsd.cf freebsd.submit.cf
149
150         cd /usr/src/etc/
151         mkdir -p ${WORKDIR}/var/named/etc/namedb
152         make distribution DESTDIR=${WORKDIR}
153 }
154
155 personal_directories() {
156         echo "${TS} Copying your custom configuration on conf/ ..."
157         for custom in `find ${CURRENTDIR}/conf/${CONF}/ -type d -depth 1`; do
158                 cp -Rp ${custom}/* ${WORKDIR}/${custom#${CURRENTDIR}/conf/${CONF}/}/
159         done
160 }
161
162 symlinks() {
163 #set -xv
164         for i in `cat tinybsd.basefiles | grep -v "#" | grep ":"`; do
165                 SOURCE_FILE=`echo $i | awk -F ":" {'print $1'}`
166                 TARGET_FILE=`echo $i | awk -F ":" {'print $2'}`
167                 chroot ${WORKDIR} /bin/ln -vs /${SOURCE_FILE} ${TARGET_FILE}
168         done
169 #set +xv
170 }
171
172
173 create_image() {
174         #set -ex
175
176         VNODEFILE=`mktemp -t tinybsd`
177         IMGMNT=`mktemp -d -t tinybsd`
178
179         dd if=/dev/zero of=${VNODEFILE} count=${SECTUNIT}
180
181         MD=`mdconfig -a -t vnode -f ${VNODEFILE} -x ${SECTRACK} -y ${TRACKCYL}`
182
183         diskinfo -v /dev/${MD}
184
185         fdisk -I /dev/${MD}
186         fdisk /dev/${MD}
187
188         cp -p /boot/boot0 ${WORKDIR}/boot/boot0
189         bsdlabel -w -B /dev/${MD}
190         newfs -O2 -U /dev/${MD}a
191
192         mount /dev/${MD}a ${IMGMNT}
193
194         ( cd ${WORKDIR} && find . -print | cpio -dump ${IMGMNT} ) || true
195
196         df ${IMGMNT}
197         umount ${IMGMNT}
198
199         dd if=/dev/${MD} of=${CURRENTDIR}/${IMG} bs=64k
200
201         rm -vf ${VNODEFILE}
202         rm -rvf ${IMGMNT}
203         mdconfig -d -u ${MD}
204 }
205
206 ##########################
207 # run things
208 prework
209 check_conf
210 check_alt_imgname
211 create_tree
212 copy_binaries
213 make_kernel
214 copy_libraries
215 symlinks
216 create_etc
217 personal_directories
218 create_image
219 #set +xv
220