Trucs en vrac sur la distribution Zaurus Francisée initiée par Dab.
Création de l'environnement
Le plus simple est de créer avec debootstrap un environnement chrooté spécifique. De créer un utilisateur une fois dans le chroot (ex. gaston) et de faire le checkout suivant :
- ##apt-get install subversion
- ##useradd gaston
- ##visudo
- Editer ici le sudo pour ajouter gaston avec une ligne du genre
- gaston ALL=(ALL) NOPASSWD:ALL
- et faire CTRL-X Y pour sortir
-
- ##mkdir -p /home/gaston/tmp
- ##chown gaston:gaston /home/gaston -Rc
- ##su - gaston
- svn co http://artisan.karma-lab.net/dev/zaurusfr/trunk/zaurusfr/construct
- cd construct
- ./oe build
- Faire quelque prière ici pour que tout fonctionne
Lorsque le build est terminé, une archive contenant tout ce qu'il faut pour flasher le zaurus sur trouve dans le dossier /home/rober/construct/stuff/zaurusfr/tmp/deploy/glibc/images/akita sous le nom poétique de Angstrom-zaurusfr-gpe-image-glibc-ipk-2007.9-test-YYYMMDD-akita-installkit.tgz. Il suffit de décompresser cette archive à la racine d'une carte SD, et d'installer la nouvelle ROM.
Faire un patch kernel
Si si, c'est toujours utile
- cd stuff/zaurusfr/tmp/work/akita-angstrom-linux-gnueabi/linux-rp-2.6.23-r100
- # on fait une copie des sources du kernel
- rsync -a linux-2.6.23 linux-2.6.23-new
- # on modifie le kernel sur la copie et on fait un patch que l'on stoque directement au bon endroit
- patch -Naur linux-2.6.23 linux-2.6.23-new > ../../../../myoe/packages/linux/linux-rp-2.6.23/mon-patch.patch
On modifie ensuite le fichier ../../../../myoe/packages/linux/linux-rp_2.6.23.bb en rajoutant dans SRC_URI une ligne du style :
file://mon-patch.patchpatch=1 \
Ensuite, soit on utilise oe pour faire un clean de linux-rp puis un build. Soit on veut tester et on va alors passer bitbake en mode interactif :
- cd /home/gaston/construct/stuff/zaurusfr
- . oe.env
- bitbake -i
- clean linux-rp
- fetch linux-rp
- unpack linux-rp
- patch linux-rp
- build linux-rp
USB mode host/slave
Pour l'instant, l'Angstrom ne détecte pas correctement le changement de câble. Il faut donc charger le module correspondant au mode "host" à la main :
#!/bin/sh
# Stop possible USB networking to release g_ether lock
ifconfig usb0 down 2>/dev/null
# Remove USB client modules
rmmod g_file_storage g_ether pxa27x_udc 2>/dev/null
# Load USB master module
modprobe ohci-hcd
Soucis d'installation sur la partition /home
Lors de l'utilisation de la syntaxe ipkg install -d home abiword, ipkg installe bien abiword sur la seconde partition mais l'utilitaire ipk-link n'est pas appelé pour créer les liens avec le système racine. Et pour cause, il n'est pas présent... Donc en attendant que ce soit inclus par défaut, voici le source de l'utilitaire à utiliser après ipkg, sous la forme ipk-link add abiword :
/usr/bin/ipkg-link
#!/bin/sh
COMMAND=$1
PACKAGE=$2
setdest () {
for i in `grep dest /etc/ipkg.conf | cut -d ' ' -f 3`; do
if [ -f $i/usr/lib/ipkg/info/$PACKAGE.list ]; then
DEST=$i
fi
done
if [ "x$DEST" = "x" ]; then
echo "Can not locate $PACKAGE."
echo "Check /etc/ipkg.conf for correct dest listings";
echo "Check name of requested package: $PACKAGE"
exit 1
fi
}
addlinks () {
setdest;
cat $DEST/usr/lib/ipkg/info/$PACKAGE.list | while read LINE; do
SRC=$LINE
DST=`echo $SRC | sed "s|$DEST||"`
DSTNAME=`basename $DST`
DSTDIR=`echo $DST | sed "s|$DSTNAME\$||"`
test -f "$SRC"
if [ $? = 0 ]; then
test -e "$DST"
if [ $? = 1 ]; then
mkdir -p $DSTDIR
ln -sf $SRC $DST
else
echo "Not linking $SRC to $DST"
echo "$DST Already exists"
fi
else
test -d "$SRC"
if [ $? = 0 ]; then
test -e $DST
if [ $? = 1 ]; then
mkdir -p $DST
else
echo "directory already exists"
fi
else
echo "Source directory $SRC does not exist"
fi
fi
done
}
removelinks () {
setdest;
cat $DEST/usr/lib/ipkg/info/$PACKAGE.list | while read LINE; do
SRC=$LINE
DST=`echo $LINE | sed "s|$DEST||"`
DSTNAME=`basename $DST`
DSTDIR=`echo $DST | sed "s|$DSTNAME\$||"`
test -f $DST
if [ $? = 0 ]; then
rm -f $DST
test -d $DSTDIR && rmdir $DSTDIR 2>/dev/null
else
test -d $DST
if [ $? = 0 ]; then
rmdir $DST
else
echo "$DST does not exist"
fi
fi
done
}
mountdest () {
test -d $PACKAGE
if [ $? = 1 ]; then
echo "Mount point does not exist"
exit 1
fi
for i in $PACKAGE/usr/lib/ipkg/info/*.list; do
$0 add `basename $i .list`
done
}
umountdest () {
test -d $PACKAGE
if [ $? = 1 ]; then
echo "Mount point does not exist"
exit 1
fi
for i in $PACKAGE/usr/lib/ipkg/info/*.list; do
$0 remove `basename $i .list`
done
}
case "$COMMAND" in
add)
addlinks
;;
remove)
removelinks
;;
mount)
mountdest
;;
umount)
umountdest
;;
*)
echo "Usage: $0 <cmd> <target>"
echo " Commands: add, remove, mount, umount"
echo " Targets: <package>, <mount point>"
echo "Example: $0 add kismet-server"
echo "Example: $0 remove kismet-server"
echo "Example: $0 mount /mnt/usb"
echo "Example: $0 umount /mnt/usb"
exit 1
;;
esac
exit 0
Et pour installer tous les paquets d'un coup :
/usr/bin/ipkg-link-all
#! /bin/sh
cd /
for package in $(cat /home/packages/usr/lib/ipkg/status | grep Package | cut -d" " -f2) ; do
./ipk-link add $package
done
Poster un nouveau commentaire