Instalasi dan Update Zeroshell (Retro)

(Artikel ini tersedia dengan Creative Commons Attribution-ShareAlike License)

Topik bahasan di artikel ini adalah:

  1. Instalasi router distro zeroshell-1.0-beta12 secara permanen (bukan live-CD/DVD) di storage IDE, SATA, dan USB atau device storage lainnya
  2. Update kernel dan initrd.gz dengan versi kernel lebih baru (2.6.31.4)
  3. Update root filesystem untuk kostumisasi aplikasi-aplikasi Zeroshell, misalnya untuk mensupport akses internetn lewat EVDO

Untuk otomatisasi langkah 2 dan 3, script shell (bash) juga ditampilkan. Saya menganggap Anda sedikit banyak telah paham dengan sistem dan program utility Linux serta pemrograman shell (sh), sehingga penjelasan lebih detail tidak diberikan. Bagi yang belum familiar, bisa mencarinya sendiri di internet.

Instalasi Permanen Zeroshell

Zeroshell-1.0-beta12 ini tersedia dalam format ISO untuk CD/DVD dan IMG untuk device IDE, SATA dan USB.

Untuk menjalankan ZeroShell dari CD/DVD secara live dapat dilakukan membakar file ISO ke CD/DVD, dan boot komputer dari CD. Sedangkan untuk menginstallnya ke storage selain CD/DVD yang digunakan adalah file IMG.

Note!: Pastikan device storage yang digunakan tidak mengandung data-data penting, karena proses instalasi di bawah ini akan menghapus seluruh device (termasuk partisinya) dan menggantikannya dengan partisi dan format sesuai yang digunakan oleh Zeroshell. Jadi, gunakan device storage baru atau Anda benar-benar telah memastikan semua data telah dibackup.

Kapasitas storage minimal yang dibutuhkan oleh Zeroshell adalah 1 GB. Jadi sebarang storage asalkan ukurannya lebih besar dari 1GB bisa digunakan.

