Handling non-standard directories in tinybsd
Jeremie Le Hen
jeremie at le-hen.org
Thu Oct 26 13:37:15 UTC 2006
And the patch...
On Thu, Oct 26, 2006 at 03:36:37PM +0200, Jeremie Le Hen wrote:
> Hi Jean,
>
> On Wed, Oct 25, 2006 at 10:02:57AM -0200, Jean Milanez Melo wrote:
> > >My feeling is that TinyBSD has used the KISS principle so far. The code
> > >as well as the configuration is somewhat raw (no offence here), but it is
> > >thereby easy to use, debug and modify at needs. I am going to code this
> > >in my source tree this afternoon and I will be glad to provide you the
> > >patch.
> >
> > That's right, make tinybsd simpler is really our idea :)
> >
> > Send to me your patch and i'll take a look.
>
> The patch is attached and works pretty well for me.
> In addition to tinybsd.localfiles, I've made a few improvements:
> - I've moved the configuration filenames in a variable ;
> - When computing "sub-dependencies", use a temporary alternate file
> and then merge it back to the main dependency file ;
> - "chflags 0" files that are to be turned into symlinks before unlinking
> them ;
> - Handle /boot.config correctly in the configuration directory.
>
> Thank you.
> Regards,
--
Jeremie Le Hen
< jeremie at le-hen dot org >< ttz at chchile dot org >
-------------- next part --------------
Index: README
===================================================================
RCS file: /home/ncvs/src/tools/tools/tinybsd/README,v
retrieving revision 1.1
diff -u -p -r1.1 README
--- README 20 Sep 2006 22:24:17 -0000 1.1
+++ README 26 Oct 2006 13:32:02 -0000
@@ -69,6 +69,10 @@ usr/sbin/pw
usr/sbin/pwd_mkdb
usr/sbin/setkey
+tinybsd.localfiles: Similar to tinybsd.basefiles but for /usr/local/. The
+difference is that directories will have to be created by TinyBSD because
+they are not handle by mtree(1).
+
etc/: This is the directory where you can put your custom /etc configuration.
# ls /usr/src/tools/tools/tinybsd/tinybsd
Index: tinybsd
===================================================================
RCS file: /home/ncvs/src/tools/tools/tinybsd/tinybsd,v
retrieving revision 1.4
diff -u -p -r1.4 tinybsd
--- tinybsd 11 Oct 2006 21:46:53 -0000 1.4
+++ tinybsd 26 Oct 2006 13:32:02 -0000
@@ -14,6 +14,8 @@ else
fi
WORKDIR=/usr/obj/tinybsdbuild
KERNCONF=TINYBSD
+BASEFILE="tinybsd.basefiles"
+LOCALFILE="tinybsd.localfiles"
DEFINSTARGS="-o 0 -g 0 -m 555"
TS="=====>"
@@ -262,10 +264,26 @@ create_tree() {
mtree -deU -f /etc/mtree/BSD.var.dist -p ${WORKDIR}/var
}
+create_missingdirs() {
+ local LISTFILE DIR
+ LISTFILE=$1
+
+ for file in `cat $LISTFILE | grep -v "#" | cut -f1 -d":" | sort | uniq`; do
+ DIR=`dirname ${file}`
+ if [ ! -d ${WORKDIR}/${DIR} ]; then
+ echo "Non-standard directory created manually: ${DIR}."
+ mkdir -p ${WORKDIR}/${DIR}
+ fi
+ done
+}
+
copy_binaries() {
#set -xv
- for file in `cat ${CURRENTDIR}/conf/${CONF}/tinybsd.basefiles | grep -v "#" | \
+ cd ${CURRENTDIR}/conf/${CONF}
+ create_missingdirs ${LOCALFILE}
+
+ for file in `cat ${BASEFILE} ${LOCALFILE} | grep -v "#" | \
cut -f1 -d":" | sort | uniq` ; do
echo "${TS} Copying "/${file}" to "${WORKDIR}/${file}
cp -fp /${file} ${WORKDIR}/${file} ;
@@ -289,24 +307,31 @@ make_kernel() {
copy_libraries() {
#set -xv
- TDEPFILE="`mktemp -t deps`"
- TDEPFILES="`mktemp -t depsymlnk`"
+ TDEPFILE="`mktemp -t deps.XXX`"
+ TDEPFILE2="`mktemp -t deps.XXX`"
+ TDEPFILES="`mktemp -t depsymlnk.XXX`"
cd ${CURRENTDIR}/conf/${CONF}
- for file in `cat tinybsd.basefiles | grep -v "#" | cut -f1 -d":"`; do
+ for file in `cat ${BASEFILE} ${LOCALFILE} | grep -v "#" | cut -f1 -d":"`; do
ldd -f "%p\n" /${file} >> ${TDEPFILE} ; # don't worry on progs been "not dynamic"
done
for libdeplib in `cat ${TDEPFILE} | sort | uniq`; do
- ldd -f "%p\n" /${libdeplib} >> ${TDEPFILE} ;
+ ldd -f "%p\n" /${libdeplib} >> ${TDEPFILE2} ;
done
+ cat ${TDEPFILE2} >> ${TDEPFILE}
for pamdep in `ls -1 /usr/lib/pam*`; do
echo $pamdep >> ${TDEPFILE} ;
ldd -f "%p\n" /${pamdep} >> ${TDEPFILE} ;
done
+
+ cat ${TDEPFILE} | sort | uniq > ${TDEPFILE2}
+ mv -f ${TDEPFILE2} ${TDEPFILE}
+
+ create_missingdirs ${TDEPFILE}
- for lib in `cat ${TDEPFILE} | sort | uniq`; do
+ for lib in `cat ${TDEPFILE}`; do
echo "${TS} Copying "${lib}" to "${WORKDIR}${lib}
cp -fp ${lib} ${WORKDIR}${lib} ;
done
@@ -321,6 +346,7 @@ copy_libraries() {
TARGET_FILE=`echo $i | awk -F ":" '{print $2}'`
echo "${TS} Unlinking ${WORKDIR}${TARGET_FILE}"
+ chroot ${WORKDIR} /bin/chflags 0 ${TARGET_FILE}
chroot ${WORKDIR} /bin/rm -f ${TARGET_FILE}
echo "${TS} Symlinking ${SOURCE_FILE} to ${TARGET_FILE}"
@@ -349,16 +375,20 @@ create_ssh_keys() {
ssh-keygen -t rsa -f ${WORKDIR}/etc/ssh/ssh_host_rsa_key -N ''
}
-personal_directories() {
+personal_conf() {
echo "${TS} Copying your custom configuration on conf/ ..."
- for custom in `find ${CURRENTDIR}/conf/${CONF}/ -type d -depth 1`; do
+ for custom in `find ${CURRENTDIR}/conf/${CONF}/ -type d -depth 1 \! -name CVS`; do
cp -Rp ${custom}/* ${WORKDIR}/${custom#${CURRENTDIR}/conf/${CONF}/}/
done
+
+ if [ -f ${CURRENTDIR}/conf/${CONF}/boot.config ]; then
+ cp ${CURRENTDIR}/conf/${CONF}/boot.config ${WORKDIR}/boot.config
+ fi
}
symlinks() {
#set -xv
- for i in `cat tinybsd.basefiles | grep -v "#" | grep ":"`; do
+ for i in `cat ${BASEFILE} ${LOCALFILE} | grep -v "#" | grep ":"`; do
SOURCE_FILE=`echo $i | awk -F ":" {'print $1'}`
TARGET_FILE=`echo $i | awk -F ":" {'print $2'}`
chroot ${WORKDIR} /bin/ln -vs /${SOURCE_FILE} ${TARGET_FILE}
@@ -460,7 +502,7 @@ saveconfig
symlinks
create_etc
create_ssh_keys
- personal_directories
+ personal_conf
create_image
#set +xv
) 2>&1 |tee -a ${HOME}/tinybsd.log
More information about the freebsd-small
mailing list