                             Eisagwgy% sto NanoBSD

  Daniel Gerzo

  Kuria%ko*s Kentrwty%*s

   Anathew%rysy: 8def749c53

   Pneumatika% Dikaiw%mata (c) 2006, 2009 Y Oma%da Tekmyri%wsy*s tou FreeBSD

   To FreeBSD ei%nai e%na katoxurwme%no emporiko% su%mbolo tou FreeBSD
   Foundation.

   Polle%*s apo% ti*s le%cei*s y% fra%sei*s oi opoi%e*s xrysimopoiou%ntai
   apo% tou*s kataskeuaste%*s y% tou*s pwlyte%*s tou*s gia na diakri%noun ta
   projo%nta tou*s thewrou%ntai emporika% su%mbola. O%pou aute%*s
   emfani%zontai se auto% to kei%meno kai gia o%se*s apo% aute%*s gnwri%zei y
   Oma%da Ana%ptucy*s tou FreeBSD o%ti ei%nai pithano%n na ei%nai emporika%
   su%mbola, tha dei%te e%na apo% ta su%mbola: <<TM>> y% <<(R)>>.

   Teleutai%a tropopoi%ysy sti*s 2013-11-13 07:52:45 +0000 apo% Hiroki Sato.
   Peri%lyqy

   To e%ggrafo auto% pare%xei plyrofori%e*s gia ta ergalei%a tou NanoBSD, ta
   opoi%a mporou%n na xrysimopoiythou%n prokeime%nou na dymiourgythou%n
   ei%dwla tou susty%mato*s FreeBSD gia embedded efarmoge%*s, kata%llyle*s
   gia xry%sy apo% ka%rta Compact Flash (y% a%llo me%so apothy%keusy*s).

   [ HTML se tmy%mata / HTML se e%na tmy%ma ]

     ----------------------------------------------------------------------

   Pi%naka*s Periexome%nwn

   1. Eisagwgy% sto NanoBSD

   2. Ru%thmisy tou NanoBSD

   Eurety%rio

1. Eisagwgy% sto NanoBSD

   To NanoBSD ei%nai e%na ergalei%o to opoi%o anaptu%ssetai energa% apo% ton
   Poul-Henning Kamp. Dymiourgei% e%na eikoniko% ei%dwlo tou susty%mato*s
   FreeBSD gia embedded efarmoge%*s, idaniko% gia ka%rte*s Compact Flash (y%
   a%llo me%so apothy%keusy*s).

   Mporei% na xrysimopoiythei% gia na ftiaxtou%n eceidikeume%ne*s eiko%ne*s,
   sxediasme%ne*s gia eu%koly egkata%stasy kai sunty%rysy sustyma%twn tu%pou
   <<computer appliance>>. Ta susty%mata te%toiou ei%dou*s e%xoun to uliko%
   kai logismiko% tou*s enopoiyme%na me%sa sto projo%n. Auto% symai%nei pw*s
   suxna% ei%nai proegkatestyme%na o%la ta aparai%tyta progra%mmata. Y
   suskeuy% sunde%etai se e%na upa%rxon di%ktuo kai mporei% na leitourgy%sei
   (sxedo%n) ame%sw*s.

   Ta basika% xaraktyristika% tou NanoBSD ei%nai:

     * Ta ports kai ta pake%ta leitourgou%n o%pw*s sto FreeBSD - opoiody%pote
       pro%gramma mporei% na egkatastathei% kai na xrysimopoiythei% sto
       FreeBSD mporei% na enswmatwthei% kai se e%na ei%dwlo NanoBSD kai na
       leitourgy%sei me ton i%dio tro%po.

     * De usterei% se leitourgiko%tyta - An ei%nai efikto% na gi%nei ka%ti me
       to FreeBSD, to%te ei%nai efikto% na gi%nei to i%dio pra%ma kai me to
       NanoBSD, ekto%*s an to sugkekrime%no xaraktyristiko% e%xei sko%pima
       afairethei% apo% to ei%dwlo tou NanoBSD.

     * To NanoBSD tre%xei me to su%styma se kata%stasy prostasi%a*s apo%
       eggrafy%. Mporei%te ako%ma kai na to aposunde%sete apo% to reu%ma tyn
       w%ra pou leitourgei%. Den ei%nai anagkai%o na ektelestei% to fsck(8)
       meta% apo% mia a%garmpy diakopy% leitourgi%a*s tou susty%mato*s.

     * Ei%nai eu%kolo na dymiourgythei% kai na prosarmostei% e%na ei%dwlo
       NanoBSD. Me ty xry%sy eno%*s mo%no senari%ou floiou% kai eno%*s
       arxei%ou diamo%rfwsy*s ei%nai efikty% y do%mysy prosarmosme%nwn
       eidw%lwn pou ikanopoiou%n opoiady%pote ana%gky.

