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). |
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 !
