Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/02/2014, à 21:56

JeanLAN

Création d'un .deb à partir de sources JAVA

Bonjour,
Je souhaite créer une .deb à partir d'un programme que j'ai écrit en java et qui me permet de recadrer des photos.
Sous W$, j'utilisai JSMOOTH, et en deux temps trois mouvements, je créai un installateur qui me permet ensuite de lancer mon programme depuis l'explorateur, avec un clic de droit et ouvrir avec.
Sous Ubuntu, ça fait plus d'une semaine que je galère pour arriver à faire enfin un .deb qui fonctionne, mais quand je le lance via Ubuntu Sofware center, il me dit que la licence et la mse à jour sont inconnu.
Quand j'analyse mon paquet avec lintian, j'obtiens les warning suivant:

W: cadj: wrong-name-for-changelog-of-native-package usr/share/doc/cadj/changelog.Debian.gz
W: cadj: new-package-should-close-itp-bug
W: cadj: desktop-command-not-in-package usr/share/applications/CadreuseJ.desktop java

Pour résumer la méthode que j'ai employé:
Création de l'arborescence avec "dh_make --createorig" qui a généré le squelette
adaptation des fichier control, changelog et copyright
passer tous les répertoires et fichiers en root:root
adapter les autorisations des répertoires et fichiers
compressé le fichier changelog en changelog.Debian.gz

Existe-t-il une méthode plus simple que celle que j'ai utilisé pour arriver à un meilleur résultat?

Hors ligne

#2 Le 12/02/2014, à 05:04

J5012

Re : Création d'un .deb à partir de sources JAVA

Hors ligne

#3 Le 12/02/2014, à 07:49

JeanLAN

Re : Création d'un .deb à partir de sources JAVA

Merci pour ce lien, je vais essayer ce soir mais j'ai peur que ça ne suffise pas...
Mon CadreuseJ.desktop n'est peut-être pas au bon endroit dans mon arborescence, je vais essayer de le mettre dans /usr/bin

Hors ligne

#4 Le 12/02/2014, à 19:03

JeanLAN

Re : Création d'un .deb à partir de sources JAVA

Le fichier .desktop dans le répertoire bin ça ne marche pas, j'ai bien supprimé le warning de lintian, mais du coup l'application ne se lance pas.
Quelqu'un a une idée pour indiquer dans le fichier contrôle la dépendance à java?

Hors ligne

#5 Le 14/02/2014, à 02:56

J5012

Re : Création d'un .deb à partir de sources JAVA

solution partielle :
- l'appli openjdk runtime : openjdk-6-java.desktop contient pour l'execution (clic droit) :

cautious-launcher %f /usr/bin/java -jar

solution scriptee (ex jdownloader) :
- jdownloader.desktop dans /usr/share/applications

[Desktop Entry]
Name=JDownloader
Categories=Network;FileTransfer
Exec=jdownloader
Icon=jdownloader
StartupWMClass=JDownloader
Terminal=false
Type=Application

- script jdownloader executable dans /usr/bin

#!/bin/sh
set -e

if test -z "$JDOWNLOADER_DIRECTORY"; then
	# You can override this default by setting JDOWNLOADER_DIRECTORY
	JDOWNLOADER_DIRECTORY=~/.jdownloader
fi

LOG_FILE=${JDOWNLOADER_DIRECTORY}/jdownloader.log
JAVA_OPTIONS="-Xmx512m"
NUMBER_OF_UPDATE_MIRRORS=3