2. Ru%thmisy tou NanoBSD

  2.1. Y Sxedi%asy tou NanoBSD

   Afou% graftei% e%na ei%dwlo tou NanoBSD se ka%poio apothykeutiko% me%so,
   mporei% na xrysimopoiythei% gia na cekiny%sei e%na su%styma FreeBSD. Y
   prokathorisme%ny diamo%rfwsy tou me%sou ekki%nysy*s apotelei%tai apo%
   tri%a me%ry:

     * Du%o diameri%smata ekki%nysy*s: code#1 kai code#2.

     * To diame%risma ruthmi%sewn, Auto% mporei% na prosartythei% ston
       kata%logo /cfg tyn w%ra leitourgi%a*s tou NanoBSD.

   Auta% ta tri%a diameri%smata kanonika% ei%nai prosartyme%na mo%no gia
   ana%gnwsy.

   Oi kata%logoi /etc kai /var ei%nai eikonikoi% di%skoi md(4) (malloc).

   To diame%risma ruthmi%sewn mporei% na prosartythei% ston kata%logo /cfg.
   Perie%xei arxei%a ta opoi%a antigra%fontai ston kata%logo /etc. Kata% tyn
   ekki%nysy tou susty%mato*s to diame%risma ruthmi%sewn prosarta%tai
   proswrina% mo%no gia ana%gnwsy kai antigra%fontai ta arxei%a tou ston
   kata%logo /etc. Opo%te gia na ei%nai ka%poia allagy% ruthmi%sewn pio
   <<mo%nimy>> kai na isxu%ei ako%ma kai meta% apo% epanekki%nysy tou
   susty%mato*s, pre%pei na antigra%fetai apo% ton kata%logo /etc sto
   diame%risma ruthmi%sewn, afou% auto% prosartythei% gia gra%qimo ston
   kata%logo /cfg.

   Para%deigma 1. Ka%nonta*s mo%nime*s allage%*s sto /etc/resolv.conf

 # vi /etc/resolv.conf
 [...]
 # mount /cfg
 # cp /etc/resolv.conf /cfg
 # umount /cfg

  Symei%wsy:

   To diame%risma to opoi%o perie%xei ton kata%logo /cfg pre%pei na
   prosarta%tai mo%no kata% tyn ekki%nysy kai o%tan e%xoun proteraio%tyta ta
   arxei%a ruthmi%sewn tou /cfg.

   Den ei%nai kaly% ide%a na me%nei mo%nima prosartyme%no to diame%risma
   /cfg. An e%na diame%risma ei%nai prosartyme%no gia gra%qimo kai to
   apothykeutiko% me%so tou NanoBSD epitre%pei periorisme%no arithmo% ku%klwn
   eggrafy%*s (o%pw*s p.x. merike%*s ka%rte*s CF), mporei% na epyreastei%
   arnytika% to apothykeutimo% me%so epeidy% o pury%na*s gra%fei ka%the li%go
   stou*s di%skou*s tou susty%mato*s (syncer).

  2.2. Dymiourgi%a Eno%*s Prosarmosme%nou Susty%mato*s NanoBSD

   To ei%dwlo tou NanoBSD dymiourgei%tai apo% e%na aplo% sena%rio konso%la*s,
   to nanobsd.sh, to opoi%o mporei% na brethei% ston kata%logo
   /usr/src/tools/nanobsd. Auto% to sena%rio dymiourgei% e%na ei%dwlo
   di%skou, to opoi%o mporei% na antigrafei% apeuthei%a*s se ka%poio
   apothykeutiko% meso xrysimopoiw%nta*s to pro%gramma dd(1).

   Oi aparai%tyte*s entole%*s prokeime%nou na dymiourgythei% e%na ei%dwlo tou
   NanoBSD ei%nai oi ecy%*s:

 # cd /usr/src/tools/tools/nanobsd 1
 # sh nanobsd.sh 2
 # cd /usr/obj/nanobsd.full 3
 # dd if=_.disk.full of=/dev/da0 bs=64k 4

   1 Allagy% apo% ton tre%xonta kata%logo ston basiko% kata%logo tou          
     senari%ou dymiourgi%a*s tou NanoBSD.                                     
   2 Ekki%nysy ty*s dymiourgi%a*s tou eidw%lou.                               
   3 Allagy% apo% ton tre%xonta kata%logo ston kata%logo pou perie%xei to     
     ei%dwlo tou NanoBSD.                                                     
   4 Antigrafy% tou NanoBSD se e%na me%so apothy%keusy*s.                     

  2.3. Prosarmo%zonta*s to ei%dwlo tou NanoBSD

   Auto% ei%nai pithano%tata to pio symantiko% kai pio endiafe%ron
   xaraktyristiko% tou NanoBSD. Auto% ei%nai kai to me%ro*s ty*s
   diadikasi%a*s ana%ptucy*s tou eidw%lou NanoBSD gia to opoi%o tha code%qete
   e%na mega%lo pososto% tou xro%nou proetoimasi%a*s tou eidw%lou.

   Y ako%louthy entoly% tha ka%nei to nanobsd.sh na diaba%sei ti*s
   ruthmi%sei*s tou apo% to arxei%o myconf.nano pou bri%sketai sto tre%xonta
   kata%logo:

 # sh nanobsd.sh -c myconf.nano

   Y prosarmogy% kai parametropoi%ysy tou NanoBSD gi%netai suny%thw*s me du%o
   tro%pou*s:

     * Epiloge%*s diamo%rfwsy*s

     * Prosarmosme%ne*s sunarty%sei*s

    2.3.1. Epiloge%*s diamo%rfwsy*s

   Oi ruthmi%sei*s tou NanoBSD mporou%n na xrysimopoiythou%n gia na oristou%n
   prosarmosme%ne*s epiloge%*s metaglw%ttisy*s kai egkata%stasy*s tou
   FreeBSD. Aute%*s oi epiloge%*s epyrea%zoun ta sta%dia buildworld kai
   installworld tou NanoBSD, kathw%*s kai a%lle*s epiloge%*s ty*s
   dymiourgi%a*s tou telikou% eidw%lou. Me ti*s kata%llyle*s ruthmi%sei*s to
   NanoBSD mporei% na mikru%nei arketa% se me%getho*s. mporei% na xwre%sei
   e%na polu% mikro% uposu%nolo tou basikou% FreeBSD se xw%ro mikro%tero apo%
   64MB. Mporei%te epi%sy*s na xrysimopoiy%sete ti*s epiloge%*s tou NanoBSD
   gia na dymiourgy%sete e%na ei%dwlo pou e%xei mo%no ton pury%na kai
   duo-tri%a arxei%a sto basiko% su%styma.

   To arxei%o ruthmi%sewn tou NanoBSD perie%xei entole%*s oi opoi%e*s
   ori%zoun ne%e*s time%*s gia ka%poia prokathorisme%ny metablyty% y%
   epektei%noun ti*s upa%rxouse*s ruthmi%sei*s. Oi pio symantike%*s
   metablyte%*s ei%nai oi ecy%*s:

     * NANO_NAME - To o%noma tou eidw%lou NanoBSD pou tha dymiourgythei%
       (xrysimopoiei%tai gia na ftia%cei ta ono%mata twn kata%logwn
       ergasi%a*s).

     * NANO_SRC - Y diadromy% tou de%ntrou pygai%ou kw%dika to opoi%o tha
       xrysimopoiythei% gia na metglwttistei% to ei%dwlo.

     * NANO_KERNEL - To o%noma tou arxei%ou ruthmi%sewn pury%na to opoi%o tha
       xrysimopoiythei% gia na xtistei% o pury%na*s tou eidw%lou.

     * CONF_BUILD - Epiloge%*s pou pernou%n sto sta%dio buildworld ty*s
       metaglw%ttisy*s tou FreeBSD.

     * CONF_INSTALL - Epiloge%*s pou pernou%n sto sta%dio installworld ty*s
       proetoimasi%a*s tou eidw%lou.

     * CONF_WORLD - Epiloge%*s pou pernou%n kai sta du%o sta%dia ty*s
       proetoimasi%a*s tou eidw%lou, kai sto buildworld kai sto installworld.

     * FlashDevice - Ori%zei ton tu%po tou me%sou apothy%keusy*s pou tha
       xrysimopoiythei%. Gia perisso%tere*s leptome%reie*s dei%te to arxei%o
       FlashDevise.sub.

    2.3.2. Prosarmosme%ne*s Sunarty%sei*s

   Sto arxei%o ru%thmisy*s tou NanoBSD mporei% na ruthmistei% sxedo%n ka%the
   leptome%reia ty*s proetoimasi%a*s tou eidw%lou kai tou telikou% eidw%lou
   to opoi%o tha dymiourgythei%. Xrysimopoiw%nta*s mikre%*s sunarty%sei*s
   floiou%, mporou%me na ruthmi%soume ta pa%nta. Gia para%deigma, mporou%me
   na tre%coume dike%*s ma*s entole%*s oi opoi%e*s parametropoiou%n to
   teliko% ei%dwlo w*s ecy%*s:

 cust_foo () (
         echo "bar=topless" > \
                 ${NANO_WORLDDIR}/etc/foo
 )
 customize_cmd cust_foo

   E%na pio xry%simo para%deigma suna%rtysy*s floiou%, y opoi%a ruthmi%zei
   ka%poia para%metro tou telikou% eidw%lou, ei%nai auto% pou akolouthei%. Y
   suna%rtysy cust_etc_size alla%zei tyn proepilegme%ny timy% mege%thou*s tou
   katalo%gou /etc apo% 5MB se 30MB:

 cust_etc_size () (
         cd ${NANO_WORLDDIR}/conf
         echo 30000 > default/etc/md_size
 )
 customize_cmd cust_etc_size

   To sena%rio floiou% pou dymiourgei% to NanoBSD e%xei merike%*s e%toime*s
   sunarty%sei*s floiou% oi opoi%e*s ektelou%n te%toie*s epiple%on
   ruthmi%sei*s:

     * cust_comconsole - Apenergopoiei% to getty(8) sti*s konso%le*s VGA (oi
       suskeue%*s /dev/ttyv*) kai energopoiei% tyn xry%sy ty*s seiriaky%*s
       thu%ra*s COM1 w*s konso%la susty%mato*s.

     * cust_allow_ssh_root - Epitre%pei tyn ei%sodo tou xry%sty root me%sw
       tou sshd(8).

     * cust_install_files - Egkathista% arxei%a apo% ton kata%logo
       nanobsd/Files. Se auto% ton kata%logo bri%skontai merika% xry%sima
       sena%ria floiou% gia ty diaxei%risy eno%*s susty%mato*s NanoBSD.

    2.3.3. Prosthe%tonta*s Pake%ta

   Se e%na ei%dwlo NanoBSD mporou%n na prostethou%n kai e%toima pake%ta, pou
   e%xoun ftiaxtei% apo% prin xrysimopoiw%nta*s ty Sullogy% twn Ports. Mia
   suna%rtysy floiou% mporei% na egkatasty%sei e%ctra pake%ta tyn w%ra pou
   proetoima%zetai to ei%dwlo. Gia para%deigma, y paraka%tw suna%rtysy tha
   egkatasty%sei sto ei%dwlo o%la ta pake%ta pou bri%skontai ston kata%logo
   /usr/src/tools/tools/nanobsd/packages:

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

 customize_cmd install_packages

    2.3.4. Para%deigma Arxei%ou Ruthmi%sewn tou NanoBSD

   E%na ply%re*s para%deigma arxei%ou ruthmi%sewn gia to NanoBSD, me
   dia%fore*s ruthmi%sei*s gia ty metaglw%ttisy tou FreeBSD kai tyn
   proetoimasi%a tou telikou% eidw%lou, mporei% na moia%zei ka%pw*s e%tsi:

 NANO_NAME=custom
 NANO_SRC=/usr/src
 NANO_KERNEL=MYKERNEL
 NANO_IMAGES=2

 CONF_BUILD='
 NO_KLDLOAD=YES
 NO_NETGRAPH=YES
 NO_PAM=YES
 '

 CONF_INSTALL='
 NO_ACPI=YES
 NO_BLUETOOTH=YES
 NO_CVS=YES
 NO_FORTRAN=YES
 NO_HTML=YES
 NO_LPR=YES
 NO_MAN=YES
 NO_SENDMAIL=YES
 NO_SHAREDOCS=YES
 NO_EXAMPLES=YES
 NO_INSTALLLIB=YES
 NO_CALENDAR=YES
 NO_MISC=YES
 NO_SHARE=YES
 '

 CONF_WORLD='
 NO_BIND=YES
 NO_MODULES=YES
 NO_KERBEROS=YES
 NO_GAMES=YES
 NO_RESCUE=YES
 NO_LOCALES=YES
 NO_SYSCONS=YES
 NO_INFO=YES
 '

 FlashDevice SanDisk 1G

 cust_nobeastie() (
         touch ${NANO_WORLDDIR}/boot/loader.conf
         echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
 )

 customize_cmd cust_comconsole
 customize_cmd cust_install_files
 customize_cmd cust_allow_ssh_root
 customize_cmd cust_nobeastie

  2.4. Enymerw%nonta*s to NanoBSD

   Y diadikasi%a enyme%rwsy*s tou NanoBSD ei%nai sxetika% aply%:

    1. Dymiourgi%a eno%*s ne%ou eidw%lou NanoBSD, me to sunythisme%no tro%po.

    2. Ane%basma tou ne%ou eidw%lou se mia axrysimopoi%yty kata%tmysy mia*s
       suskeuy%*s pou tre%xei NanoBSD.

       Y pio symantiky% diafora% autou% tou symei%ou apo% tyn arxiky%
       egkata%stasy tou NanoBSD ei%nai o%ti tw%ra anti% tou arxei%ou
       _.disk.full (to opoi%o perie%xei to ei%dwlo eno%*s olo%klyrou
       di%skou), egkatasta%thyke to arxei%o _.disk.image (to opoi%o perie%xei
       to ei%dwlo mia*s mo%no kata%tmysy*s tou di%skou).

    3. Klei%simo kai epanekki%nysy tou susty%mato*s apo% tyn ne%a
       egkatestyme%ny kata%tmysy.

    4. An o%la pa%ne kala%, y anaba%thmisy telei%wse.

    5. An otidy%pote pa%ei straba%, epanekkiny%ste ty suskeuy% apo% tyn
       proygou%meny kata%tmysy (y opoi%a perie%xei to palio% ei%dwlo, pou
       leitourgei% swsta%). E%tsi mporei%te na epanafe%rete a%mesa to
       su%styma se leitourgiky% kata%stasy. Diorthw%ste opoiady%pote
       probly%mata e%xei to ne%o ei%dwlo, kai epanala%bete tyn diadikasi%a.

   Gia na egkatastathei% to ne%o ei%dwlo se e%na su%styma NanoBSD, to opoi%o
   y%dy bri%sketai se leitourgi%a, mporei% na xrysimopoiythei% ei%te to
   sena%rio updatep1 ei%te to updatep2. Auta% ta du%o sena%ria floiou%
   bri%skontai ston kata%logo /root.

   Ana%loga me ti*s upyresi%e*s tou susty%mato*s sto opoi%o dymiourgei%tai
   e%na ei%dwlo NanoBSD, mporei% na metaferthei% e%na ne%o ei%dwlo sto
   teliko% su%styma me dia%forou*s tro%pou*s:

    2.4.1. Xrysimopoiw%nta*s to ftp(1)

   An sa*s endiafe%rei y kaly% taxu%tyta metafora%*s, xrysimopoiy%ste to FTP
   gia ty metafora% tou eidw%lou:

 # ftp myhost
 get _.disk.image "| sh updatep1"

    2.4.2. Xrysimopoiw%nta*s to ssh(1)

   An sa*s endiafe%rei y metafora% tou eidw%lou na gi%nei me asfaly% tro%po
   kai den e%xete afaire%sei apo% to arxiko% ei%dwlo to ssh(1), protimy%ste
   ty metafora% me%sw SSH:

 # ssh myhost cat _.disk.image.gz | zcat | sh updatep1

    2.4.3. Xrysimopoiw%nta*s to nc(1)

   An to su%styma sto opoi%o e%xei dymiourgythei% to ne%o ei%dwlo tou NanoBSD
   den tre%xei ou%te ftpd(8) ou%te sshd(8), mporei%te na xrysimopoiy%sete
   a%lla ergalei%a gia ty metafora%, o%pw*s to nc(1):

    1. Prw%ta anoi%cte e%na ecupyretyty% TCP sto su%styma to opoi%o tha
       pare%xei to ne%o ei%dwlo, kai ori%ste to ne%o ei%dwlo w*s ei%sodo gia
       ty metafora% pou tha gi%nei argo%tera:

 myhost# nc -l 2222 < _.disk.image

  Symei%wsy:

       Prin apo% auto% bebaiwthei%te o%ti y thu%ra pou xrysimopoiei%te gia
       ton ecupyretyty% mporei% na dexthei% eiserxo%mene*s sunde%sei*s apo%
       to su%styma NanoBSD pro*s to su%styma tou ecupyretyty%, kai den
       empodi%zetai, gia para%deigma, apo% ka%poio tei%xo*s prostasi%a*s
       (<<firewall>>).

    2. Sundethei%te apo% to NanoBSD ston ecupyretyty%, o opoi%o*s ei%nai y%dy
       e%toimo*s na pare%xei to ne%o ei%dwlo, kai trofodotei%ste to sena%rio
       floiou% updatep1 me tyn e%codo tou ergalei%ou nc(1):

 # nc myhost 2222 | sh updatep1

Eurety%rio

  N

   NanoBSD, Eisagwgy% sto NanoBSD
