The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Как я устанавливал NetBSD на FLASH-USB (netbsd install flash usb boot)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: netbsd, install, flash, usb, boot,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-13 15:24:49 Subject: Как я устанавливал NetBSD на FLASH-USB
Автор: Сергей Воронков serg(at)so.net.ua

Зачем это надо. Я думаю задач придумать можно массу, у меня работает роутинг(quagga), NAT, firewall.

Платформа:

i386 поддерживающая USB-HDD и соответственно загрузку с него, загрузочная FLASH-USB 128 Мб (я думаю можно и на меньшую установить, зависит от задач), 128 Мб оперативной памяти.

Установка:

Все бесхитростно, но желательно иметь "тестовый стенд", т.е. систему установленную на жесткий диск, зачем, будет понятно ниже. Вставляю диск с инсталляцией в CD привод, FLASH-USB соответственно в USB разъем. Дальше устанавливаю систему на sd0 (у меня так определилась FLASH-USB). При установке выбираю Install to hard disk, далее Custom installation. В разделе The following is the list off distribution sets that will оставляю yes на пунктах:
    
    		Kernel (GENERIC)
    		Base
    		System (/etc)
    
    
а X11 sets переключаем в none. Стараюсь уменьшить колличество устанавливаемого ПО на Flash носитель. При определении геометрии диска соглашаюсь с BIOS. Далее выбираю Edit the MBR partition table. При дальнейшем определении разделов весь объем Flash носителя отдаю под раздел a:,
    
    	b: - (swap)  	no,
    	tmp 	-	0
    	/usr	-	0
    	/var	-	0
    	/home	-	0
    
    
Дальше нет смысла описывать, стандартная процедура. Вот и получили готовую систему.

Установка ПО: Дальше немножко ее модернизирую, ну нравится мне, bash и mc. На тестовом стенде определяю зависимости для bash и mc с помощью ldd:
    
    root@difficulty:/usr/pkg/bin>ldd mc
    mc:
            -lintl.0 => /usr/lib/libintl.so.0
            -lglib-2.0.0 => /usr/pkg/lib/libglib-2.0.so.0
            -lm.0 => /usr/lib/libm387.so.0
            -lm.0 => /usr/lib/libm.so.0
            -ltermcap.0 => /usr/lib/libtermcap.so.0
            -lslang.1 => /usr/pkg/lib/libslang.so.1
            -lc.12 => /usr/lib/libc.so.12
    
    root@difficulty:/usr/pkg/bin>ldd bash
    bash:
            -lreadline.5 => /usr/pkg/lib/libreadline.so.5
            -lhistory.5 => /usr/pkg/lib/libhistory.so.5
            -ltermcap.0 => /usr/lib/libtermcap.so.0
            -lintl.0 => /usr/lib/libintl.so.0
            -lc.12 => /usr/lib/libc.so.12
    
    
На самом деле для mc понадобятся сам /usr/pkg/bin/mc, две либы и два линка на них из /usr/pkg/lib
    
    libglib-2.0.so.0 -> libglib-2.0.so.0.1000.0
    libglib-2.0.so.0.1000.0
    libslang.so.1 -> libslang.so.1.0.4
    libslang.so.1.0.4
    
    
Для bash понадобятся сам /usr/pkg/bin/bash, две либы и два линка на них из /usr/pkg/lib
    
    libhistory.so.5 -> libhistory.so.5.0.1
    libhistory.so.5.0.1
    libreadline.so.5 -> libreadline.so.5.0.1
    libreadline.so.5.0.1
    
    
Далее на тестовом стенде:
    
    	mount /dev/sd0a /mnt
    	mkdir /mnt/usr/pkg/lib/
    	mkdir /mnt/usr/pkg/bin/
    	mkdir /mnt/usr/pkg/sbin/
    	mkdir /mnt/usr/pkg/etc/
    	mkdir /mnt/usr/pkg/share/
    
    
Для bash и mc:
    
    	cp /usr/pkg/lib/libglib-2.0.so.0 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libglib-2.0.so.0.1000.0 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libslang.so.1 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libslang.so.1.0.4 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libhistory.so.5 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libhistory.so.5.0.1 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libreadline.so.5 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libreadline.so.5.0.1 /mnt/usr/pkg/lib/
    	cp /usr/pkg/bin/mc /mnt/usr/pkg/bin/
    	cp /usr/pkg/bin/bash /mnt/usr/pkg/bin/
    
    
