seb annotate seb @ rev 27

Small fix to seb and use default prebuilt kernel
author Christophe Lincoln <pankso@slitaz.org>
date Mon Mar 13 19:56:17 2017 +0100 (2017-03-13)
parents 33333de28e73
children ad9ff08f754a
rev   line source
pankso@7 1 #!/bin/sh
pankso@7 2 #
pankso@7 3 # SEB - SliTaz Embedded Builder - Back to the roots with SliTaz in
pankso@7 4 # only a few MB. Please read the README file for more information.
pankso@7 5 #
pankso@7 6 # Copyright (C) 2017 SliTaz GNU/Linux - BSD License
pankso@7 7 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@7 8 #
pankso@7 9 . /lib/libtaz.sh
pankso@7 10 unset status get_cols separator colorize boldify
pankso@7 11
pankso@7 12 # --iso --work --linux can be set in config file or from cmdline
pankso@7 13 [ -f "build.conf" ] && . build.conf
pankso@7 14
pankso@7 15 rootfs="$work/rootfs"
pankso@7 16 rootiso="$work/rootiso"
pankso@7 17 sebfs="$work/sebfs"
pankso@7 18 sebpkgs="$work/sebpkgs"
pankso@7 19 cache="$work/cache"
pankso@7 20 vdisk="$work/sebhome.img"
pankso@7 21 qemu_opts="-m 512"
pankso@7 22
pankso@7 23 tools="/usr/share/seb/tools"
pankso@7 24 initfs="/usr/share/seb/initfs"
pankso@7 25 packages="/usr/share/seb/packages"
pankso@7 26
pankso@27 27 [ "$work" ] || work="$(pwd)"
pankso@27 28 [ "$iso" ] || iso="seb-os-$(date '+%Y%m%d').iso"
pankso@27 29 [ "$linux" ] || linux="$tools/bzImage-4.9.13"
pankso@27 30 [ "$port" ] || port="8940"
pankso@27 31
pankso@7 32 # Working from source tree
pankso@7 33 [ -d "tools" ] && tools="$(pwd)/tools"
pankso@7 34 [ -d "initfs" ] && initfs="$(pwd)/initfs"
pankso@7 35 [ -d "packages" ] && packages="$(pwd)/packages"
pankso@7 36
pankso@7 37 # Source libseb.sh (overwrite libtaz.sh function)
pankso@7 38 if [ -f "$PWD/libseb.sh" ]; then
pankso@7 39 libseb="$PWD/libseb.sh"
pankso@7 40 . ${libseb}
pankso@7 41 else
pankso@7 42 if ! . /lib/libseb.sh; then
pankso@7 43 echo "Can't source any: libseb.sh"; exit 1
pankso@7 44 fi
pankso@7 45 libseb="/lib/libseb.sh"
pankso@7 46 fi
pankso@7 47 debug "work=$work"
pankso@7 48
pankso@7 49 #
pankso@7 50 # Functions
pankso@7 51 #
pankso@7 52
pankso@7 53 help() {
pankso@7 54 cat << EOT
pankso@7 55
pankso@7 56 $(colorize 35 "SliTaz Embedded Builder")
pankso@7 57
pankso@7 58 $(boldify "Usage:") $(basename $0) [command] [--opts]
paul@14 59 $(boldify "Manual:") man seb
pankso@7 60
pankso@7 61 $(boldify "Commands:")
pankso@7 62 -h help Display this short built-in help
paul@14 63 -i init Create base files to customize
pankso@7 64 -b build Generate a distribution (initramfs & iso)
pankso@7 65 -p packages Handle packages: --list --add
pankso@7 66 -g geniso Re-generate the ISO image
pankso@7 67 -c clean Remove all SEB generated files
pankso@7 68 -l lsfs List all files in rootfs (-type f)
pankso@7 69 -v vdisk Create, mount or unmount a virtual disk
pankso@7 70 -e emu Emulate ISO image with Qemu
pankso@24 71 -w web Start seb graphical web interface
pankso@7 72 env Print current seb environment
pankso@7 73
pankso@7 74 $(boldify "Options:")
pankso@7 75 --work= Path to build directory
pankso@7 76 --iso= Specify SliTaz Embedded ISO image name
pankso@7 77 --linux= Path to a custom Linux kernel
pankso@24 78 --port= Httpd port for the web interface
pankso@7 79 --all Clean all files including sebfs
pankso@7 80 --emu Emulate ISO image after build
pankso@7 81 --check Check a virtual disk image
pankso@7 82
pankso@7 83 EOT
pankso@7 84 }
pankso@7 85
paul@14 86 # Initial files which can be modified via sebfs/
pankso@7 87 init() {
pankso@7 88 mkdir -p ${sebfs} ${sebpkgs}
pankso@7 89 cp -rf ${initfs}/* ${sebfs}
pankso@7 90 }
pankso@7 91
pankso@7 92 geniso() {
pankso@7 93 echo -n "Generating ISO image: ${iso}"
pankso@7 94 cd ${work}
pankso@7 95 genisoimage -R -o ${iso} \
pankso@7 96 -b boot/isolinux/isolinux.bin \
pankso@7 97 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
pankso@7 98 -V "SliTaz Embedded" -input-charset iso8859-1 \
pankso@7 99 -boot-info-table rootiso 2> /dev/null; check
pankso@7 100 echo -n "Checking ISO image size..."
pankso@7 101 info 035 $(du -mhs $iso | awk '{print $1}')
pankso@7 102 }
pankso@7 103
pankso@7 104 emulate() {
pankso@7 105 if [ -x "/usr/bin/qemu" ]; then
pankso@7 106 echo "qemu $qemu_opts -cdrom $1"
pankso@7 107 if [ -f "$vdisk" ]; then
pankso@7 108 hda="-hda $vdisk"
pankso@7 109 umount ${vdisk} 2>/dev/null
pankso@7 110 fi
pankso@7 111 qemu ${qemu_opts} ${hda} -cdrom ${1}
pankso@7 112 else
pankso@7 113 echo $(echo "Please install:") $(boldify qemu); exit 0
pankso@7 114 fi
pankso@7 115 }
pankso@7 116
paul@14 117 # Install files in the rootfs with same path as on the build host
pankso@7 118 # Usage: install_files "/file/1" "/lib/lib.so*" "/file/N"
pankso@7 119 install_files() {
pankso@7 120 for file in ${@} ; do
pankso@7 121 path=$(dirname $file)
pankso@19 122 if [ ! -d "${rootfs}${path}" ]; then
pankso@19 123 mkdir -p ${rootfs}${path}
pankso@19 124 fi
pankso@7 125 echo -n "Installing: $file"
pankso@19 126 cp -a ${file} ${rootfs}${path}; check
pankso@7 127 done
pankso@7 128 }
pankso@7 129
pankso@7 130 # Populate /dev + 'mdev -s' on boot
pankso@7 131 create_dev_files() {
pankso@7 132 echo -n "Populating: /dev"
pankso@7 133 mkdir -p ${rootfs}/dev/pts ${rootfs}/dev/shm
pankso@7 134 cd ${rootfs}/dev
pankso@7 135 mknod -m 0666 null c 1 3
pankso@7 136 mknod -m 0622 console c 5 1
pankso@7 137 mknod -m 0666 tty c 5 0
pankso@7 138 for i in 0 1 2; do
pankso@7 139 mknod -m 0666 tty$i c 4 $i
pankso@7 140 done; check
pankso@7 141 }
pankso@7 142
paul@14 143 # Configuration files for /etc not generated by init to keep initfs/sebfs
paul@14 144 # filesystems minimal
pankso@7 145 create_etc_files() {
pankso@7 146 echo -n "Creating config files in: /etc"
pankso@7 147 (echo "127.0.0.1 localhost seb" > ${rootfs}/etc/hosts
pankso@7 148 echo "localnet 127.0.0.1" > ${rootfs}/etc/networks
pankso@7 149 echo "order hosts,bind" > ${rootfs}/etc/host.conf
pankso@7 150 echo "multi on" >> ${rootfs}/etc/host.conf
pankso@7 151 # Users & passwd
pankso@7 152 echo "root:x:0:0:root:/root:/bin/sh" > ${rootfs}/etc/passwd
pankso@7 153 echo "root::13525:0:99999:7:::" > ${rootfs}/etc/shadow
pankso@7 154 cat > ${rootfs}/etc/group << EOT
pankso@7 155 root:x:0:
pankso@7 156 www:x:80:
pankso@7 157 EOT
pankso@7 158 cat > ${rootfs}/etc/gshadow << EOT
pankso@7 159 root:*::
pankso@7 160 www:!::
pankso@7 161 EOT
pankso@7 162 chmod 640 ${rootfs}/etc/*shadow)
pankso@7 163 cat > ${rootfs}/etc/nsswitch.conf << EOT
pankso@7 164 # /etc/nsswitch.conf: GNU Name Service Switch config.
pankso@7 165 #
pankso@7 166
pankso@7 167 passwd: files
pankso@7 168 group: files
pankso@7 169 shadow: files
pankso@7 170
pankso@7 171 hosts: files dns
pankso@7 172 networks: files
pankso@7 173 EOT
pankso@7 174 check
pankso@18 175 mkdir -p ${rootfs}/etc/daemons
pankso@7 176 }
pankso@7 177
pankso@7 178 build() {
pankso@7 179 title "Starting SliTaz Embedded builder"
pankso@7 180
pankso@7 181 # Build environment
pankso@7 182 rm -rf ${rootfs} ${rootiso}
pankso@7 183 mkdir -p ${rootfs} ${rootiso}/boot/isolinux
pankso@7 184
pankso@7 185 # FSH Tree
pankso@7 186 echo -n "Populating: filesystem"
pankso@7 187 for d in bin dev etc lib root run home proc media sbin sys \
pankso@10 188 usr/bin usr/sbin usr/share var/log var/cache var/lib var/run
pankso@7 189 do
pankso@7 190 mkdir -p ${rootfs}/${d}
pankso@7 191 done
pankso@7 192 install -d -m 1777 ${rootfs}/tmp; check
pankso@7 193
pankso@7 194 # /etc + /dev
pankso@7 195 create_etc_files
pankso@7 196 create_dev_files
pankso@7 197
pankso@7 198 # Initial sebfs from initfs: files can be modified
pankso@7 199 [ ! -d "$sebfs" ] && init
pankso@7 200
pankso@7 201 # GNU libc before chroot /bin/busybox --install + name resolution
pankso@21 202 for lib in /lib/libm[-.]* /lib/libc[-.]*; do
pankso@7 203 echo -n "Installing: $lib"
pankso@7 204 cp -a ${lib} ${rootfs}/lib && check
pankso@7 205 done
pankso@21 206 install_files "/lib/ld-*" "/lib/libnss_dns*" "/lib/libnss_file*" \
pankso@21 207 "/lib/libresolv*" "/lib/libpthread*" "/lib/libdl*"
pankso@7 208
pankso@7 209 # Busybox applets
pankso@24 210 echo -n "Installing: busybox"
pankso@7 211 cp -a /bin/busybox ${rootfs}/bin
pankso@7 212 chroot ${rootfs} /bin/busybox --install -s; check
pankso@7 213
pankso@7 214 # Busybox configs
pankso@7 215 echo -n "Installing: busybox configs"
pankso@7 216 cp -r /usr/share/udhcpc ${rootfs}/usr/share
pankso@7 217 cp -f /etc/udhcpd.conf ${rootfs}/etc
pankso@7 218 cp -f /etc/httpd.conf ${rootfs}/etc
pankso@7 219 check
pankso@7 220
pankso@7 221 # Busybox keymap
pankso@7 222 echo -n "Dumping : keymap"
pankso@7 223 mkdir -p ${rootfs}/usr/share/kmap
pankso@7 224 dumpkmap > ${rootfs}/usr/share/kmap/default; check
pankso@7 225
pankso@7 226 # Kilo editor (20K) with syntax highlight and search (Thanks Paul :-)
pankso@24 227 echo -n "$(colorize 034 'Installing: kilo text editor')"
pankso@7 228 cp -a ${tools}/kilo ${rootfs}/usr/bin; check
pankso@7 229
pankso@7 230 # Ncursesw && dialog for sebos and additional tools
pankso@10 231 install_files "/lib/libncursesw.so*" "/lib/libtinfo.so*"
pankso@7 232 mkdir -p ${rootfs}/usr/share/terminfo/l
pankso@7 233 cp /usr/share/terminfo/l/linux ${rootfs}/usr/share/terminfo/l
pankso@10 234 install_files "/usr/bin/dialog" "/etc/dialogrc"
pankso@7 235
pankso@7 236 # /lib/libseb.sh & sebos config tool
pankso@7 237 echo -n "Installing: /lib/libseb.sh"
pankso@7 238 cp ${libseb} ${rootfs}/lib; check
pankso@24 239 echo -n "$(colorize 034 'Installing: sebos config tool')"
pankso@7 240 cp ${tools}/sebos ${rootfs}/usr/bin; check
pankso@7 241
pankso@7 242 # httphelper.sh for amazing CGI/Shell functions
pankso@7 243 mkdir -p ${rootfs}/usr/lib/slitaz
pankso@7 244 cp /usr/lib/slitaz/httphelper.sh ${rootfs}/usr/lib/slitaz
pankso@7 245
pankso@7 246 # Packages TODO: handle deps
pankso@7 247 touch ${rootfs}/var/lib/packages
pankso@7 248 for pkg in $(ls $sebpkgs); do
pankso@7 249 echo -n $(colorize 035 "Installing package:"); info 036 "$pkg"
pankso@10 250 . ${sebpkgs}/${pkg}
pankso@7 251 seb_install; echo "$pkg|$desc" >> ${rootfs}/var/lib/packages
pankso@7 252 done
pankso@7 253
pankso@7 254 # Custom files NOW
pankso@7 255 if [ -d "$sebfs" ]; then
pankso@7 256 echo -n "Copying custom files from sebfs..."
pankso@7 257 cp -rf ${sebfs}/* ${rootfs}; check
pankso@7 258 fi
pankso@7 259
pankso@7 260 # COPYING
pankso@7 261 mkdir -p ${rootfs}/usr/share/licenses
pankso@7 262 cat > ${rootfs}/usr/share/licenses/COPYING << EOT
pankso@7 263 Copyright (c) 2007-$(date '+%Y') SliTaz GNU/Linux
pankso@7 264
pankso@7 265 SliTaz is free software; you can redistribute it and/or modify it under
pankso@7 266 the terms of the GNU General Public License as published by the Free
pankso@7 267 Software Foundation; either version 3 of the License, or (at your option)
pankso@7 268 any later version.
pankso@7 269
pankso@7 270 SliTaz is distributed in the hope that it will be useful, but WITHOUT ANY
pankso@7 271 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
pankso@7 272 FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
pankso@7 273
pankso@7 274 EOT
pankso@7 275
pankso@7 276 # Build date
pankso@7 277 cat >> ${rootfs}/etc/seb.conf << EOT
pankso@7 278
pankso@7 279 # Seb-OS Build date
pankso@7 280 build_date="$(date '+%Y%m%d')"
pankso@7 281
pankso@7 282 # Seb-OS/SliTaz release string
pankso@7 283 seb_os_release="$(cat /etc/slitaz-release)"
pankso@7 284
pankso@7 285 EOT
pankso@7 286
pankso@7 287 # Security check
pankso@11 288 chown -R 0.0 ${rootfs}
pankso@7 289 chmod 0600 ${rootfs}/etc/busybox.conf
pankso@7 290
pankso@21 291 # Rootfs archive: lzma e -si -so
pankso@24 292 echo -n "$(colorize 034 'Creating the initramfs...')"
pankso@7 293 cd ${rootfs}
pankso@21 294 find . -print | cpio -o -H newc | xz -9 --format=lzma \
pankso@21 295 > ${rootiso}/boot/rootfs.xz 2>/dev/null
pankso@7 296 check
pankso@7 297
pankso@7 298 # Linux Kernel
pankso@7 299 echo -n "Copying the Linux kernel..."
pankso@22 300 cp ${linux} ${rootiso}/boot/bzImage
pankso@22 301 info 035 "$(du -mh $linux | awk '{print $1}')"
pankso@7 302
pankso@7 303 # Bootloader
pankso@7 304 echo -n "Copying the bootloader (isolinux)..."
pankso@7 305 cp ${tools}/isolinux.bin ${rootiso}/boot/isolinux; check
pankso@7 306
pankso@7 307 echo -n "Creating bootloader configs..."
pankso@7 308 cat > ${rootiso}/boot/isolinux/isolinux.cfg << EOF
pankso@7 309 display display.txt
pankso@7 310 default seb
pankso@7 311 label seb
pankso@7 312 kernel /boot/bzImage
pankso@21 313 append initrd=/boot/rootfs.xz rw root=/dev/null rdinit=/sbin/init
pankso@7 314 implicit 0
pankso@7 315 prompt 1
pankso@7 316 timeout 40
pankso@7 317 EOF
pankso@7 318 cat > ${rootiso}/boot/isolinux/display.txt << EOF
pankso@7 319
pankso@7 320 ____ _ _ _ _ ___ _
pankso@7 321 / ___| \ | | | | | / / | (_)_ __ _ ___ __
pankso@7 322 | | _| \| | | | |/ /| | | | '_ \| | | \ \/ /
pankso@7 323 | |_| | |\ | |_| / / | |___| | | | | |_| |> <
pankso@7 324 \____|_| \_|\___/_/ |_____|_|_| |_|\__,_/_/\_\
pankso@7 325
pankso@7 326 SliTaz Embedded OS - Press <ENTER> to boot
pankso@7 327 www.slitaz.org
pankso@7 328
pankso@7 329
pankso@7 330 EOF
pankso@7 331 check
pankso@7 332
pankso@7 333 echo -n "Checking rootfs size..."
pankso@7 334 info 035 $(du -mhs $rootfs | awk '{print $1}')
pankso@7 335 echo -n "Installed files in rootfs..."
pankso@7 336 info 036 $(find ${rootfs} -type f | wc -l)
pankso@7 337
pankso@7 338 # ISO image
pankso@7 339 geniso; footer
pankso@7 340 }
pankso@7 341
pankso@7 342 # Handle seb packages
pankso@7 343 packages_handler() {
pankso@7 344
paul@14 345 # List available packages
pankso@7 346 if [ ! "$1" ]; then
pankso@7 347 title "Seb packages"
pankso@7 348 for pkg in $(ls ${packages}); do
pankso@7 349 . ${packages}/${pkg}
pankso@7 350 echo -n "$(colorize 036 $pkg)"; indent 20 "$desc"
pankso@7 351 unset desc deps
pankso@7 352 done
pankso@7 353 footer && exit 0
pankso@7 354 fi
pankso@7 355
pankso@7 356 # Add package(s)
pankso@7 357 if [ "$add" ]; then
pankso@7 358 for pkg in ${@}; do
pankso@7 359 case "$pkg" in
pankso@7 360 --*) continue ;;
pankso@7 361 *)
pankso@7 362 if [ -f "$packages/$pkg" ]; then
paul@14 363 echo -n "Adding package: $pkg"
pankso@7 364 mkdir -p ${sebpkgs}
pankso@7 365 cp -f ${packages}/${pkg} ${sebpkgs}; check
pankso@7 366 else
pankso@7 367 echo "Can't find package: $package/$pkg"
pankso@7 368 fi ;;
pankso@7 369 esac
pankso@7 370 done
pankso@7 371 fi
pankso@7 372 }
pankso@7 373
pankso@7 374 # Handle vdisk: create, check, mount, umount
pankso@7 375 vdisk_hanler() {
pankso@7 376 title "SEB Virtual disk"
pankso@13 377 vsize=60
pankso@7 378 root=${vdisk%.img}
pankso@7 379
pankso@7 380 # Info or create
pankso@7 381 if [ -f "$vdisk" ]; then
pankso@7 382 echo -n "Virtual disk: $vdisk"
pankso@7 383 info 035 "$(du -mhs $vdisk | awk '{print $1}')"
pankso@7 384 else
pankso@7 385 echo "Creating virtual disk image..."
pankso@13 386 dd if=/dev/zero of=${vdisk} bs=1M count=${vsize}
pankso@24 387 colorize 034 "Creating ext3 filesystem..."
pankso@7 388 mkfs.ext3 -L "SebOShome" ${vdisk}
pankso@7 389 fi
pankso@7 390
pankso@7 391 # Check
pankso@7 392 if [ "$check" ]; then
pankso@7 393 echo "Umounting vdisk before: e2fsck -p"
pankso@7 394 umount ${vdisk} >/dev/null
pankso@7 395 e2fsck -p ${vdisk}
pankso@7 396 fi
pankso@7 397
pankso@7 398 # Action: mount/unmount
pankso@7 399 if ! mount | grep -q "^$vdisk"; then
pankso@7 400 echo -n "Mounting virtual disk..."; mkdir -p ${root}
pankso@7 401 mount -o loop -t ext3 ${vdisk} ${root}; status
pankso@7 402 else
pankso@7 403 echo -n "Unmounting virtual disk..."
pankso@7 404 umount ${vdisk}; status; sleep 1
pankso@7 405 fi; footer
pankso@7 406 }
pankso@7 407
pankso@7 408 #
pankso@7 409 # Commands
pankso@7 410 #
pankso@7 411
pankso@7 412 case "$1" in
pankso@7 413
pankso@7 414 -i|init)
pankso@7 415 rootfs="$sebfs"
pankso@7 416 echo -n "Creating files in: ${rootfs}"
pankso@7 417 init; check ;;
pankso@7 418
pankso@7 419 -b|build)
pankso@7 420 check_root
pankso@7 421 build
pankso@7 422 [ "$emu" ] && emulate ${work}/${iso} ;;
pankso@7 423
pankso@7 424 -g|geniso)
pankso@7 425 check_root
pankso@7 426 geniso ;;
pankso@7 427
pankso@7 428 -c|clean)
pankso@7 429 check_root
pankso@7 430 echo -n "Cleaning: ${work}"
pankso@7 431 [ "$all" ] && rm -rf ${sebfs} ${cache}
pankso@7 432 rm -rf ${rootfs}* ${rootiso} ${work}/*.iso
pankso@7 433 check ;;
pankso@7 434
pankso@7 435 -p|package*)
pankso@7 436 shift
pankso@7 437 packages_handler "$@" ;;
pankso@7 438
pankso@7 439 -v|vdisk)
pankso@7 440 vdisk_hanler ;;
pankso@7 441
pankso@7 442 -l|lsfs)
pankso@7 443 title "Listing: $rootfs"
pankso@7 444 cd ${rootfs}; find . -type f | sed s'/^.//'g
pankso@7 445 footer "Rootfs files: $(find . -type f | wc -l)" ;;
pankso@7 446
pankso@11 447 -e|emu)
pankso@7 448 title "Emulating: $iso"
pankso@7 449 emulate ${work}/${iso}
pankso@7 450 footer ;;
pankso@24 451
pankso@24 452 -w|web)
pankso@27 453 pid=$(ps | grep $port | grep -v grep | awk '{print $1}')
pankso@24 454 if [ "$stop" ] && [ "$pid" ]; then
pankso@24 455 echo -n "Stopping Web interface... pid:"
pankso@24 456 kill ${pid}; info 035 "$pid"; exit 0
pankso@24 457 fi
pankso@24 458 # Need the cgi script in server root
pankso@24 459 if [ ! -f "$work/seb.cgi" ]; then
pankso@24 460 cp ${tools}/web/seb.cgi .
pankso@24 461 fi
pankso@24 462 if [ "$pid" ]; then
pankso@24 463 echo -n "Web interface is already running with pid:"
pankso@24 464 info 035 "$pid"
pankso@24 465 else
pankso@24 466 echo -n "Starting web interface on port:"; info 035 "$port"
pankso@24 467 httpd -p ${port} -u 0:0 -h ${work} \
pankso@24 468 -c ${tools}/web/httpd.conf
pankso@24 469 fi
pankso@24 470 tazweb --notoolbar http://localhost:${port}/ & ;;
pankso@7 471
pankso@7 472 env)
pankso@7 473 title "SEB environment"
pankso@7 474 cat << EOT
pankso@7 475 work=$work
pankso@7 476 rootfs=$rootfs
pankso@7 477 rootiso=$rootiso
pankso@7 478 sebfs=$sebfs
pankso@7 479 sebpkgs=$sebpkgs
pankso@7 480 cache=$cache
pankso@7 481 vdisk=$vdisk
pankso@7 482 tools=$tools
pankso@7 483 initfs=$initfs
pankso@7 484 packages=$packages
pankso@7 485 iso=$iso
pankso@7 486 linux=$linux
pankso@7 487 EOT
pankso@7 488 footer ;;
pankso@7 489
pankso@7 490 -t|testsuite)
pankso@24 491 # Development/debug purpose
pankso@24 492 if [ -x "./libseb.sh" ]; then
pankso@24 493 ./libseb.sh
pankso@24 494 else
pankso@24 495 /lib/libseb.sh
pankso@24 496 fi ;;
pankso@7 497
pankso@7 498 *) help ;;
pankso@7 499
pankso@7 500 esac && exit 0