download_updater() {
	RANDOM_NUMBER=$(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -f1 -d" ")
	MIRROR_NUMBER=$(expr ${RANDOM_NUMBER} % ${NUMBER_OF_UPDATE_MIRRORS} || true)
	MIRROR="http://update${MIRROR_NUMBER}.jdownloader.org/"

	rm -f jdupdate.jar
	echo "$0: Download jdupdate.jar from ${MIRROR}." >> ${LOG_FILE}
	wget --append-output=${LOG_FILE} ${MIRROR}/jdupdate.jar || zenity --error --text "The JDownloader updater could not be downloaded. Check your Internet connection and try again.\n\nThe error log can be found in\n${LOG_FILE}."

	rm -f jdupdate.jar.md5
	echo "$0: Download jdupdate.jar.md5 from ${MIRROR}." >> ${LOG_FILE}
	wget --append-output=${LOG_FILE} ${MIRROR}/jdupdate.jar.md5 || zenity --error --text "The JDownloader updater MD5 sum file could not be downloaded. Check your Internet connection and try again.\n\nThe error log can be found in\n${LOG_FILE}."

	ACTUAL_MD5SUM=$(md5sum jdupdate.jar | cut -f1 -d" ")
	TARGET_MD5SUM=$(cat jdupdate.jar.md5)
	if test "$ACTUAL_MD5SUM" != "$TARGET_MD5SUM"; then
		zenity --warning --text "The MD5 sum of the JDownloader updater mismatches. It is ${ACTUAL_MD5SUM}, but it should be ${TARGET_MD5SUM}. Either there was a download error, or one of the files (downloader or md5 sum file) is not up-to-date.\n\nThe log file can be found in\n${LOG_FILE}."
	fi
}

# determine command line parameters
while getopts 'u' OPTION 2> /dev/null; do
	case $OPTION in
	u)	UPDATE=1
		;;
	esac
done

# create JDownloader directory
mkdir -p "${JDOWNLOADER_DIRECTORY}"
cd "${JDOWNLOADER_DIRECTORY}"

# clear log
> ${LOG_FILE}

# download updater, if it is missing (e.g. first run)
if test ! -f jdupdate.jar; then
	echo "$0: No installer/updater found in ${JDOWNLOADER_DIRECTORY}." >> ${LOG_FILE}
	download_updater
fi

# start update if requested
if test "$UPDATE" = "1"; then
	echo "$0: Starting updater by your request." >> ${LOG_FILE}
	exec java ${JAVA_OPTIONS} -jar jdupdate.jar
elif test -f JDownloader.jar; then
	echo "$0: Starting JDownloader." >> ${LOG_FILE}
	exec java ${JAVA_OPTIONS} -jar JDownloader.jar $*
else
	# run updater, if JDownloader.jar does not exist
	echo "$0: No valid JDownloader.jar exist. Starting updater." >> ${LOG_FILE}
	exec java ${JAVA_OPTIONS} -jar jdupdate.jar
fi

- l'essentiel :
l'option java : JAVA_OPTIONS="-Xmx512m"
et la ligne d'execution : exec java ${JAVA_OPTIONS} -jar cadreuse.jar

Hors ligne

#6 Le 14/02/2014, à 19:34

JeanLAN

Re : Création d'un .deb à partir de sources JAVA

Merci J5012, cette formule magique m'a été d'un grand secours.
dans mon fichier .desktop, j'ai mis en exécution un fichier que j'ai appelé cadjDownLoad
Dans ce fichier, je n'ai mis que les 2 lignes essentielles comme indiqué, précédé du #!/bin/sh et en précisant bien évidemment le chemin exact pour le fichier jar.
J'ai changé le propriétaire et les permission puis autorisé l'exécution.
Je n'ai plus qu'à trouver comment faire un fichier man pour le cadjDomnLoad qui est réclamé par Lintian
mais surtout, il faut trouver un moyen de transmettre le nom du fichier pour lequel on a fait un clic de droit et ouvrir avec, car en l'état, il ouvre le mini explorateur et non pas le fichier sélectionné.
J'imagine qu'il faut récupérer le paramètre passé à cadjDownLoad, et le transmettre au jar...
Pour les bug IPT, j'ai mis un numéro au hazard, et lintian est content.
J'ai fait attention à mes numéros de révision (2.0-1) dans changelog et dans control, Lintian ne m'agresse plus.
Reste la licence que Ubuntu software center trouve "inconnu" et la mise à jour également, mais bon, c'est déjà mieux.

Hors ligne

#7 Le 14/02/2014, à 23:22

J5012

Re : Création d'un .deb à partir de sources JAVA

peut-etre devrais-tu telecharger le deb de jd et voir son fichier control ? le deb le plus recent est dans un ppa ...

Hors ligne

#8 Le 16/02/2014, à 19:00

JeanLAN

Re : Création d'un .deb à partir de sources JAVA