Untuk USB flashdisk (dan mungkin berlaku untuk device lain), berikut langkah-langkah instalasinya:

  1. Download file IMG untuk IDE, SATA, dan USB, yaitu ZeroShell-1.0.beta12-CompactFlash-IDE-USB-SATA-1GB.img.gz
  2. File IMG tersebut terkompress dengan gzip, sehingga perlu diekstrak. Di Linux bisa menggunakan gunzip atau gzip dengan option -d untuk dekompress. gunzip merupakan symbolic link dari gzip, jadi keduanya bisa digunakan.

     root:~/ZeroShell-Devel> gunzip -d ZeroShell-1.0.beta12-CompactFlash-IDE-USB-SATA-1GB.img.gz
    

    Dari ekstrak tersebut didapatkan file ZeroShell-1.0.beta12-CompactFlash-IDE-USB-SATA-1GB.img

  3. Colokkan USB flash disk yang akan digunakan sebagai target instalasi. Lihat dmesg untuk memastikan device node yang diberikan ke USB flash

    usb 1-4: new high speed USB device using ehci_hcd and address 6
    usb 1-4: configuration #1 chosen from 1 choice
    scsi8 : SCSI emulation for USB Mass Storage devices
    usb-storage: device found at 6
    usb-storage: waiting for device to settle before scanning
    scsi 8:0:0:0: Direct-Access     A-DATA   USB Flash Drive  0.00 PQ: 0 ANSI: 2
    sd 8:0:0:0: [sdc] 3948544 512-byte hardware sectors: (2.02 GB/1.88 GiB)
    sd 8:0:0:0: [sdc] Write Protect is off
    sd 8:0:0:0: [sdc] Mode Sense: 00 00 00 00
    sd 8:0:0:0: [sdc] Assuming drive cache: write through
    usb-storage: device scan complete
    sd 8:0:0:0: [sdc] Assuming drive cache: write through
     sdc: sdc1
    sd 8:0:0:0: [sdc] Attached SCSI removable disk
    

    Device 2GB tersebut terattach ke node /dev/sdc (Mungkin bisa berbeda untuk sistem lain, sesuaikan saja). Di USB flash tersebut hanya terdapat 1 partisi, yaitu /dev/sdc1. Node /dev/sdc ini yang kemudian akan digunakan selama instalasi.

  4. Copy-kan semua file image (IMG) ke USB flashdisk dengan dd (block-level copy utility). Utility ini akan mengkopikan semua block (termasuk partisinya) ke USB flash.

    root:~/ZeroShell-Devel> dd if=ZeroShell-1.0.beta12-CompactFlash-IDE-USB-SATA-1GB.img of=/dev/sdc
    1981728+0 records in
    1981728+0 records out
    1014644736 bytes (1.0 GB) copied, 799.746 s, 1.3 MB/s
    root:~/ZeroShell-Devel>
    

    Image 1GB telah dikopikan ke /dev/sdc. Cukup lama juga proses pengkopian ini di sistem saya (800 detik), jadi harus sabar yah.

  5. Kita lihat apa yang dibuat oleh dd ini dengan menggunakan fdisk.
    root:~/ZeroShell-Devel> fdisk /dev/sdc
    
    The number of cylinders for this disk is set to 2022.
    There is nothing wrong with that, but this is larger than 1024,
    and could in certain setups cause problems with:
    1) software that runs at boot time (e.g., old versions of LILO)
    2) booting and partitioning software from other OSs
       (e.g., DOS FDISK, OS/2 FDISK)
    
    Command (m for help): p
    
    Disk /dev/sdc: 2021 MB, 2021654528 bytes
    32 heads, 61 sectors/track, 2022 cylinders
    Units = cylinders of 1952 * 512 = 999424 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1          14       13633+  83  Linux
    /dev/sdc2              15         175      157136   83  Linux
    /dev/sdc3             176        1015      819840   83  Linux
    
    Command (m for help): q
    

    Warning bisa diabaikan saja. Terlihat bahwa dengan command ‘p’ dari konsole fdisk, Zeroshell membutuhkan 3 partisi Linux (id:0x83) dengan total 1 GB. Kita coba lihat apa iisi ketiga partisi tersebut. Pastikan direktori /mnt/sdc1, /mnt/sdc2 dan /mnt/sdc3 ada, kalau belum buat dengan mkdir.

    root:~/ZeroShell-Devel> mount /dev/sdc1 /mnt/sdc1/
    root:~/ZeroShell-Devel> ls /mnt/sdc1/
    grub  initrd.gz  lost+found  vmlinuz
    root:~/ZeroShell-Devel> mount /dev/sdc2 /mnt/sdc2/
    root:~/ZeroShell-Devel> ls /mnt/sdc2 
    isolinux  modules  rr_moved  sbin  usr
    root:~/ZeroShell-Devel> mount /dev/sdc3 /mnt/sdc3/
    root:~/ZeroShell-Devel> ls /mnt/sdc3/
    _DB.001  lost+found  swap-file
    root:~/ZeroShell-Devel> mount
    .... snip
    /dev/sdc1 on /mnt/sdc1 type ext3 (rw,relatime,errors=continue,data=writeback)
    /dev/sdc2 on /mnt/sdc2 type iso9660 (ro,relatime)
    /dev/sdc3 on /mnt/sdc3 type ext3 (rw,relatime,errors=continue,data=writeback)
    

    Ringkasnya, ketiga partisi tersebut adalah sebagai berikut:

    1. Partisi pertama: /dev/sdc1 digunakan untuk menyimpan konfigurasi bootloader grub, image kernel vmlinuz dan initial ramdisk initrd.gz. Tipe filesystemnya adalah ext3 dengan mode rw (readable, writeable)
    2. Partisi kedua: /dev/sdc2 digunakan di antaranya untuk menyimpan root filesystem (di direktori isolinux) termasuk image isolinux untuk live-CD. Saya pikir selain file rootfs, file lain di direktori isolinux ini bisa didelete saja. Di partisi tersebut juga ada direktori /modules untuk menyimpan modul-modul kernel. Tipe filesystem di partisi ini adalah iso9660 dengan mode ro (readonly). Perlu trik untuk memodifikasi partisi ini.
    3. Partisi ketiga: /dev/sdc3 digunakan untuk menyimpan file-file modifikasi dari root filesystem. Modifikasi konfigurasi, log system (termasuk transaksi router) dan update software akan tersimpan di partisi ini dengan smart di direktori /_DB.001. Ini salah satu kelebihan Zeroshell. Tipe filesystem di partisi ini adalah ext3 dengan mode rw (readable, writeable)

    Bagaimana kalau kapasitas storage lebih dari 1 GB, misalnya 2 GB? Untuk kasus 2GB, terdapat 1GB yang belum teralokasikan. Yang lebih baik dilakukan adalah memperbesar ukuran partisi 3 (/dev/sdc3) dengan program partisi (misalnya gparted di Linux), karena partisi inilah yang akan menyimpan file-file LOG dari sistem, sehingga semakin besar kapasitasnya semakin banyak log yang bisa tersimpan.

  6. Mengaktifkan partisi pertama untuk boot (/dev/sdc1). Dari langkah 5 di atas, tidak tidak ada partisi yang ‘bootable’, sehingga sebelum kita set bootable flag ke salah satu partisi, USB flashdisk tidak dapat digunakan untuk booting. Partisi /dev/sdc1 perlu diset ‘bootable’ dengan menggunakan command ‘a’ dari konsole fdisk dan memilih partisi 1.
    root:~/ZeroShell-Devel>  fdisk /dev/sdc
    
    Command (m for help): a
    Partition number (1-4): 1
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

    Selanjutnya USB disk dapat digunakan untuk menjalankan Zeroshell.
    Note
    : Pastikan konfigurasi BIOS di motherboard mensupport booting dari USB device dan urutan booting dimulai dengan device USB ini.

Update Kernel Image vmlinuz dan Initial Ramdisk initrd.gz di Partisi 1

Partisi 1 dari Zeroshell berisi file vmlinuz dan initrd.gz. Jadi, tujuan dari bab ini adalah untuk mengupdate kedua file ini. Update vmlinuz dan initrd.gz ini diperlukan jika ada device (misalnya modem usb GPRS/EVDO/HSDPA, ethernet card, wifi-card) yang tidak dikenali oleh driver kernel yang ada di Zeroshell standar (kernel versi 2.6.25.20) . Jika, semuanya deteksi semua peripheral yang diinginkan telah dilakukan dengan baik oleh driver kernel ini, proses update ini tidak diperlukan lagi.

Update image kernel ke versi baru (dalam hal ini 2.6.31.4, bisa juga linux versi yang terbaru 2.6.34) akan berimplikasi ke modifikasi initial ramdisk initrd.gz (di partisi 1 juga) dan direktori /modules di root filesystem (partisi 2), karena modul dan image kernel harus sama versinya (saya belum mencoba jika kernel dikonfigurasi dengan CONFIG_MODVERSIONS=y, apakah versi yang beda antara vmlinuz dan modulenya dapat dijalankan dengan baik, module dapat diload di kernel linux dengan versi berbeda).