в /etc/shells добавляю строчку /usr/pkg/bin/bash Так же мне понадобились snmp и zebra(quagga), провожу аналогичную процедуру с ldd и для них, в результате. Для snmp:
    
    	cp /usr/pkg/lib/libnetsnmp.so.10 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libnetsnmp.so.10.0.1 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libnetsnmpagent.so.10 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libnetsnmpagent.so.10.0.1 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libnetsnmphelpers.so.10 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libnetsnmphelpers.so.10.0.1 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libnetsnmpmibs.so.10 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libnetsnmpmibs.so.10.0.1 /mnt/usr/pkg/lib/
    	cp /usr/pkg/sbin/snmpd /mnt/usr/pkg/sbin/
    	cp /etc/rc.d/snmpd /mnt/etc/rc.d/
    	cp /usr/pkg/etc/snmpd.conf /mnt/usr/pkg/etc/
    
    
в /etc/rc.conf добавляю строчку: snmpd=YES Забегая вперед, после эксперементального запуска оказалась необходимой и содержимое директории /usr/pkg/share/snmp, соответственно:
    
    	mkdir /usr/pkg/share/snmp
    	cp -R /usr/pkg/share/snmp/*  /mnt/usr/pkg/share/snmp/
    
    
Для zebra
    
    	cp /usr/pkg/lib/libzebra.so.0 /mnt/usr/pkg/lib/
    	cp /usr/pkg/lib/libzebra.so.0.0.0 /mnt/usr/pkg/lib/
    	cp /usr/pkg/sbin/zebra /mnt/usr/pkg/sbin/
    	cp /etc/rc.d/zebra /mnt/etc/rc.d/
    	mkdir /mnt/usr/pkg/etc/zebra/
    	cp /usr/pkg/etc/zebra/zebra.conf /mnt/usr/pkg/etc/zebra/
    
    
в /etc/rc.conf добавляю строчку: zebra=YES и zebra_flags="-P 2601" В дополнении приведу все конфиги которые у меня работают.

Оптимизация:

Далее гружусь с FLASH-USB. Конечно, оптимизировать можно до бесконечности, как один из вариантов, удалять не нужные компаненты. Я всего лишь "засунул" в mfs /dev, /var, /tmp. Для /dev, я уже не помню где вычитал метод, но признаюсь придумал не сам:
    
    	cp /dev/MAKEDEV /etc/
    	cp /dev/MAKEDEV.local /etc/
    	rm -R /dev/*
    	shutdown -r now
    
    
и как результат:
    
    	mfs:17 on /dev type mfs (synchronous, local)
    
    
Для /tmp:
    
    	rm -R /tmp/*
    
    
правим fstab:
    
    	mfs /tmp mfs rw,-s=10m
    
    
Для /var ситуация чуть сложнее, делаю следующее:
    
    	mkdir /img
    	rm -R /var/run/*
    	tar -czf /img/var.tgz /var
    
    
правлю fstab:
    
    	mfs /var mfs rw,-s=10m
    
    
в /etc/rc.d/ ложу скрипт make_var (содержимое скрипта см. ниже) в /etc/rc.conf добавляю строчку: make_var=YES в /etc/rc.d/ttys в разделе # REQUIRE: добаваляю make_var, в результате
    
    	# REQUIRE: root make_var
    
    
Теперь посмотрим внимательно на /etc/rc.d/mountcritlocal в этом скрипте с легкостью можно убрать строки, т.к. /var/run/ в памяти и при размонтировании автоматически уничтожается:
    
    	rm -f /etc/nologin /var/spool/lock/LCK.* /var/spool/uucp/STST/*
    	(cd /var/run && rm -rf -- *)
    
    
Теперь относительно ipfilter и ipnat, приведу пример самого простейшего варианта: добавляю в /etc/sysctl.conf
    
    	net.inet.ip.forwarding=1
    
    
правлю /etc/ipf.conf, /etc/ipnat.conf (см. ниже), и при загрузке получаю ошибку, которая лечится изменением /etc/rc.d/ipfilter в разделе ipfilter_prestart() {....... надо добавить строки:
    
    	pwd_temp=`pwd`
    	cd /dev
    	/etc/MAKEDEV ipl
    	cd ${pwd_temp}
    
    
Теперь ядро, компилю на тестовом стенде сжимаю и переливаю на FLASH-USB, вот и вся процедура

Можно при желании исправить fstab чтобы root монтировался в ro. Вот наверное и все изменения, конечно пределу совершенства нет, я уже не описываю ротацию с уничтожением логов, удаление ненужных бинарников в каждом случае это может варироваться. Могу сказать только, что проверено все роутится и натится, а дальше у кого какая фантазия.

Дополнительно:

rc.conf
    
    if [ -r /etc/defaults/rc.conf ]; then                
            . /etc/defaults/rc.conf                      
    fi                                                   
    hostname="difficulty"                                
    rc_configured=YES                                    
    wscons=YES                                           
    no_swap=YES                                          
    ifconfig_fxp0="inet 10.1.1.173 netmask 255.255.255.0"
    sendmail=NO                                          
    inetd=NO                                             
    cron=NO                                              
    ccd=NO                                               
    raidframe=NO                                         
    cgd=NO                                               
    clear_tmp=NO                                         
    quota=NO                                             
    make_var=YES                                         
    snmpd=YES                                            
    zebra=YES       zebra_flags="-P 2601"                
    update_motd=NO                                       
    ipfilter=YES                                         
    ipnat=YES                                            
    
    
fstab
    
    /dev/sd0a / ffs ro 1 1       
    kernfs /kern kernfs rw       
    procfs /proc procfs rw,noauto
    mfs /tmp mfs rw,-s=10m       
    mfs /var mfs rw,-s=10m       
    
    
shells
    
    /bin/sh  
    /bin/csh 
    /bin/ksh 
    /bin/bash
    
    
syslog.conf
    
    #       $NetBSD: syslog.conf,v 1.9 2004/07/23 03:45:42 mycroft Exp $          
    
    *.err;kern.*;auth.notice;authpriv.none;mail.crit  	    /dev/console          
    *.info;auth,authpriv,cron,ftp,kern,lpr,mail.none	    /var/log/messages     
    kern.debug       		                                /var/log/messages     
    auth,authpriv.info          		                       /var/log/authlog      
    *.emerg         			                       *                     
    *.notice                                   		    /var/log/messages     
    
    
resolv.conf
    
    nameserver 10.100.10.1
    
    
sysctl.conf
    
    net.inet.ip.forwarding=1
    
    
zebra.conf
    
    hostname Router                 
    password ----------------
    enable password -----------------
    log file /var/log/zebra.log     
    service password-encryption     
    no banner motd                  
    !                               
    interface fxp0                  
     ip address 10.1.1.173/24       
     ipv6 nd suppress-ra            
    !                               
    interface lo0                   
    !                               
    interface rtk0                  
     ip address 10.100.80.1/24      
     ipv6 nd suppress-ra            
    !                               
    ip route 0.0.0.0/0 10.100.10.1  
    !
    !                  
    line vty           
     access-class term 
     exec-timeout 30 0 
    !
    
    
ipfilter
    
    #!/bin/sh                                                 
    #                                                         
    # $NetBSD: ipfilter,v 1.14 2004/12/23 03:31:54 lukem Exp $
    #                                                         
    
    # PROVIDE: ipfilter                                       
    # REQUIRE: root beforenetlkm mountcritlocal tty           
    
    $_rc_subr_loaded . /etc/rc.subr                           
    
    name="ipfilter"                                           
    rcvar=$name                                               
    start_precmd="ipfilter_prestart"                          
    start_cmd="ipfilter_start"                                
    stop_precmd="test -f /etc/ipf.conf -o -f /etc/ipf6.conf"  
    stop_cmd="ipfilter_stop"                                  
    reload_precmd="$stop_precmd"                              
    reload_cmd="ipfilter_reload"                              
    resync_precmd="$stop_precmd"                              
    resync_cmd="ipfilter_resync"                              
    status_precmd="$stop_precmd"                              
    status_cmd="ipfilter_status"                              
    extra_commands="reload resync status"
    
    ipfilter_prestart()                                                        
    {                                                                          
            pwd_temp=`pwd`                                                     
            cd /dev                                                            
            /etc/MAKEDEV ipl                                                   
            cd ${pwd_temp}                                                     
            if [ ! -f /etc/ipf.conf ] && [ ! -f /etc/ipf6.conf ]; then         
                    warn "/etc/ipf*.conf not readable; ipfilter start aborted."
    ...........
    ..........
    ...........
    ipfilter_status()   
    {                   
            /sbin/ipf -V
    }                   
    
    load_rc_config $name
    run_rc_command "$1" 
    
    
make_var
    
    #!/bin/sh                 
    #                         
    # $NetBSD: make_var,      
    #                         
    # PROVIDE: make_var       
    # REQUIRE: mountcritlocal 
    
    . /etc/rc.subr            
    name="make_var"           
    start_cmd="make_var_start"
    stop_cmd=":"              
    make_var_start()          
    {                         
    tar -xzf /img/var.tgz -C /
    }                         
    load_rc_config $name      
    run_rc_command "$1"
    
    
mountcritlocal
    
    #!/bin/sh                                                        
    #                                                                
    # $NetBSD: mountcritlocal,v 1.8 2004/08/13 18:08:03 mycroft Exp $
    #                                                                
    
    # PROVIDE: mountcritlocal                                        
    # REQUIRE: root                                                  
    
    $_rc_subr_loaded . /etc/rc.subr                                  
    
    name="mountcritlocal"                                            
    start_cmd="mountcritlocal_start"                                 
    stop_cmd=":"                                                     
    
    mountcritlocal_start()                                           
    {                                                                
            #       Mount critical filesystems that are `local'      
            #       (as specified in $critical_filesystems_local)    
            #       This usually includes /var.                      
            #                                                        
            mount_critical_filesystems local                         
    
            #       clean up left-over files.
            #       this could include the cleanup of lock files and /var/run, etc.
            #                                                                      
    #!!!!!!!!!       rm -f /etc/nologin /var/spool/lock/LCK.* /var/spool/uucp/STST/*        
    #!!!!!!!!!       (cd /var/run && rm -rf -- *)                                           
    }                                                                              
    
    load_rc_config $name                                                           
    run_rc_command "$1"
    
    
snmpd
    
    #!/bin/sh                                               
    #                                                       
    # $NetBSD: snmpd.sh,v 1.4 2004/05/31 11:47:29 tron Exp $
    #                                                       
    # PROVIDE: snmpd                                        
    # REQUIRE: DAEMON                                       
    
    if [ -f /etc/rc.subr ]; then                            
            . /etc/rc.subr                                  
    fi
    name="snmpd"                                                          
    rcvar=$name                                                           
    command="/usr/pkg/sbin/${name}"                                       
    pidfile="/var/run/${name}.pid"                                        
    snmpd_flags="-Ls d"             # log using syslog LOG_DAEMON         
    command_args="-p ${pidfile}"                                          
    
    if [ -f /usr/pkg/etc/snmpd.conf ]; then                               
            command_args="${command_args} -c /usr/pkg/etc/snmpd.conf"     
    fi                                                                    
    
    if [ -f /etc/rc.subr -a -f /etc/rc.conf -a -f /etc/rc.d/DAEMON ]; then
            load_rc_config $name                                          
            run_rc_command "$1"                                           
    else                                                                  
            echo -n " ${name}"                                            
            ${command} ${snmpd_flags} ${command_args}                     
    fi
    
    ttys
    
      
      #!/bin/sh                                               
      #                                                       
      # $NetBSD: ttys,v 1.6 2004/11/10 05:04:51 christos Exp $
      #                                                       
      
      # PROVIDE: tty                                          
      # REQUIRE: root make_var
      ..............
      ..............
      ..............
      
      
    zebra
      
      #!/bin/sh                                                    
      #                                                            
      # zebra is the head of the quagga routing beast              
      #                                                            
      # PROVIDE: zebra                                             
      # REQUIRE: NETWORKING                                        
      ##                                                           
      
      PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/pkg/sbin:/usr/pkg/bin
      export PATH
      ..............
      ..............
      ..............
      
      

































































<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor