NanoOS

Rédigé par BeHuman Aucun commentaire
Classé dans : Shell/Bash Mots clés : busybox, linux, gnu, os, système d'exploitation

Se script permet de créer rapidement un système Linux fonctionnel avec busybox. J'ai trouvé se script sur le site d'ADComp, je balancerai le lien dans la soirée ca rje ne l'ai pas sous les yeux.

Cependant j'ai effectuer quelque modification au script pour qu'il s'utilise de façon graphique via zenity

#!/bin/bash

#	Mini Linux/BusyBox system by ADcomp 
#	*** tested with Ubuntu 12.04 LTS, 12.10 ***

function createSystem() {

    # base directory
    (
    echo "10"
    echo "#Création des répertoire de base"
    mkdir NanoOS && cd NanoOS
    
    # live directory
    mkdir -p live/boot/isolinux
    # minimal root filesystem
    sleep 1
    echo "20"
    echo "#Création du système de fichier root"
    mkdir rootfs && cd rootfs
    mkdir bin lib proc root sbin sys tmp 
    mkdir -p usr/lib usr/local usr/share/kmap usr/bin usr/sbin
    mkdir -p var/cache var/lib var/lock var/log var/run var/spool
    mkdir -p dev/pts dev/shm dev/input dev/net dev/usb
    mkdir -p etc/init.d
    chmod 1777 tmp
    sleep 1

    # copy /dev nodes ..
    echo "30"
    echo "#Copie des noeuds /dev"
    cp -dpR /dev/console dev/
    cp -dpR /dev/tty dev/
    cp -dpR /dev/tty[0-6] dev/
    cp -dpR /dev/null dev/
    cp -dpR /dev/zero dev/
    cp -dpR /dev/ram0 dev/

    # busybox
    sleep 1
    echo "40"
    echo "#Copie de Busybox & création des liens symbolique"
    cp /bin/busybox bin
    chmod 4755 bin/busybox
    chroot ../rootfs /bin/busybox --install -s
    rm linuxrc
    ln -s bin/busybox init

    # keyboard
    /bin/busybox dumpkmap > usr/share/kmap/dump.kmap

    echo """# /etc/fstab: information about static file system.
proc            /proc        proc    defaults          0       0
sysfs           /sys         sysfs   defaults          0       0
devpts          /dev/pts     devpts  defaults          0       0
tmpfs           /dev/shm     tmpfs   defaults          0       0
""" > etc/fstab
    
    echo """#! /bin/sh
echo "Processing /etc/init.d/rcS ... "
/bin/mount proc
/bin/mount -a
/bin/hostname -F /etc/hostname
/sbin/ifconfig lo 127.0.0.1 up
/sbin/loadkmap < /usr/share/kmap/dump.kmap
""" > etc/init.d/rcS
    chmod a+x etc/init.d/rcS

    echo """::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::ctrlaltdel:/sbin/reboot
""" > etc/inittab

    # config stuff ..
    sleep 1
    echo "50"
    echo "#Configuration Hostname"
    echo "127.0.0.1      localhost" > etc/hosts
    echo "minux" > etc/hostname
    echo "/bin/sh" > etc/shells
    echo "Mini Linux BusyBox experiment 0.1" > etc/issue
    echo "order hosts,bind" > etc/host.conf
    echo "multi on" >> etc/host.conf
    echo """PATH="/usr/sbin:/usr/bin:/sbin:/bin"
LD_LIBRARY_PATH="/usr/lib:/lib"

if [ "`id -u`" -eq 0 ]; then
PS1='\e[1m\u@\h:\w\#\e[m '
else
PS1='\e[1m\u@\h:\w\$\e[m '
fi

DISPLAY=:0.0

export PATH LD_LIBRARY_PATH PS1 DISPLAY ignoreeof
umask 022
""" > etc/profile

    # Users, groups and passwords
    sleep 0.5
    echo "60"
    echo "#Création utilisateurs, groupes et mots de passe"
    echo "root:x:0:0:root:/root:/bin/sh" > etc/passwd
    echo "root::13525:0:99999:7:::" > etc/shadow
    echo "root:x:0:" > etc/group
    echo "root:*::" > etc/gshadow
    chmod 640 etc/shadow
    chmod 640 etc/gshadow
    sleep 0.5
    echo "65"
    echo "#Compression de rootfs --> live/boot/rootfs.gz"
    find . -print | cpio -o -H newc | gzip -9 > ../live/boot/rootfs.gz

    cd ..


    # configure bootloader
    sleep 0.5
    echo "70"
    echo "#Copie de isolinux.bin --> live/boot/isolinux"
    cp /usr/lib/syslinux/isolinux.bin live/boot/isolinux
    echo "75"
    sleep 0.5
    echo "#Création de la configuration d'isolinux"
    echo """default live
label live
	kernel /boot/vmlinuz
	append initrd=/boot/rootfs.gz rw root=/dev/null quiet
implicit 0
prompt 0
""" > live/boot/isolinux/isolinux.cfg


    # copy linux kernel
    sleep 1
    echo "80"
    echo "#Copie du noyau -->  live/boot/vmlinuz"
    for kernel in /boot/vmlinuz-*; do echo "    * $kernel" ; done
    cp $kernel live/boot/vmlinuz
    chmod a+rw live/boot/vmlinuz


    # create iso image
    echo "90"
    echo "#Création d'une image ISO"
    genisoimage -R -o cd.iso -b boot/isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -V "Live" -input-charset iso8859-1 -boot-info-table live ) | zenity --progress --title="NanoOS" text="" --auto-close

    # test with Qemu
    zenity --question --title="NanoOS" --text="Voulez-vous lancer la simulation ?"
    if [ "$?" -eq 0 ]; then
        if [[ -f "/usr/bin/qemu-system-i386" ]]; then
            qemu-system-i386 -cdrom NanoOS/cd.iso
        else
            zenity --question --title="NanoOS" --text="Qemu n'est pas installé, voulez l'installer maintenant ?"
            if [ "$?" -eq 0 ]; then
                apt-get install -y -f -m qemu-kvm | zenity --progress --title="NanoOS" --text="Installation de Qemu en cours..." --auto-close --pulsate
            fi
            qemu-system-i386 -cdrom NanoOS/cd.iso
        fi
        
    fi
    # Clear
    zenity --question --title="NanoOS" --text="Voulez-vous supprimer NanoOS ?"
    if [ "$?" -eq 1 ]; then
        exit
    fi
    rm -rf NanoOS

}

if [ `whoami` != "root" ]; then
    gksudo -m "La création NanoOS nécessite les privilèges administrateur" "$0" &
    exit
fi
createSystem

 

Écrire un commentaire

Quelle est la cinquième lettre du mot qvax ?

Fil RSS des commentaires de cet article