Berikut dijabarkan langkah-langkah dan script otomatis yang digunakan untuk mengupdate vmlinuz dan initrd.gz, sedangkan update direktori /modules di partisi 2 dipaparkan di bab berikutnya. Direktori zeroshell-devel digunakan sebagai direktori root dari proyek. Pengembangan dilakukan di Puppy Linux 4.31.

  1. Kompilasi Kernel
    1. Download kernel source: linux-2.6.31.4.tar.bz2. Bisa menggunakan wget maupun program downloader lainnya. File tarball tersimpan di direktori proyek.
      root:~/ZeroShell-Devel>  wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.4.tar.bz2
      
    2. Ekstrak kernel tarball dengan menggunakan utility tar:
      root:~/ZeroShell-Devel> tar xvf linux-2.6.31.4.tar.bz2
      

      Option xvf digunakan untuk mengekstrak, menambah verbosity dan menunjukkan file yang akan diekstrak. Tipe kompressor baik bzip2 maupun gzip secara otomatis akan dideteksi oleh program tar ini. Source tarball tersebut akan terekstraks ke direktori linux-2.6.31.4.

    3. Berikan suffix (akhiran, misalnya -sz) ke direktori linux-2.6.31.4 sehingga menjadi linux-2.6.31.4-sz. Ini dilakukan untuk membedakan linux vanilla jika ada patch yang perlu dilakukan ke source kernel.
      root:~/ZeroShell-Devel> mv linux-2.6.31.4 linux-2.6.31.4-sz
      
      
      
    4. Yang perlu diketahui sebelum mengkompile kernel adalah konfigurasi kernel, driver mana yang akan diinstall di image kernel, mana yang terinstall sebagai modul dan driver yang tidak terinstall. Konfigurasi ini harus mengacu ke konfigurasi kernel dari Zeroshell. Untuk mendapatkannya, Zeroshell perlu dijalankan terlebih dahulu dan kita masuk ke shell promptnya dengan memilih perintah 'S Shell prompt '. Dengan asumsi kita meload Zeroshell dari USB disk yang dibuat di bab 1, snapshotnya adalah sebagai berikut:
      Type exit or Ctrl+D to return to main menu.
      
      root@zeroshell root> cp /proc/config.gz /DB
      root@zeroshell root> exit
      

      Direktori /DB adalah mounting point partisi 3 dari USB disk yang writeable. File config.gz adalah konfigurasi kernel yang akan digunakan untuk kompilasi kernel.
      Shutdown Zeroshell dan file konfigurasi kernel tersebut telah ada di partisi 3 dan siap digunakan.

    5. Kembali ke direktori proyek. Ekstrak file config.gz tersebut sebagai .config di direktori kernel source:
      root:~/ZeroShell-Devel> gunzip -dc /mnt/sdc3/config.gz > linux-2.6.31.4-sz/.config
      
    6. Konfigurasi kernel:
      root:~/ZeroShell-Devel> cd  linux-2.6.31.4-sz
      root:~/ZeroShell-Devel/linux-2.6.31.4-sz> make menuconfig
      
    7. Pilih default konfigurasinya jika ada pertanyaan. Tambahkan device driver yang diperlukan dengan memilih modul yang bersesuaian. Setelah ini keluar dari menu konfigurasi dan siap untuk mengkompile kernel.

    8. Kompile kernel dan install modul kernel:
      root:~/ZeroShell-Devel/linux-2.6.31.4-sz> make all
      root:~/ZeroShell-Devel/linux-2.6.31.4-sz> mkdir -p modules
      root:~/ZeroShell-Devel/linux-2.6.31.4-sz> make INSTALL_MOD_PATH=modules/ modules_install
      root:~/ZeroShell-Devel/linux-2.6.31.4-sz> cd ..
      

      Perintah make all ini akan mengkompile image kernel vmlinux (unkompress), modules kernel dan image kernel bzImage (bzImage). Kernel bzImage yang akan digunakan. Modul-modul kernel akan terinstall di direktori modules/, dan bzImage dapat ditemukan di arch/x86/boot/bzImage. Dari sini, langkah selanjutnya dapat dilakukan.

  2. Mengupdate initrd.gz

    1. Buat direktori sz-boot di direktori proyek. Kopikan semua file dari partisi 1 USB ke direktori ini, terutama initrd.gz.
      root:~/ZeroShell-Devel> mkdir -p sz-boot
      
    2. Saya telah membuat script update_initrd_sz.sh. Download dan jalankan script ini dari direktori proyek.
      root:~/ZeroShell-Devel> chmod +x update_initrd_sz.sh
      root:~/ZeroShell-Devel> ./update_initrd_sz.sh
      

      Isi script tersebut adalah:

      #!/bin/sh
      # Update Zeroshell initrd.gz
      #
      # 29/10/10: Also update kernel vmlinuz
      #
      # Copyright (c) 2009, eko didik widianto
      # All rights reserved.
      #
      # Released under BSD license 
      #  (see http://www.opensource.org/licenses/bsd-license.php)
      #
      show_error() {
      	echo "$1"	
      	exit
      }
      
      LINUX_DIR=linux-2.6.31.4-sz
      BOOT_DIR=sz-boot
      MOD_SRC_DIR=$LINUX_DIR/modules
      LINUX_IMAGE=$LINUX_DIR/arch/i386/boot/bzImage
      INITRD_TARGET_DIR=/tmp/initrd-sz
      
      [ -d $BOOT_DIR ] ||  show_error "$BOOT_DIR not found."
      [ -d $MOD_SRC_DIR ] ||  show_error "$MOD_SRC_DIR not found."
      rm -Rvf /tmp/initrd* # Clear first
      mkdir  $INITRD_TARGET_DIR
      
      LOOP_MOD='loop.ko'
      LOOP_TARGET_DIR=lib/
      
      SATA_CHIP_MOD='sata_inic162x.ko sata_mv.ko sata_nv.ko sata_promise.ko sata_qstor.ko sata_sil24.ko sata_sil.ko sata_sis.ko sata_svw.ko sata_sx4.ko sata_uli.ko sata_via.ko sata_vsc.ko'
      SATA_CHIP_TARGET_DIR=lib/sata/chipsets/
      
      SATA_DEPS_MOD='dock.ko libata.ko pata_sis.ko'
      SATA_DEPS_TARGET_DIR=lib/sata/deps/
      
      USB_HOST_MOD='ehci-hcd.ko isp116x-hcd.ko ohci-hcd.ko r8a66597-hcd.ko sl811-hcd.ko u132-hcd.ko uhci-hcd.ko'
      USB_HOST_TARGET_DIR=lib/usb/host/
      
      USB_STORAGE_MOD='sr_mod.ko usb-storage.ko'
      USB_STORAGE_TARGET_DIR=lib/usb/storage/
      
      USB_DEPS_MOD='ftdi-elan.ko ssb.ko'
      USB_DEPS_TARGET_DIR=lib/usb/deps/
      
      # Mount initrd.gz
      [ -f $BOOT_DIR/initrd.gz ] || show_error "$BOOT_DIR/initrd.gz not found."
      cp $BOOT_DIR/initrd.gz /tmp/
      gunzip /tmp/initrd.gz
      
      # Check if already mounted
      mount | grep -qe "$INITRD_TARGET_DIR" && umount $INITRD_TARGET_DIR
      mount /tmp/initrd -o loop $INITRD_TARGET_DIR
      
      #Copy to target
      # target has 'non-standard' directory location
      copy_target(){
      	for file in $1; do
      		SRC_MOD="`find $MOD_SRC_DIR -type f -iname $file`"
      		if [ "n$SRC_MOD" == "n" ]; then
      		 	echo "Warning: $file doesn't exist."
      		 	continue # just give a warning
      		else
      			cp -af $SRC_MOD $INITRD_TARGET_DIR/$2	
      		fi		
      	done
      	}
      
      echo  "Copy loop module..."
      copy_target $LOOP_MOD $LOOP_TARGET_DIR
      echo
      
      echo  "Copy sata modules..."
      copy_target "$SATA_CHIP_MOD" $SATA_CHIP_TARGET_DIR
      copy_target "$SATA_DEPS_MOD" $SATA_DEPS_TARGET_DIR
      echo
      
      echo  "Copy usb modules..."
      copy_target "$USB_HOST_MOD" $USB_HOST_TARGET_DIR
      copy_target "$USB_STORAGE_MOD" $USB_STORAGE_TARGET_DIR
      copy_target "$USB_DEPS_MOD" $USB_DEPS_TARGET_DIR
      
      # Umount initrd & create initrd.gz
      mount | grep -qe "$INITRD_TARGET_DIR" && umount $INITRD_TARGET_DIR
      gzip /tmp/initrd # compress it
      cp -f /tmp/initrd.gz $BOOT_DIR/
      rm -Rf /tmp/initrd*
      
      echo "Updating  vmlinuz.."
      cp -f $LINUX_IMAGE $BOOT_DIR/vmlinuz
      echo "Done."
      

      Script tersebut pada intinya adalah 1) mengekstrak file initrd.gz lama, 2) mounting initrd ke device loop, 3) mengkopikan module-module kernel hasil update yang diperlukan ke device loop, 4) unmounting, 5) Kompress dengan gzip dan simpan kembali ke direktori sz-boot dan 6) mengkopikan bzImage menjadi vmlinuz.

    3. Mount partisi 1 usb flash (dalam kasus ini ke /mnt/sdc1) jika belum termounting dan kopikan file initrd.gz dan vmlinuz ke direktori ini

      root:~/ZeroShell-Devel> mount /dev/sdc1 /mnt/sdc1/
      root:~/ZeroShell-Devel> cp -af sz-boot/initrd.gz /mnt/sdc1/
      root:~/ZeroShell-Devel> cp -af sz-boot/vmlinuz /mnt/sdc1/
      

      Image kernel dan initrd.gz telah terupdate. Berikutnya adalah mengupdate root filesystem yang mempunyai tipe filesystem iso9660 (ro, read-only).

