[openrtm-commit:00866] r2378 - branches/RELENG_1_1/OpenRTM-aist/packages/deb
openrtm @ openrtm.org
openrtm @ openrtm.org
2012年 7月 7日 (土) 01:42:58 JST
Author:
Date: 2012-07-07 01:42:58 +0900 (Sat, 07 Jul 2012)
New Revision: 2378
Added:
branches/RELENG_1_1/OpenRTM-aist/packages/deb/ppa_tool.sh
Log:
PPA pakcage build and publish script has been added.
Added: branches/RELENG_1_1/OpenRTM-aist/packages/deb/ppa_tool.sh
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist/packages/deb/ppa_tool.sh (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist/packages/deb/ppa_tool.sh 2012-07-06 16:42:58 UTC (rev 2378)
@@ -0,0 +1,359 @@
+#!/bin/sh
+#
+# @file ppa_tool.sh
+# @brief Launchpad/PPA packaging and publising tool for multiple distroseries
+# @author Noriaki Ando <n-ando at aist.go.jp>
+# @date Fri Jul 6 02:33:15 JST 2012
+#
+
+#
+# 0. Before publishing your package on the PPA, you should create
+# account on Launchpad, and register your OpenPGP key, and create
+# PPA place.
+#
+# 1. debian/changelog should have the following text in the first line
+#
+# ex. openrtm-aist (1.1.0-1~ppa1lucid) lucid; urgency=low
+# <package name> (X.Y.Z-N~ppaMxxxx) yyyyyy; urgency=zzzzz
+# ~ppa[number] should be added to normal version string of deb package.
+#
+# 2. Before making dput your package to PPA, it is recommended to make
+# source package with '-s' option and try to build it in the local
+# enviuronment.
+#
+# $ ppa_tool.sh -p password -s lucid
+# $ cd ../ ; mkdir ../tmp
+# $ tar -C ../tmp xvzf ../your_package.tar.gz
+# $ cd ../tmp/your_package ; debuild -us -uc
+#
+# 3. If your source pacakge is built without any error, now you can
+# make dput your source package to your PPA.
+#
+# $ cd -
+# $ ppa_tool.sh -p password -t ppa:your_account/ppa_place -a
+# # -a: dput your source to all current supported distro-versions
+#
+
+# Global variables:
+#
+# DEBUG:
+# Debug flag. some functions print debug messages if some value is set.
+# PASSWORD:
+# Password to unlock gpgkey. This is used when package is signed.
+# USERNAME:
+# User name to specify GPG key to sign source package.
+# GPGKEYID
+# GPG key ID to specify GPG key.
+# VERSION
+# Version number to be inserted to the package name.
+# PPAHOST
+# PPA target host name to be given to dput command.
+# TARGETS
+# A list of distroseries name.
+# SUPPORTED
+# Supported distroseries versions.
+# SUPPORTED_LIST
+# Supported distroseries versions with version numbers. Separated by comma.
+#
+
+get_distroseries()
+{
+ if ! test -f /tmp/meta-release; then
+ wget -q -O /tmp/meta-release http://changelogs.ubuntu.com/meta-release
+ fi
+ SUPPORTED=`awk 'BEGIN{RS="";FS="\n";}{if ($5 == "Supported: 1"){sub("Dist: ",""); sub(" ","",$1); printf("%s ",$1);}}END{printf("\n")}' /tmp/meta-release`
+ SUPPORTED_LIST=`awk 'BEGIN{RS="";FS="\n";}{if ($5 == "Supported: 1"){sub("Dist: ",""); sub("Version: ",""); printf("%s\t%s,",$1,$3);}}' /tmp/meta-release`
+}
+
+print_short_usage()
+{
+ get_distroseries
+ echo "\nUsage: $(basename $0) [OPTION]... [DISTROSERIES]..."
+ echo ""
+ echo "Optinos:"
+ echo " -p <password> password to unlock gpg key"
+# echo " -u <username> username for gpg key"
+# echo " -k <key ID> gpg key ID"
+ echo " -v <version> versioned package"
+ echo " -t <ppa host> target ppa host location"
+ echo " -a publish for all supported distroseries"
+ echo " [DISTROSERIES] = $SUPPORTED"
+ echo " -s only create source package in local"
+ echo " -h print this help"
+ echo ""
+}
+
+print_usage()
+{
+ print_short_usage
+ echo "Supported Distroseries:"
+ local __IFS=$IFS
+ IFS="," # SUPPORTED_LIST'S delimter is ","
+ for dist in $SUPPORTED_LIST; do
+ echo " $dist"
+ done
+ IFS=$__IFS
+ echo ""
+ echo "EXAMPLES"
+ echo " Send packages for only LTS to openrtm/releases ppa."
+ echo ""
+ echo " $(basename $0) -p hoge -t ppa:openrtm/releases hardy lucid"
+ echo ""
+ echo " Send packages for all supported versions to my_ppa. Password is"
+ echo " required to sign for each packages."
+ echo ""
+ echo " $(basename $0) -t my_ppa -a"
+ echo ""
+ echo " Only creating source package without sending it to ppa host."
+ echo ""
+ echo " $(basename $0) -t my_ppa -t "
+ echo ""
+ exit 0
+}
+
+get_opt()
+{
+ # -p <password> password to unlock gpg key
+ # -u <username> username for gpg key
+ # -k <key ID> gpg key ID
+ # -v <version> versioned package
+ #
+ PASSWORD=""
+ PPAHOST=""
+ VERSION=""
+ NO_DPUT=""
+ while getopts "p:u:k:t:v:hsa" OPT; do
+ case $OPT in
+ \?) print_short_usage; exit 1;;
+ p) PASSWORD="$OPTARG";;
+ u) USERNAME="$OPTARG";;
+ k) GPGKEYID="$OPTARG";;
+ t) PPAHOST="$OPTARG";;
+ v) VERSION="$OPTARG";;
+ s) NO_DPUT="True";;
+ a) ALLDIST="True";;
+ h) print_usage; exit 0;
+ esac
+ done
+ shift $(( $OPTIND - 1))
+ TARGETS=$@
+
+ # No distroseries without -a is not allowed
+ if test $# -eq 0; then
+ if test "x$ALLDIST" = "x"; then
+ echo "ERROR: no distroseries name specified."
+ print_short_usage
+ exit 1
+ else
+ # Getting supported distroseries
+ get_distroseries
+ TARGETS=$SUPPORTED
+ fi
+ fi
+
+ # No -t option without -s option is now allowed
+ if test "x$PPAHOST" = "x"; then
+ if test "x$NO_DPUT" = "x"; then
+ echo "ERROR: Option -t with PPA host is necessary"
+ print_short_usage
+ exit 1
+ fi
+ fi
+ # DEBUG
+ if ! test "x$DEBUG" = "x"; then
+ echo "PASSWORD: " $PASSWORD
+ echo "USERNAME: " $USERNAME
+ echo "GPGKEYID: " $GPGKEYID
+ echo "VERSION : " $VERSION
+ echo "PPAHOST : " $PPAHOST
+ echo "TARGETS : " $TARGETS
+ fi
+}
+
+get_package_name()
+{
+ if test -f debian/changelog; then
+ PACKAGE_NAME=`head -n 1 debian/changelog | awk '{print $1;}'`
+ echo "Pacakge base name is: " $PACKAGE_NAME
+ else
+ echo "ERROR: debian/changelog not found."
+ exit 1
+ fi
+}
+
+check_debiandir()
+{
+ # checking debian directory
+ if ! test -d debian ; then
+ echo "ERROR: debian directory not found"
+ echo " This directory should have debian directory"
+ echo " and control, changelog, etc in it."
+ exit -1
+ fi
+ # checking control file
+ if ! test -f debian/control; then # if control not found,
+ for d in $TARGETS; do # control.<codename> should exist
+ if $DEBUG; then
+ echo "Checking debian/control.$d"
+ fi
+ if ! test -f debian/control.$d; then
+ echo "ERROR: No control files found."
+ echo " debian dir should have at least one control file"
+ echo " or control.<release name> files."
+ exit 1
+ fi
+ done
+ else
+ echo "\ndebian/control found."
+ for d in $TARGETS; do
+ if test -f debian/control.$d; then
+ echo "debian/control.$d used for $d"
+ else
+ echo "debian/control used for $d"
+ fi
+ done
+ echo ""
+ fi
+ # checking changelog file
+ if ! test -f debian/changelog ; then
+ echo "ERROR: No changelog file found."
+ exit -1
+ fi
+}
+
+clean_source()
+{
+ if test -f "Makefile"; then
+ make clean
+ make distclean
+ fi
+}
+
+backup_debfiles()
+{
+ trap reset_debfiles 2
+ tar czf /tmp/debian.$PACKAGE_NAME.$$.tgz debian
+ echo "Backed up debian to /tmp/debian.$PACKAGE_NAME.$$.tgz"
+}
+
+
+reset_debfiles()
+{
+ if test -f /tmp/debian.$PACKAGE_NAME.$$.tgz; then
+ rm -rf debian
+ tar xzf /tmp/debian.$PACKAGE_NAME.$$.tgz
+ echo "debian directory has been restored."
+ fi
+ trap 2
+}
+
+modify_changelog()
+{
+ # modify_changelog <release name>
+ if ! test $# -eq 1; then
+ echo "Internal ERROR: modify_changelog should have one arg."
+ finalize
+ exit 1
+ fi
+ local RELEASE=$1
+ if test -f debian/changelog.ppa; then
+ cp debian/changelog.ppa debian/changelog
+ fi
+ sed -i \
+ -e "1,1 s/^\(.*~ppa[0-9]\+\)\(.*\)\().*\)$/\1${RELEASE}\3/" \
+ -e "1,1 s/^\(.*) \)\(.*\)\(;.*\)$/\1${RELEASE}\3/" \
+ debian/changelog
+ echo "debian/changelog modified."
+ echo "$(head -n 1 debian/changelog)"
+}
+
+
+modify_control()
+{
+ # modify_control <release name>
+ if ! test $# -eq 1; then
+ echo "Internal ERROR: modify_control should have one arg."
+ finalize
+ exit 1
+ fi
+ local RELEASE=$1
+ if test -f debian/control.${RELEASE}; then
+ rm debian/control
+ cp debian/control.${RELEASE} debian/control
+ echo "Using debian/control.${RELEASE}"
+ fi
+}
+
+build_and_dput()
+{
+ if test "x$PASSWORD" = "x"; then
+ debuild -i -I -S -sa > /tmp/debuild.$$.log
+ else
+ export LC_ALL=C
+ expect -c "
+ set timeout 60
+ spawn debuild -i -I -S -sa
+ expect passphrase:\ ; send \"$PASSWORD\r\"
+ expect passphrase:\ ; send \"$PASSWORD\r\"
+ interact
+ " > /tmp/debuild.$$.log
+ fi
+ # getting changes file name
+ ls -al /tmp/debuild.$$.log
+ local CHANGES="$(sed -n 's/^.*signfile \(.*\.changes\).*$/\1/p' /tmp/debuild.$$.log)"
+ if test "x$NO_DPUT" = "x"; then
+ echo -e "\nPublishing to $DPUT_TARGET with ../$CHANGES"
+ dput $PPAHOST ../$CHANGES
+ rm ../$(basename $CHANGES _source.changes)*
+ fi
+}
+
+insert_version()
+{
+ if test "x$VERSION" = "x"; then
+ return 0
+ fi
+ local ver=$VERSION
+ local pkg=$PACKAGE_NAME
+ echo "Replacing $pkg to $pkg$ver"
+ # control files
+ sed -i "s/$pkg/$pkg$ver/g" debian/control*
+ # changelog
+ sed -i "s/$pkg/$pkg$ver/g" debian/changelog
+ # rules
+ sed -i "s/debian\/$pkg/debian\/$pkg$ver/g" debian/rules
+}
+
+finalize()
+{
+ reset_debfiles
+}
+
+
+#------------------------------------------------------------
+# main
+#------------------------------------------------------------
+# checking and getting options
+if test $# -eq 0 ; then
+ print_usage
+ exit -1
+fi
+get_opt $@
+
+# getting package name and checking debian directory and files
+check_debiandir
+get_package_name
+
+# backup debian directory
+
+for RELNAME in $TARGETS; do
+ backup_debfiles
+ clean_source
+ modify_changelog $RELNAME
+ modify_control $RELNAME
+ insert_version
+ build_and_dput
+ reset_debfiles
+done
+
+exit 0
More information about the openrtm-commit
mailing list