Je n'ai pas trouvé le deb de Jdownloader sur leur site, je suis tombé sur un fichier jd_unix_0_9.sh
par contre j'ai fait un script qui me permet de créer le fichier deb en respectant pratiquement tous les critères de lintian (il manque toujours le man, et je ne sais pas ce qu'il faut faire)
Ubuntu Software center ne trouve pas ma licence et mon copyright

Pour mon script, il faut au préalable avoir défini 3 paramètres
DEBEMAIL="votre.nom@fournisseur.pays"
DEBFULLNAME="Votre NOM"
DEBURL="le.nom.de.votre.site"
puis exporter ces valeurs avec la commande suivante
export DEBEMAIL DEBFULLNAME DEBURL
bien évidemment ces 4 lignes peuvent être ajoutées à la fin du fichier .bashrc avec la commande
nano .bashrc

Vous pouvez créer un fichier nommé "contruiredeb.sh" et copier le script ci-dessous et le rendre exécutable.
Ensuite placez-vous dans le répertoire de vos projets java contenant /monprogramme/dist/lib (le jar est dans /monprogramme/dist)
et lancer le scipt avec "bash ~/construiredeb.sh"

#!/bin/sh
#Version: 1.0
#Créé par Jean LAN <jean.lan@cegetel.net> le 15/02/2014
# Ce script permet de créer l'arborescence d'un paquet debian
# et compiler le paquet sous forme d'un fichier .deb

echo "\033[0;37;40m
Ce script permet de créer un paquet .deb pour installer votre programme java

Le nom du paquet doit être en minuscule et le répertoire correspondant doit 
être accessible directement depuis la position d'ou vous lancez ce script. 
Normalement les fichiers à utiliser sont dans un sous-répertoire /dist et
contient un sous-répertoire /dist/lib

Vous trouverez le paquet .deb dans votre dossier personnel
Les fichiers nécessaires pour créer le paquet restent dans le 
répertoire ~/pack. Vous pouvez les effacer si vous le souhaité.
"
echo "\033[0;37;41m NE LAISSER RIEN DE PRECIEUX DANS CE REPERTOIRE, IL VA ETRE ECRASE!\033[0m"
echo -n "Rentrer le nom du paquet que vous voulez créer: "
read pack
# Controle que le nom n'es pas vide sinon sortir
if [ "$pack" = "" ]; then
	{
	echo "Il faut rentrer un nom de paquet"
	exit 1
	}
fi
echo -n "Rentrez le numéro de version sous la forme OBLIGATOIRE x.x-x : "
read version
projet="$pack-$version"
echo "Votre projet portera le nom $projet"
# Effacer le projet précédent si il existe et créer l'arborescence du nouveau projet
if [ -d $HOME/pack ]; then
	{
	echo -n "\033[0;37;41mConfirmez l'effacement de tous les fichiers contenus dans le répertoire $HOME/pack en tapant y puis la touche RETURN \033[0m"
	read reponse
	if [ "$reponse" = "y" ]; then
		sudo rm -rf ~/pack
	else
		exit 2
	fi
	}
fi
mkdir ~/pack
#cd ~/pack
mkdir ~/pack/DEBIAN
mkdir ~/pack/usr
#cd usr
mkdir ~/pack/usr/share
mkdir ~/pack/usr/bin
#cd share
mkdir ~/pack/usr/share/applications
mkdir ~/pack/usr/share/$pack
mkdir ~/pack/usr/share/doc
#cd doc
mkdir ~/pack/usr/share/doc/$pack
#cd ..
#cd $pack
mkdir ~/pack/usr/share/$pack/debian
# Création du fichier /DEBIAN/control
echo "Package: $pack" > ~/pack/DEBIAN/control
echo "Source: $pack" >> ~/pack/DEBIAN/control
echo "Version: $version" >> ~/pack/DEBIAN/control
echo "Section: misc" >> ~/pack/DEBIAN/control
echo "Priority: optional" >> ~/pack/DEBIAN/control
echo "Architecture: amd64" >> ~/pack/DEBIAN/control
echo "Depends: bash (>= 1.0.0)" >> ~/pack/DEBIAN/control
echo "Maintainer: $DEBFULLNAME <$DEBEMAIL"\> >> ~/pack/DEBIAN/control
echo "Homepage: http://jean.lan.cegetel.net" >> ~/pack/DEBIAN/control
echo "Installed-size: 500" >> ~/pack/DEBIAN/control
echo "Description: Programme $pack" >> ~/pack/DEBIAN/control
echo " Ce paquet contient les fichiers nécessaires pour l'installation" >> ~/pack/DEBIAN/control
echo " de $pack" >> ~/pack/DEBIAN/control
# Changement de propriétaire et de mode
chmod 0644 ~/pack/DEBIAN/control
sudo chown root:root ~/pack/DEBIAN/control
echo "Le fichier DEBIAN/control a été généré"
# création du fichier binaire de lancement
echo "#!/bin/sh" > ~/pack/usr/bin/$pack
echo "JAVA_OPTIONS=\"-Xmx512m\"" >> ~/pack/usr/bin/$pack
echo "echo \"image demandée \$*\"" >> ~/pack/usr/bin/$pack
echo "exec java \${JAVA_OPTIONS} -jar /usr/share/$pack/$pack.jar \$*" >> ~/pack/usr/bin/$pack
chmod 0644 ~/pack/usr/bin/$pack
chmod +x ~/pack/usr/bin/$pack
sudo chown root:root ~/pack/usr/bin/$pack
echo "Le fichier usr/bin/$pack a été généré"
# Création du fichier .desktop
echo "[Desktop Entry]" > ~/pack/usr/share/applications/$pack.desktop
echo "Version= $version" >> ~/pack/usr/share/applications/$pack.desktop
echo "Type=Application" >>~/pack/usr/share/applications/$pack.desktop
echo "Terminal=false" >>~/pack/usr/share/applications/$pack.desktop
echo "Categories=Graphics;2DGraphics;" >>~/pack/usr/share/applications/$pack.desktop
echo "Exec=$pack" >>~/pack/usr/share/applications/$pack.desktop
echo "Name=$pack" >>~/pack/usr/share/applications/$pack.desktop
echo "Comment=Programme écrit en java" >>~/pack/usr/share/applications/$pack.desktop
echo "Icon=/usr/share/$pack/$pack.ico" >>~/pack/usr/share/applications/$pack.desktop
echo "GenericName[fr_FR.UTF-8]=Programme pour cadrer ses photos"  >>~/pack/usr/share/applications/$pack.desktop
echo "Name[fr_FR]=$pack" >>~/pack/usr/share/applications/$pack.desktop
echo "MimeType=image/jpeg" >>~/pack/usr/share/applications/$pack.desktop
chmod 0644 ~/pack/usr/share/applications/$pack.desktop
sudo chown root:root ~/pack/usr/share/applications/$pack.desktop
echo "Le fichier usr/share/applications/$pack.desktop a été généré"
# Création du fichier /debian/changelog
echo "$pack ($version) precise; urgency=low" > ~/pack/usr/share/$pack/debian/changelog
echo "" >> ~/pack/usr/share/$pack/debian/changelog
echo "  * Initial release. Closes: #12345" >> ~/pack/usr/share/$pack/debian/changelog
echo "  * Création du paquet pour installation" >> ~/pack/usr/share/$pack/debian/changelog
echo "  "  >> ~/pack/usr/share/$pack/debian/changelog
now=$(date -R) 
echo " -- $DEBFULLNAME <$DEBEMAIL>  $now" >> ~/pack/usr/share/$pack/debian/changelog
echo "  "  >> ~/pack/usr/share/$pack/debian/changelog
chmod 0644 ~/pack/usr/share/$pack/debian/changelog
sudo chown root:root ~/pack/usr/share/$pack/debian/changelog
echo "Le fichier /debian/changelog a été généré"
# Copie du fichier changelog dans le répertoire doc et compression
sudo cp ~/pack/usr/share/$pack/debian/changelog ~/pack/usr/share/doc/$pack/changelog.Debian
sudo gzip -9 ~/pack/usr/share/doc/$pack/changelog.Debian
# Création du fichier /doc/copyright
echo "Format: http://dep.debian.net/deps/dep5" >~/pack/usr/share/doc/$pack/copyright
echo "Upstream-Name: $pack" >>~/pack/usr/share/doc/$pack/copyright
echo "Source: <$DEBURL>" >>~/pack/usr/share/doc/$pack/copyright
echo "" >>~/pack/usr/share/doc/$pack/copyright
echo "Files: *" >>~/pack/usr/share/doc/$pack/copyright
echo "Copyright: <2011-2014> <$DEBEMAIL>" >>~/pack/usr/share/doc/$pack/copyright
echo "" >>~/pack/usr/share/doc/$pack/copyright
echo "License: GPL-2+" >>~/pack/usr/share/doc/$pack/copyright
echo " This package is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 .
 This package is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 You should have received a copy of the GNU General Public License
 along with this program. If not, see <http://www.gnu.org/licenses/>
 .
 On Debian systems, the complete text of the GNU General
 Public License version 2 can be found in "/usr/share/common-licenses/GPL-2"." >>~/pack/usr/share/doc/$pack/copyright