Mengupdate Root Filesystem

Root filesystem terdapat di partisi 2 USB dengan tipe partisi iso9660. Isi dari partisi tersebut adalah sebagai berikut:

root:~/ZeroShell-Devel> mount /dev/sdc2 /mnt/sdc2/
root:~/ZeroShell-Devel> ls /mnt/sdc2
isolinux  modules  rr_moved  sbin  usr

Dari direktori isolinux, file yang diperlukan hanya isolinux/rootfs. File lainnya saya pikir tidak diperlukan jika booting dari USB/HDD. Di direktori modules tersimpan module-module kernel yang dapat diload secara modular jika diperlukan oleh sistem dengan utility modprobe. Direktori sbin dan usr berisi program-program biner dan library yang diperlukan.

Update root filesystem ini diperlukan jika:

  1. kernel telah diupdate. Modul-modul kernel di direktori modules juga harus diupdate jika kita mengupdate kernel; atau
  2. paket program harus diupgrade. Kadangkala perlu untuk mengupgrade software yang ada sistem, misalnya mengupgrade usb_modeswitch untuk mensupport modem USB EVDO ZTE AC8710 yang terbundled dengan Smart atau bahkan memodifikasi cgi script di direktori /root/kerbynet.cgi/scripts/

Di Zeroshell-1.0-Beta12 ini, akses internet CDMA dengan menggunakan USB EVDO tidak bisa dilakukan. Saya belum tahu apakah di Zeroshell versi terbaru ini sudah disupport. Jadi dengan asumsi ini, root filesystem akan diupdate.

  1. Buat direktori sz-rootfs untuk menyimpan file yang akan dituliskan ke partisi 2. Kopikan file-file original dari /mnt/sdc2 ke direktori ini.
    root:~/ZeroShell-Devel> mkdir sz-rootfs
    root:~/ZeroShell-Devel> cp -avf /mnt/sdc2/* sz-rootfs/
    
  2. Populate file sz-rootfs/isolinux/rootfs yang terkompress dengan gzip. File ini kemudian yang akan kita modifikasi. Buat direktori sz-rootfs-img untuk menyimpan file/direktori yang perlu dimodifikasi dan akan digunakan untuk membuat file isolinux/rootfs yang baru.
    root:~/ZeroShell-Devel> gzip -dc sz-rootfs/isolinux/rootfs > /tmp/rootfs
    root:~/ZeroShell-Devel> mkdir -p sz-rootfs-img /tmp/sz-rootfs-img
    root:~/ZeroShell-Devel> mount /tmp/rootfs -o loop /tmp/sz-rootfs-img
    root:~/ZeroShell-Devel> cp -avf /tmp/sz-rootfs-img/* sz-rootfs-img/
    root:~/ZeroShell-Devel> umount /tmp/rootfs
    

    Dengan perintah di atas, direktori sz-rootfs-img telah berisi root filesystem dari file sz-rootfs/isolinux/rootfs.

  3. Ruang edit ada di direktori sz-rootfs-img. Dalam hal ini, modifikasi dilakukan terhadap direktori ini.
    Misalnya, mengupdate versi usb_modeswitch untuk support modem-modem combo 3G dan EVDO, yang perlu dilakukan adalah mengkompile paket usb_modeswitch

    1. Download tarball usb-modeswitch-1.1.2 dan ekstrak.
      root:~/ZeroShell-Devel> wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.1.2.tar.bz2
      root:~/ZeroShell-Devel> tar xvf usb-modeswitch-1.1.2.tar.bz2
      
    2. Kompile paket:
      root:~/ZeroShell-Devel> cd usb-modeswitch-1.1.2
      root:~/ZeroShell-Devel/usb-modeswitch-1.1.2> make
      

      Kompilasi menghasilkan file biner usb_modeswitch yang ada di root direktori paket.

    3. Install paket secara manual. File/direktori yang diperlukan biner usb_modeswitch, konfigurasi usb_modeswitch.conf, udev rules dan file informasi setup. Perhatikan target direktorinya yang mengikuti struktur dari Zeroshell.
      root:~/ZeroShell-Devel/usb-modeswitch-1.1.2> cp -af usb_modeswitch /mnt/sdc2/usr/bin/
      root:~/ZeroShell-Devel/usb-modeswitch-1.1.2> ln -sf ../bin/usb_modeswitch /mnt/sdc2/usr/sbin/
      root:~/ZeroShell-Devel/usb-modeswitch-1.1.2> cp -af usb_modeswitch.conf ../sz-rootfs-img/etc/
      root:~/ZeroShell-Devel/usb-modeswitch-1.1.2> cp -af *usb_modeswitch.rules ../sz-rootfs-img/etc/udev/rules.d/
      root:~/ZeroShell-Devel/usb-modeswitch-1.1.2> cp -af usb_modeswitch.d ../sz-rootfs-img/etc/
      root:~/ZeroShell-Devel/usb-modeswitch-1.1.2> cd ..
      

      Konfigurasi tersebut membuat sistem responsif (dengan udev) saat modem USB dicolokkan atau dicabut.

    Berikutnya, barangkali ingin memodifikasi script yang ada di direktori sz-rootfs-img/root/kerbynet.cgi/scripts/. Contohnya script 3Gconnect agar bisa digunakan untuk akses CDMA EVDO. Berikut modifikasi script yang saya lakukan:

    if [ -n "$APN" ] ; then #Replace with  chap username (30/10)
      #APN="\"OK\" 'AT+CGDCONT=1,\"IP\",\"$APN\",\"\",0,0'"  
      APNSET="name \"$APN\""
      grep -qe "$APN" /tmp/ppp-secrets || echo "$APN * $APN" >> /tmp/ppp-secrets
    fi
    if [ "$DEFAULTROUTE" == yes ] ; then
      DEFAULTROUTE=defaultroute
    else
      DEFAULTROUTE=""
    fi
    
    cat > /tmp/$PPP.3G << EOF
    /udev/$TTY
    460800
    debug
    lock
    crtscts
    noauth
    $DEFAULTROUTE
    $APNSET
    persist
    asyncmap 0
    lcp-echo-failure 100000000000
    noipx
    connect "$SCRIPTS/chat.sh"
    unit $UNIT
    EOF
    cat > /tmp/$PPP.chat << EOF
    ABORT 'NO CARRIER' ABORT 'ERROR' ABORT 'NO DIALTONE' ABORT
    'BUSY' ABORT 'NO ANSWER'
    '' ATZ
    OK-AT-OK "ATDT$DIAL"
    CONNECT \d\c
    EOF
    

    Note: Modifikasi tersebut membuat akses 3G GSM tidak dapat dilakukan. Ini hanya satu contoh saja. Anda bebas mengembangkan/memodifikasi script ini agar support keduanya baik 3G GSM maupun EVDO. Saya belum sempat je.

  4. Setelah modifikasi telah selesai dilakukan berikutnya adalah membuat file rootfs dari direktori sz-rootfs-img tersebut. Jalankan script update_rootfs_isolinux.sh:

    root:~/ZeroShell-Devel> chmod +x update_rootfs_isolinux.sh
    root:~/ZeroShell-Devel> ./update_rootfs_isolinux.sh
    

    Script tersebut akan mengkopikan file rootfs ke direktori sz-rootfs/isolinux/. Isi scriptnya adalah:

    #!/bin/sh
    # update_rootfs_isolinux.sh
    # Update isolinux/rootfs image
    #
    # Copyright (c) 2009, eko didik widianto
    # All rights reserved.
    #
    # Released under BSD license 
    #  (see http://www.opensource.org/licenses/bsd-license.php)
    #
    ROOTFS_DIR=sz-rootfs
    ROOTFS_IMG_DIR=sz-rootfs-img
    LOOP_DEV=/dev/loop2
    
    show_error () {
    	echo "$1"
    	exit	
    }
    rm -Rf /tmp/rootfs* # Clear first
    mkdir -p /tmp/rootfs-img-sz
    
    losetup -f | grep -qe "$LOOP_DEV" || show_error "$LOOP_DEV already assigned. Disassociate it or use another loop device"
    
    # Create rootfs
    # type=ext2, size(1k)=31729 or 32MB
    echo "Creating rootfs"
    dd if=/dev/zero of=/tmp/rootfs bs=1k count=31729
    losetup $LOOP_DEV /tmp/rootfs
    mkfs -t ext2 $LOOP_DEV 
    mount /tmp/rootfs -o loop /tmp/rootfs-img-sz
    
    # Copy updated rootfs
    echo "Updating $ROOTFS_DIR/isolinux/rootfs "
    cp -af $ROOTFS_IMG_DIR/* /tmp/rootfs-img-sz
    umount /tmp/rootfs-img-sz
    losetup -d $LOOP_DEV # disassociate dev/loop
    gzip /tmp/rootfs
    cp -f /tmp/rootfs.gz $ROOTFS_DIR/isolinux/rootfs  
    
    echo "Done."
    echo "Run ./create_isofs.sh to update zeroshell rootfs"
    
  5. Langkah terakhir adalah mengkopikan direktori sz-rootfs ke partisi 2 flashdisk. Seperti disebutkan sebelumnya, partisi ini adalah ro (readonly) dengan tipe filesystem iso9660. Perlu trik untuk mengkopikan files ke partisi ini.

    1. Buat file iso dari direktori sz-rootfs. Jalankan script create_isofs.sh.
      root:~/ZeroShell-Devel> chmod +x create_isofs.sh
      root:~/ZeroShell-Devel> ./create_isofs.sh
      

      File sz-rootfs.iso akan dihasilkan.
      Isi script adalah sebagai berikut:

      #!/bin/sh
      # create_isofs.sh
      # Creating sz-rootfs.iso
      # Copyright (c) 2009, eko didik widianto
      # All rights reserved.
      #
      # Released under BSD license 
      #  (see http://www.opensource.org/licenses/bsd-license.php)
      #
      #
      
      ROOTFS_DIR=sz-rootfs
      BASEDIR="`pwd`"
      ROOTFS_FILE=$BASEDIR/sz-rootfs.iso
      
      show_error() {
      	echo "$1"	
      	exit
      }
      
      [ -d $ROOTFS_DIR ] ||  show_error "$ROOTFS_DIR not found."
      
      cd $ROOTFS_DIR/
      mkisofs -J -r -U -o $ROOTFS_FILE ./
      
      cd $BASEDIR
      echo "Done."
      echo "You can then copy iso image to usb flash #2"
      echo "using: > dd if=$ROOTFS_FILE of=/dev/sdd2"
      
    2. Copikan file sz-rootfs.iso ke partisi 2:

      root:~/ZeroShell-Devel> umount /dev/sdc2
      root:~/ZeroShell-Devel> dd if=sz-rootfs.iso of=/dev/sdc2
      

Done. Semua langkah dan trik untuk menginstall dan mengupdate (dan selanjutnya mungkin membuat reproduced distro/retro) telah dijabarkan. Untuk setiap perintah konsole, perhatikanlah current directory dimana perintah tersebut dijalankan.

Selamat bereksplorasi!

5 Komentar to “Instalasi dan Update Zeroshell (Retro)”

  1. adaouw pusing…
    btw zeroshell bisa bandwith managemen g sih ? soalnya mo bikin warnet kecil2an modemnya pk smart evdo zte ac 2726

  2. pak, bisa pesen bikinkan zeroshell yg sudah ready untuk semua operator pak,jadi sudah tertanam settingan2 untuk semua operator tanah air
    Saya bermaksud pengin punya satu zeroshell untuk 4 modem3G dengan 4 operator berbeda, supaya bisa menggabungkan keempat sumber internet yg sudah dijegal sama densus 64,jadi biar outputnya tetap kencang gitu pak,..

  3. maaf saya nubi ..mohon pencerahan masalah instalasi devel… saya mengikuti tutorial anda tapi lesulitan dalam instalasi gcc dll… mohon bantuanya… terimakasih🙂

  4. Mohon tutorialnya di buat lebih ringkas lagi pak, agar si nubiw kyk aku ini bisa mengerti dan melogika nya. Suwun

  5. Pesen yang Bisa Buat OPRATOR INDO ntar ada duitnya…

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: