Le Karotz embarque un ensemble d'outils logiciels qui en font une vraie petite machine Linux.

Voyons un peu ce qu'on peut trouver dans sa boîte à outils.

Note : cette exploration est basée sur le firmware OpenKarotz. Certains outils ont peut-être été ajoutés par la communauté et ne faisaient pas partie du système Violet/Mindscape d'origine.

BusyBox : le couteau suisse

Le Karotz embarque BusyBox 1.24.0, un exécutable unique qui regroupe des dizaines d'utilitaires Unix courants.

C'est la solution standard pour les systèmes embarqués où l'espace est limité.

>> busybox --help

BusyBox v1.24.0.git (2015-10-04 23:30:53 UTC) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.

Usage: busybox [function [arguments]...]
   or: busybox --list[-full]
   or: busybox --install [-s] [DIR]
   or: function [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use and BusyBox
        will act like whatever it was invoked as.

Le principe est malin : au lieu d'avoir 50 programmes séparés (ls, cp, cat...), on a un seul binaire qui se comporte différemment selon le nom avec lequel il est appelé.

Résultat : un gain de place considérable.

Les principales commandes disponibles via BusyBox sur Karotz

BusyBox fourni pas moins de 362 commandes donc voici les principales :

Manipulation de fichiers : ls, cp, mv, rm, mkdir, cat, head, tail, find, grep, sed, awk, tar, gzip, unzip

Réseau : ping, netstat, wget, telnet, nc (netcat), traceroute, nslookup, ifconfig, ip

Système : ps, top, free, df, mount, kill, dmesg, uname

Édition : vi, sed, awk

Voir la liste complète des 362 commandes BusyBox
[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk, base64, basename, beep, blkid,
        blockdev, bootchartd, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd,
        chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, conspy, cp, cpio, crond, crontab, cryptpw, cttyhack, cut,
        date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd,
        dnsdomainname, dos2unix, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake,
        expand, expr, fakeidentd, false, fatattr, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find,
        findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fstrim, fsync, ftpd, ftpget, ftpput, fuser, getopt,
        getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock,
        i2cdetect, i2cdump, i2cget, i2cset, id, ifconfig, ifdown, ifenslave, ifup, inetd, init, insmod, install,
        ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall,
        killall5, klogd, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread,
        losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lsof, lspci, lsusb, lzcat, lzma, lzop, lzopcat, makedevs, makemime,
        man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod,
        mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mpstat, mt, mv, nameif, nanddump,
        nandwrite, nbd-client, nc, netstat, nice, nmeter, nohup, nslookup, ntpd, od, openvt, passwd, patch, pgrep,
        pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, popmaildir, poweroff, powertop, printenv, printf,
        ps, pscan, pstree, pwd, pwdx, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot,
        reformime, remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake,
        run-parts, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont,
        setkeycodes, setlogcons, setserial, setsid, setuidgid, sh, sha1sum, sha256sum, sha3sum, sha512sum, showkey,
        shuf, slattach, sleep, smemcap, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin,
        sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet,
        telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, truncate, tty,
        ttysize, tunctl, ubiattach, ubidetach, ubimkvol, ubirmvol, ubirsvol, ubiupdatevol, udhcpc, udhcpd, udpsvd,
        uevent, umount, uname, unexpand, uniq, unix2dos, unlink, unlzma, unlzop, unxz, unzip, uptime, usleep, uudecode,
        uuencode, vconfig, vi, vlock, volname, watch, watchdog, wc, wget, which, whoami, whois, xargs, xz, xzcat, yes,
        zcat, zcip

 

Shells disponibles

Bonne surprise, le Karotz dispose de vrais shells :

Shell Version Description
bash 4.1 Le shell par défaut, complet et confortable
ash via BusyBox Shell POSIX léger et rapide
hush via BusyBox Shell minimaliste

 

Avoir bash 4.1 est un vrai luxe sur un système embarqué.

On peut écrire des scripts avancés avec des tableaux, de la complétion, et toutes les fonctionnalités qu'on attend d'un shell moderne.

C'est d'ailleurs des scripts bash qui sont utilisés pour les installations de OpenKarotz par exemple.

Outils multimédia

Le Karotz est avant tout un appareil multimédia : il parle, joue de la musique, et peut diffuser des flux audio.

Son arsenal logiciel reflète cette vocation :

Outil Fonction
ffmpeg Le couteau suisse de la conversion audio/vidéo. Peut transcoder à peu près n'importe quoi.
mplayer Lecteur multimédia polyvalent, capable de lire de nombreux formats.
madplay Lecteur MP3 léger et optimisé pour les systèmes embarqués.
GStreamer 0.10 Framework multimédia modulaire. Les commandes gst-launch et gst-inspect permettent de construire des pipelines audio/vidéo.
flac Encodeur/décodeur pour le format audio sans perte FLAC.
speexenc/speexdec Codec Speex, optimisé pour la voix. Probablement utilisé pour la synthèse vocale originale du Karotz.


C'est pas mal pour un appareil de 2011 ! 

La présence de ffmpeg notamment ouvre beaucoup de possibilités.

Outils de développement et debug

Quelques outils permettent de développer et déboguer directement sur le Karotz :

Outil Fonction
python 2.4.5 Interpréteur Python.
Version ancienne (2004 !) mais fonctionnelle pour des scripts simples.
strace Permet de tracer les appels système d'un programme.
Indispensable pour comprendre ce qui se passe sous le capot.
dbus-tools

Suite d'outils pour interagir avec le bus de messages D-Bus (dbus-send, dbus-monitor). 
Utile car le Karotz utilise D-Bus pour la communication entre composants.


La présence de strace est particulièrement appréciable pour le debug. On peut observer exactement ce qu'un programme fait : fichiers ouverts, connexions réseau, etc.

Autres utilitaires notables

En fouillant dans /usr/bin, on trouve aussi :

Outil Fonction
curl Client HTTP/HTTPS plus puissant que wget, supporte davantage de protocoles.
openssl Outils cryptographiques (génération de clés, certificats...).
dropbear Client/serveur SSH léger (non activé par défaut).
gpg Chiffrement et signatures PGP.
v8-shell Le moteur JavaScript V8 de Google v2.5.8 ! Permet d'exécuter du JS en ligne de commande. Surprenant sur un appareil de 2011.
mpd Music Player Daemon, un serveur de lecture musicale. Explique peut-être la gestion des playlists en arrière-plan.
hmac256 Calcul de HMAC-SHA256 pour l'authentification et la vérification d'intégrité. Probablement utilisé pour la communication avec les serveurs Violet.
xmllint Validation et manipulation de fichiers XML. Cohérent avec l'époque où les apps Karotz utilisaient du XML.

 

Conclusion

Pour un système embarqué de 2011, le Karotz est remarquablement bien équipé.

On y trouve tout le nécessaire pour le multimédia, le réseau, le scripting, et même le debug. De quoi bidouiller sérieusement !

À noter : Dropbear (SSH) est présent mais non activé par défaut.

Quelques mises à jour seraient toutefois bienvenues : Python 2.4 date de 2004, et les versions d'OpenSSL et curl montrent leur âge face aux exigences de sécurité actuelles.

Reste à voir si c'est faisable sur cette architecture ARM920T...

Et vous, avez-vous découvert d'autres outils cachés sur votre Karotz ? Partagez vos trouvailles en commentaire !

Aucun commentaire