chmod 0644 ~/pack/usr/share/doc/$pack/copyright
sudo chown root:root ~/pack/usr/share/doc/$pack/copyright
echo "Le fichier /doc/copyright a été généré"

# Copie des fichiers java
cp -rf $pack/dist/* ~/pack/usr/share/$pack/
# Copie du fichier contenant l'icone du programme 
# il doit être dans le répertoire des sources et porter le même nom que le paquet
cp $pack/src/$pack/$pack.ico ~/pack/usr/share/$pack/

chmod 0644 ~/pack/usr/share/$pack/*.*
chmod 0644 ~/pack/usr/share/$pack/lib/*.*
chmod 0755 ~/pack/usr/share/$pack/lib

# Changement de propriétaire des répertoires
chmod 0755 ~/pack/usr
sudo chown root:root ~/pack/usr
chmod 0755 ~/pack/usr/bin
sudo chown root:root ~/pack/usr/bin
chmod 0755 ~/pack/usr/share
sudo chown root:root ~/pack/usr/share
chmod 0755 ~/pack/usr/share/$pack
sudo chown root:root ~/pack/usr/share/$pack
chmod 0755 ~/pack/usr/share/$pack/debian
sudo chown root:root ~/pack/usr/share/$pack/debian
chmod 0755 ~/pack/usr/share/applications
sudo chown root:root ~/pack/usr/share/applications
chmod 0755 ~/pack/usr/share/doc
sudo chown root:root ~/pack/usr/share/doc
chmod 0755 ~/pack/usr/share/doc/$pack
sudo chown root:root ~/pack/usr/share/doc/$pack
sudo chown root:root ~/pack/usr/share/$pack/*
sudo chown root:root ~/pack/usr/share/$pack/lib
sudo chown root:root ~/pack/usr/share/$pack/lib/*
echo "Fin de génération des fichiers"
# Création de l'archive
dpkg -b ~/pack/ ~/$pack-$version.x86.deb
echo "\033[0;33;40mPatientez - Vérification de la cohérance du paquet avec lintian\033[0m"
lintian ~/$pack-$version.x86.deb
echo "\033[0;33;40mSi les lignes ci-dessus indiquent des avertissement (W: warning) ou des
erreurs (E: error) essayez de les corriger.
Le paquet formé est une base de travail, vous pouvez compléter les fichiers 
générés automatiquement et relancer une compilation avec 
dpkg -b ~/nomdupaquet/ ~/nomdupaquet-version.processeur.deb \033[0m"

exit 0

Dernière modification par JeanLAN (Le 16/02/2014, à 19:08)

Hors ligne

#9 Le 20/02/2014, à 21:48

JeanLAN

Re : Création d'un .deb à partir de sources JAVA

Pour le fichier man, j'ai fini par trouver un modèle et j'ai pu l'intégrer dans un répertoire usr/share/man/man1 et après l'avoir compressé, lintian ne me pose plus de remarques désobligeantes.
Par contre, lors de l'installation de mon programme, Ubuntu Software center ne trouve toujours pas la license, mon copyright et n'affiche pas de photo correspondant au programme.

Ou et quel type de fichier faut-il mettre dans le paquet .deb pour que l'installateur les trouve?

Hors ligne