Page 1 sur 1
[bonnes pratiques] DrGeo [Résolu]
Publié : ven. 19 sept. 2014, 21:28
par MrMen
Salut à tous,
Je suis en train de me prendre la tête avec un paquet et j'aurais besoin de conseil de votre part.
Ce paquet c'est drgeo2 fait en smaltalk (je ne connais pas plus que ça). Il y a une une mise à jour récente qui me pose pas mal de soucis.
Après dialogue avec le dev, il s'avère que certains fichiers on besoin d'un accès RW ce qui me gène beaucoup.
Entre autre le fichier image drgeo.image doit pouvoir être modifié. Perso ça me gène un peu parce que ça veut dire que pour tout utilisateur, en théorie il faudrait que je mette ça dans un répertoire accessible… Merci l'installation facile sous forme de paquet !
Par contre une idée proposée par le dev (Hilaire Fernandes au passage) est de créer un script (bash) qui copiera tous les fichiers nécessaires dans un dossier convenable en terme de droit (/tmp ?).
Ma question est là suivante : est-ce viable pour un paquet sous Archlinux de faire un truc comme ça ?
Juste pour avoir une idée,ce serait le PKGBUILD suivant :
Code : Tout sélectionner
# Contributor : Moostik
# Maintainer: MrMen <tetchet at gmail dot com>
pkgname=drgeo2
pkgver=14.07
pkgrel=1
pkgdesc="Interactive geometry tool for primary and secondary level"
arch=('any')
url='http://www.drgeo.eu/'
license=('LGPL3')
depends=('squeak-vm')
source=("https://launchpad.net/drgeo/trunk/${pkgver}/+download/DrGeo.app-${pkgver}d.zip"
"${pkgname}.png"
"${pkgname}.desktop")
md5sums=('8a862aaeed1234474e3dfb8e854e0d48'
'cacac23b5173fa18411719ce352a982e'
'494e9e8a5e28e3c5884525c4927435f5')
package () {
# Installing application
cd "${srcdir}/DrGeo.app/Contents/Resources/"
install -D -m644 "drgeo.image" "${pkgdir}/usr/share/${pkgname}/drgeo.image"
mkdir "${pkgdir}/usr/share/${pkgname}/Contents"
cp -r "${srcdir}/DrGeo.app/Contents/Resources/" "${pkgdir}/usr/share/${pkgname}/Contents"
for _lang in "de" "es" "fr"
do
install -D -m644 "locale/${_lang}/LC_MESSAGES/DrGeoII.mo" \
"${pkgdir}/usr/share/${pkgname}/locale/${_lang}/LC_MESSAGES/DrGeoII.mo"
install -D -m644 "locale/${_lang}/LC_MESSAGES/pharo.mo" \
"${pkgdir}/usr/share/${pkgname}/locale/${_lang}/LC_MESSAGES/pharo.mo"
done
cp -r "${srcdir}/DrGeo.app/Contents/Linux" "${pkgdir}/usr/share/${pkgname}/Contents"
cp -r "${srcdir}/DrGeo.app/MySketches" "${pkgdir}/usr/share/${pkgname}/"
cp -r "${srcdir}/DrGeo.app/MyExports" "${pkgdir}/usr/share/${pkgname}/"
install -m644 "${srcdir}/DrGeo.app/DrGeo.sh" "${pkgdir}/usr/share/${pkgname}"
install -m644 "${srcdir}/DrGeo.app/splash.bmp" "${pkgdir}/usr/share/${pkgname}"
# Installing menu item
cd "${srcdir}"
install -D -m755 "${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
install -D -m644 "${pkgname}.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
install -D -m644 "${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
}
et en gros j'ajouterais (très moche à revoir je fais ça en vitesse) :
Code : Tout sélectionner
#!/bin/bash
TEMP=$(mktemp -d)
cp **> tous les fichiers dont j'ai besoin <** $TEMP
cd $TEMP
bash DrGeo.sh # le script de démarage de base
rm -rf $TEMP # pour clean tout ça
Merci de votre intérêt.

Re: [bonnes pratiques] DrGeo
Publié : ven. 19 sept. 2014, 21:44
par benjarobin
Bonsoir,
La vrai question est : Pourquoi il y a un besoin de modification ? Et est ce que les modifications faites doivent être persistante ?
Car si c'est le cas alors ta solution n'en est pas une.
De plus (de mon point de vue) ce n'est pas trop choquant encore d'avoir certains fichiers en RW tant que ce n'est pas le dossier. De toute façon tu n'as pas trop le choix.
Au pire tu créer un groupe pour ce logiciel, tu ne donnes que les droits d'écriture pour ce groupe, en gros : root:drgeo
avec rw-rw-r--
(664)
Les utilisateurs voulant utiliser ce logiciel devant être dans ce groupe
Re: [bonnes pratiques] DrGeo
Publié : ven. 19 sept. 2014, 21:53
par MrMen
Alors non a priori,les modifications ne doivent pas être persistante (en tout cas pas pour l'utilisation que j'en ai eu).
Si ce n'est pas choquant d'avoir les fichiers en RW, je vais juste créer un groupe pour ce dossier et voir ce que ça donne.
Petite question pour finir, pour le fait que les utilisateurs doivent appartenir au groupe pour utiliser le logiciel, j'ai juste à mettre un petit mot (doux ?) dans le fichier .install ?
Edit : voilà ce que je viens de pondre.
PKGBUILD
Code : Tout sélectionner
# Contributor : Moostik
# Maintainer: MrMen <tetchet at gmail dot com>
pkgname=drgeo2
pkgver=14.07
pkgrel=1
pkgdesc="Interactive geometry tool for primary and secondary level"
arch=('any')
url='http://www.drgeo.eu/'
license=('LGPL3')
depends=('squeak-vm')
source=("https://launchpad.net/drgeo/trunk/${pkgver}/+download/DrGeo.app-${pkgver}d.zip"
"${pkgname}.png"
"${pkgname}.desktop"
"${pkgname}.sh")
md5sums=('8a862aaeed1234474e3dfb8e854e0d48'
'cacac23b5173fa18411719ce352a982e'
'494e9e8a5e28e3c5884525c4927435f5'
'7e995e8d4acfe69ead074bf56682336f')
install=drgeo2.install
package () {
# Installing application
cd "${srcdir}/DrGeo.app/Contents/Resources/"
install -D -m644 "drgeo.image" "${pkgdir}/usr/share/${pkgname}/drgeo.image"
mkdir "${pkgdir}/usr/share/${pkgname}/Contents"
cp -r "${srcdir}/DrGeo.app/Contents/Resources/" "${pkgdir}/usr/share/${pkgname}/Contents"
for _lang in "de" "es" "fr"
do
install -D -m644 "locale/${_lang}/LC_MESSAGES/DrGeoII.mo" \
"${pkgdir}/usr/share/${pkgname}/locale/${_lang}/LC_MESSAGES/DrGeoII.mo"
install -D -m644 "locale/${_lang}/LC_MESSAGES/pharo.mo" \
"${pkgdir}/usr/share/${pkgname}/locale/${_lang}/LC_MESSAGES/pharo.mo"
done
cp -r "${srcdir}/DrGeo.app/Contents/Linux" "${pkgdir}/usr/share/${pkgname}/Contents"
cp -r "${srcdir}/DrGeo.app/MySketches" "${pkgdir}/usr/share/${pkgname}/"
cp -r "${srcdir}/DrGeo.app/MyExports" "${pkgdir}/usr/share/${pkgname}/"
install -m644 "${srcdir}/DrGeo.app/DrGeo.sh" "${pkgdir}/usr/share/${pkgname}"
install -m644 "${srcdir}/DrGeo.app/splash.bmp" "${pkgdir}/usr/share/${pkgname}"
# Installing menu item
cd "${srcdir}"
install -D -m755 "${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
install -D -m644 "${pkgname}.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
install -D -m644 "${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
}
drgeo2.install
Code : Tout sélectionner
post_install() {
getent group drgeo >/dev/null 2>&1 || groupadd drgeo &>/dev/null
chown -R root:drgeo /usr/share/drgeo2/*
chmod -R g+w /usr/share/drgeo2/*
echo "NOTE: To run drgeo2 as normal user you have to add yourself into drgeo group"
}
post_upgrade() {
getent group drgeo >/dev/null 2>&1 || groupadd drgeo &>/dev/null
chown -R root:drgeo /usr/share/drgeo2/*
chmod -R g+w /usr/share/drgeo2/*
echo "NOTE: To run drgeo2 as normal user you have to add yourself into drgeo group"
}
post_remove() {
if getent group drgeo >/dev/null 2>&1; then
groupdel drgeo
fi
}
Par contre petite question si je fais un groupdel, est ce que le groupe est vidé ?
Re: [bonnes pratiques] DrGeo
Publié : ven. 19 sept. 2014, 22:56
par benjarobin
Un groupdel supprime complètement le groupe, il n'y a donc plus aucune référence à ce dernier. Pour reprendre tes propos, il est "vidé" puis supprimé.
Re: [bonnes pratiques] DrGeo
Publié : lun. 22 sept. 2014, 00:12
par MrMen
Bon tout compte fait il y avait une info que j'avais pas du tout comprise…
Le logiciel est «auto-modifiable», donc le fichier image peut être modifié par l'utilisateur de la même manière que le fichiers .changes.
Donc dans ce cas l'idée du groupe drgeo tombe à l'eau puisque tous les utilisateurs peuvent vouloir modifier le logiciel.
Donc pour le coup j'en revient mon idée de base. Voilà ce à quoi je pense pour le script de lancement.
[*] Tester si un dossier .config/drgeo
existe le créer si nécessaire
[*] Copier le contenu de /usr/share/drgeo
si nécessaire dans le précédent dossier (y placer aussi les libs si besoin que je supprime en quittant)
[*] Se déplacer dans le fameux répertoire
[*] Lancer le logiciel
Est-ce que dans ce cas ça suit «un peu» la philosophie Arch et les règles d'empaquetage.
Si cette méthode ne fonctionne pas je ne vois pas trop comment faire pour utiliser toutes les fonctionnalités du logiciel de base…
Re: [bonnes pratiques] DrGeo
Publié : lun. 22 sept. 2014, 09:33
par benjarobin
Pourquoi pas... Mais au lieu de copier les fichiers en lecture seul je te conseil de créé des liens symboliques.
Et je pense pas qu'il soit nécessaire de faire une suppression à la fermeture.
Se serait sympa de rajouter une option pour faire un "clean start"
Il faut aussi prévoir la détection de changement de version et réagir en fonction...
Re: [bonnes pratiques] DrGeo
Publié : lun. 22 sept. 2014, 11:58
par MrMen
Bon je vais me tester ça alors.
benjarobin a écrit :
Il faut aussi prévoir la détection de changement de version et réagir en fonction...
Tu veux dire un changement de version du logiciel ? Dans ce cas il faut que j'en parle avec le dev pour voir s'il a prévu quelque chose.
En tout cas merci pour les conseils et la réactivité.

Re: [bonnes pratiques] DrGeo
Publié : lun. 06 oct. 2014, 22:28
par MrMen
Salut,
Bon je reviens ici avec du nouveau. Après discussion, je pondu un petit script qui me semble fonctionner, mais je voudrais avoir des avis plus éclairés que le mien…
Je poste donc ici le fichier qui devrait pouvoir lancer drgeo. La partie
launch
n'est pas de moi, donc a priori ça devrait le faire.
Il y a un point que je trouve un peu moche c'est mon for sur le ls… je pourrais mettre un find mais si ça convient je pens que je vais laisser pour le moment.
Une version pastebin pour les yeux :
http://pastebin.archlinux.fr/614079
Pour les plus courageux :
Code : Tout sélectionner
#!/bin/sh
DIR=$HOME
# usage function
usage (){
cat <<EOF
usage $0 options :
This script run drgeo2 after copying all needed files in \$HOME/.drgeo
OPTIONS :
-h : print this help
-c : remove all files in your $HOME/.drgeo directory
-f : do a clean start (same as a --clear start and a second one)
-p : launch drgeo2 with a new image file, change won't be saved
EOF
}
# launching function
launch (){
# initial script from DrGeo.sh
# path
ROOT=`readlink -f $(dirname $0)`
APP=`dirname "$0"`
APP=`cd "$APP";pwd`
VM="$APP/Contents/Linux"
RESOURCES="$APP/Contents/Resources"
image="$RESOURCES/drgeo.image"
# icon (note: gvfs-set-attribute is found in gvfs-bin on Ubuntu
# systems and it seems to require an absolute filename)
gvfs-set-attribute \
"$0" \
"metadata::custom-icon" \
"file://$RESOURCES/drgeo.png" \
2> /dev/null
# execute
"$VM/pharo" \
--plugins "$VM" \
--encoding utf-8 \
-vm-display-X11 \
-title "Dr. Geo" \
"$image"
}
pre-launch (){
# test if .drgeo exist in $HOME
if [ -e $DIR/.drgeo ]; then
cd $DIR/.drgeo
launch
else
####
##
# copy all needed stuff after creating $DIR/.drgeo
mkdir -p $DIR/.drgeo/Contents
mkdir -p $DIR/.drgeo/MyExports
mkdir -p $DIR/.drgeo/MySketches
mkdir -p $DIR/.drgeo/Contents/Resources
for file in $(ls /usr/share/drgeo2/Contents/Resources)
do
ln -s "/usr/share/drgeo2/Contents/Resources/$file" "$DIR/.drgeo/Contents/Resources/$file"
done
rm $DIR/.drgeo/Contents/Resources/drgeo.changes
rm $DIR/.drgeo/Contents/Resources/drgeo.image
cp /usr/share/drgeo2/Contents/Resources/drgeo.changes $DIR/.drgeo/Contents/Resources/drgeo.changes
cp /usr/share/drgeo2/Contents/Resources/drgeo.image $DIR/.drgeo/Contents/Resources/drgeo.image
cp /usr/share/drgeo2/Contents/Resources/drgeo.image $DIR/.drgeo/drgeo.image
ln -s /usr/share/drgeo2/Contents/Linux $DIR/.drgeo/Contents/Linux
ln -s /usr/share/drgeo2/locale $DIR/.drgeo/locale
cp /usr/share/drgeo2/splash.bmp $DIR/.drgeo/splash.bmp
###
##
#
cd $DIR/.drgeo
fi
}
if [ $# -eq 0 ]
then
pre-launch
launch
fi
while getopts "hcfp" opt;
do
case "$opt" in
h)
usage
exit 0
;;
c)
read -p "Do you really want to remove your $HOME/.drgeo directory ? (y/N)" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
rm -rf $DIR/.drgeo
else
exit 1
fi
exit 0
;;
f)
read -p "Do you really want to remove your $HOME/.drgeo directory ? (y/N)" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
rm -rf $DIR/.drgeo
else
exit 1
fi
pre-launch
launch
;;
p)
DIR=/tmp
pre-launch
launch
rm -rf $DIR/.drgeo
;;
?)
pre-launch
launch
;;
esac
done
Merci de vos retours.
Re: [bonnes pratiques] DrGeo
Publié : mar. 07 oct. 2014, 10:24
par oktoberfest
Salut,
ta boucle
Code : Tout sélectionner
for file in $(ls /usr/share/drgeo2/Contents/Resources)
do
ln -s "/usr/share/drgeo2/Contents/Resources/$file" "$DIR/.drgeo/Contents/Resources/$file"
done
peut aussi s'écrire (Ca évite la redondance sur le chemin)
Code : Tout sélectionner
for file in /usr/share/drgeo2/Contents/Resources/*
do
ln -s "$file" "$DIR/.drgeo/Contents/Resources/`basename $file`"
done
Re: [bonnes pratiques] DrGeo
Publié : mar. 07 oct. 2014, 10:32
par benjarobin
Mes remarques :
- pre-launch lance launch dans un cas, puis après on relance launch...
- dans le cas de DIR=/tmp, il serait peut être bien de supprimer l'éventuel dossier, car l'aide sous entend que l'on est censé repartir sur un truc vierge
- La création des lien symbolique ne devrait pas être conditionné par la présence ou non du dossier $DIR/.drgeo, mais c'est plus mineur.
Re: [bonnes pratiques] DrGeo
Publié : mar. 07 oct. 2014, 13:01
par MrMen
oktoberfest a écrit :Salut,
ta boucle
Code : Tout sélectionner
for file in $(ls /usr/share/drgeo2/Contents/Resources)
do
ln -s "/usr/share/drgeo2/Contents/Resources/$file" "$DIR/.drgeo/Contents/Resources/$file"
done
peut aussi s'écrire (Ca évite la redondance sur le chemin)
Code : Tout sélectionner
for file in /usr/share/drgeo2/Contents/Resources/*
do
ln -s "$file" "$DIR/.drgeo/Contents/Resources/`basename $file`"
done
Merci pour l'idée je change ça ce soir.
benjarobin a écrit :Mes remarques :
- pre-launch lance launch dans un cas, puis après on relance launch...
- dans le cas de DIR=/tmp, il serait peut être bien de supprimer l'éventuel dossier, car l'aide sous entend que l'on est censé repartir sur un truc vierge
- La création des lien symbolique ne devrait pas être conditionné par la présence ou non du dossier $DIR/.drgeo, mais c'est plus mineur.
- Ok pour ce point je viens de voir la boulette : c'est pas super logique je change ça.
- Je pensais que mon rm -rf $DIR/.drgeo faisait le boulot… tu peux me dire ce qui bloque.
- Quand tu dis «ne dois pas être conditionnel» tu veux dire que je peux le faire à chaque fois ?
Pour résumer, dans pre-launch (si je comprends) tu me dis de supprimer mon
if
et surtout la partie
then
.
Si c'est le cas, il faut que je fasse du conditionnel pour certains de mes fichiers (ceux obtenus avec cp) puisque j'en ai besoin en RW pour sauvegarder des changements.
Re: [bonnes pratiques] DrGeo
Publié : mar. 07 oct. 2014, 13:10
par benjarobin
MrMen a écrit :- Je pensais que mon rm -rf $DIR/.drgeo faisait le boulot… tu peux me dire ce qui bloque.
Je rajouterai un
rm
(le même) avant le pre-launch.
MrMen a écrit :- Quand tu dis «ne dois pas être conditionnel» tu veux dire que je peux le faire à chaque fois ?
En gros le pre-launch vérifie pour chaque fichier si ce dernier existe, si ce n'est pas le cas, créé un lien symbolique ou fait une copie en fonction.
Mais comme je l'ai déjà indiqué c'est plutôt mineur comme remarque, cela rend la chose plus robuste, à toi de voir
oktoberfest a écrit :peut aussi s'écrire (Ca évite la redondance sur le chemin)
Sauf que tu as un processus supplémentaire qui est lancé pour chaque fichier... C'est un tout petit plus lent.
En gros je verrais bien un truc comme ceci pour le pre-launch (Non testé)
Code : Tout sélectionner
mkdir -p $DIR/.drgeo/Contents
mkdir -p $DIR/.drgeo/MyExports
mkdir -p $DIR/.drgeo/MySketches
mkdir -p $DIR/.drgeo/Contents/Resources
DIR_SHARE_RC="/usr/share/drgeo2/Contents/Resources"
DIR_HOME_RC="$DIR/.drgeo/Contents/Resources"
[ -f "$DIR_HOME_RC/drgeo.image" ] || cp "$DIR_SHARE_RC/drgeo.image" "$DIR_HOME_RC/drgeo.image"
[ -f "$DIR_HOME_RC/drgeo.changes" ] || cp "$DIR_SHARE_RC/drgeo.changes" "$DIR_HOME_RC/drgeo.changes"
pushd "$DIR_SHARE_RC"
for file in ./*; do
[ -f "$DIR_HOME_RC/$file" ] || ln -s "$DIR_SHARE_RC/$file" "$DIR_HOME_RC/$file"
done
popd
# cp /usr/share/drgeo2/Contents/Resources/drgeo.image $DIR/.drgeo/drgeo.image ??? Comprend pas ceci
[ -f "$DIR/.drgeo/Contents/Linux" ] || ln -s /usr/share/drgeo2/Contents/Linux "$DIR/.drgeo/Contents/Linux"
[ -f "$DIR/.drgeo/locale" ] || ln -s /usr/share/drgeo2/locale "$DIR/.drgeo/locale"
Re: [bonnes pratiques] DrGeo
Publié : mar. 07 oct. 2014, 21:03
par MrMen
Bien vu benjarobin pour le coup du rm.
J'ai globalement compris sur que tu as mis dans la partie qui fait les copies. Par contre je n'avais jamais vu l'utilisation de
pushd/popd
.
Si j'ai bien compris ça remplace :
dans le cas où aucun cd n'a été réalisé. C'est ça ?
Bon ton script semble bien fonctionner (il manquait juste le fichier splash.bmp).
Voilà ce que ça donne maintenant.
http://pastebin.archlinux.fr/615091
Dernière petit question, si je mets ce script pour lancer l'application dans
/usr/bin
ça conviendra ?
Encore merci pour les relectures les gars.
Re: [bonnes pratiques] DrGeo
Publié : mar. 07 oct. 2014, 21:38
par benjarobin
C'est pas mieux ainsi (j'ai fait 'quelques' corrections) :
http://pastebin.archlinux.fr/615133
Sinon oui, le mettre dans /usr/bin convient tout à fait
Re: [bonnes pratiques] DrGeo
Publié : mar. 07 oct. 2014, 22:11
par MrMen
Donc si je ne me trompe pas tu as entre autres modifier le cp
de splash.bmp et modifier un peu les variables.
Donc après toutes ces modifs, je suis heureux je vais enfin pouvoir mettre mon paquet à jour ^^
Edit :
Après deux trois tests, je me suis rendu compte que le -f
ne faisait pas le boulot avec bash (j'ai maintenant mis /bin/bash au départ), donc j'ai tout passé en -e pour les tests sur les fichiers.
Tout est bon dans le cochon maintenant ! Merci.