пятница, 4 сентября 2009 г.

Немного о nanobsd

О том, что такое nanobsd можно глянуть тут.
Я расскажу об этом звере в контексте FreeBSD 7.2 и объёме дисковой памяти 128 Mb.





Для начала нужно выкинуть всё лишнее на момент сборки мира, в 7.2 эти настройки лежат в /etc/src.conf, вот пример моего конфа:

WITHOUT_INSTALLLIB=true
WITHOUT_TOOLCHAIN=true


WITHOUT_ATM=true
WITHOUT_AUDIT=true
WITHOUT_BIND_NAMED=true
WITHOUT_BIND_ETC=true
WITHOUT_BIND_UTILS=true
WITHOUT_BLUETOOTH=true
WITHOUT_CALENDAR=true
WITHOUT_CPP=true
WITHOUT_KERBEROS=true
WITHOUT_KERBEROS_SUPPORT=true
WITHOUT_CVS=true
WITHOUT_CXX=true
WITHOUT_DICT=true
WITHOUT_EXAMPLES=true
WITHOUT_FORTH=true
WITHOUT_GAMES=true
WITHOUT_GCOV=true
WITHOUT_GDB=true
WITHOUT_GPIB=true
WITHOUT_GROFF=true
WITHOUT_HTML=true
WITHOUT_I4B=true
WITHOUT_IDEA=true
WITHOUT_INET6=true
WITHOUT_INET6_SUPPORT=true
WITHOUT_INFO=true
WITHOUT_IPFILTER=true
WITHOUT_IPX=true
WITHOUT_LOCALES=true
WITHOUT_LPR=true
WITHOUT_MAILWRAPPER=ture
WITHOUT_MAN=true
WITHOUT_NCP=true
WITHOUT_NIS=true
WITHOUT_NLS=true
WITHOUT_NLS_CATALOGS=true
WITHOUT_OBJC=true
WITHOUT_RCMDS=true
WITHOUT_RESCUE=true
WITHOUT_SENDMAIL=true
WITHOUT_SHAREDOCS=true
WITHOUT_ZFS=true
первые две опции необходимо закомментировать  на момент сборки мира, а то не соберётся, я делал так: сначала собираю всё обычным образом "sh nanonbsd.sh -c /home/nanobsd/nanoconf", а после того как мир и ядро собрались, снимаю комменты с этих опций, и делаю "sh nanonbsd.sh -b -c /home/nanobsd/nanoconf".

В /etc/make.conf нужно прописать "NO_MODULES=true", а то их там на 100 с лишним метров может накомпиляться.

nanoconf примерно так:

NANO_KERNEL=UNI
NANO_IMAGES=1 #обязательно, если хотим вместиться на 128 метров
FlashDevice sandisk 128mb

install_packages () (
        mkdir -p ${NANO_WORLDDIR}/packages
        cp /home/packages/All/* ${NANO_WORLDDIR}/packages
        chroot ${NANO_WORLDDIR} sh -c 'cd packages; pkg_add -v *;cd ..;'
        rm -rf ${NANO_WORLDDIR}/packages
)

install_configs () (
        cp /home/nanobsd/*.conf ${NANO_WORLDDIR}/etc/
        cp /home/nanobsd/crontab ${NANO_WORLDDIR}/etc/
)



customize_cmd install_packages
customize_cmd install_configs

если захотите переименовать install_config в install_etc - придумайте что-нить пооригинальнее, а то это имя внутри nanobsd.sh используется, и в итоге нерабочий образ получится =)


Я в самом скрипте поправил fstab, так, чтобы файлухи маунтились не по имени устройства, а по label-у, вот патч:

--- nanobsd.sh.orig     2009-09-04 15:54:47.000000000 +0300
+++ nanobsd.sh  2009-09-04 15:58:08.000000000 +0300
@@ -306,5 +306,5 @@

        # pick up config files from the special partition
-       echo "mount -o ro /dev/${NANO_DRIVE}s3" > conf/default/etc/remount
+       echo "mount -o ro /dev/ufs/CFG" > conf/default/etc/remount

        # Put /tmp on the /var ramdisk (could be symlink already)
@@ -331,6 +331,6 @@
        echo "NANO_DRIVE=${NANO_DRIVE}" > etc/nanobsd.conf

-       echo "/dev/${NANO_DRIVE}s1a / ufs ro 1 1" > etc/fstab
-       echo "/dev/${NANO_DRIVE}s3 /cfg ufs rw,noauto 2 2" >> etc/fstab
+       echo "/dev/ufs/ROOT / ufs ro 1 1" > etc/fstab
+       echo "/dev/ufs/CFG /cfg ufs rw,noauto 2 2" >> etc/fstab
        mkdir -p cfg
        )
@@ -447,4 +447,5 @@
        # Create first image
        newfs ${NANO_NEWFS} /dev/${MD}s1a
+       tunefs -L ROOT /dev/${MD}s1a
        mount /dev/${MD}s1a ${MNT}
        df -i ${MNT}
@@ -472,4 +473,5 @@
        # Create Config slice
        newfs ${NANO_NEWFS} /dev/${MD}s3
+       tunefs -L CFG /dev/${MD}s3
        # XXX: fill from where ?


Всё остально по хавту, работает, только пыль столбом ;-)

Комментариев нет:

Отправить комментарий