Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # Author: Pali Rohár
- # Licence: GPLv3
- if test -z "$1"; then
- echo "Usage: $0 file.deb"
- exit 1
- fi
- if test ! -f "$1"; then
- echo "File $1 not exists"
- exit 1
- fi
- if test -d "__tmp"; then
- echo "Temporary directory __tmp exists"
- exit 1
- fi
- mkdir -p __tmp
- if test "$?" != "0"; then
- echo "Cannot create temporary directory __tmp"
- exit 1
- fi
- echo "Unpacking..."
- dpkg -x "$1" __tmp/deb
- dpkg -e "$1" __tmp/deb/DEBIAN
- cd __tmp || exit 1
- source="$(sed -n 's/^Source:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
- package="$(sed -n 's/^Package:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
- version="$(sed -n 's/^Version:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
- maintainer="$(sed -n 's/^Maintainer:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
- if test -z "$source"; then
- source="$package"
- fi
- if test -z "$maintainer"; then
- if test -z "$USER"; then USER=user; fi
- if test -z "$HOSTNAME"; then HOSTNAME="$(hostname)"; fi
- if test -z "$HOSTNAME"; then HOSTNAME=localhost; fi
- if test -z "$DEBEMAIL"; then DEBEMAIL="$USER@$HOSTNAME"; fi
- if test -z "$DEBFULLNAME"; then DEBFULLNAME="$USER"; fi
- maintainer="$DEBFULLNAME <$DEBEMAIL>"
- fi
- mkdir "$source-$version" || exit 1
- mv deb "$source-$version/" || exit 1
- cd "$source-$version" || exit 1
- #### debian ####
- echo "Creating debian"
- mkdir debian || exit 1
- #### debian/changelog ####
- echo "Generating debian/changelog"
- have_changelog=0
- upstream_changelog=0
- for file in changelog.Debian.gz changelog.Debian changelog.gz changelog; do
- for file in $(find deb/usr/share/doc/ -name $file -type f); do
- if test ! -f "$file"; then continue; fi
- if echo "$file" | grep -q '\.gz$'; then
- gunzip -c "$file" > debian/changelog
- if test "$?" != "0"; then continue; fi
- else
- cp "$file" debian/changelog
- fi
- touch -r "$file" debian/changelog
- rm -f "$file"
- have_changelog=1
- break
- done
- if echo "$file" | grep -q Debian; then upstream_changelog=1; fi
- if test "$have_changelog" = "1"; then break; fi
- done
- if test "$have_changelog" != "1"; then
- time="@$(find deb -type f -exec stat --format '%Y' {} \; | sort -nr | cut -d: -f2- | head -1)"
- if test -z "$time"; then time="now"; fi
- date="$(date -R -d $time)"
- cat > debian/changelog << EOF
- $source ($version) unstable; urgency=low
- * Initial release
- -- $maintainer $date
- EOF
- fi
- have_changelog=0
- if test "$upstream_changelog" = "1"; then
- for file in changelog.gz changelog; do
- for file in $(find deb/usr/share/doc/ -name $file -type f); do
- if test ! -f "$file"; then continue; fi
- if echo "$file" | grep -q '\.gz$'; then
- mv "$file" changelog.gz
- gunzip changelog.gz
- else
- mv "$file" changelog
- fi
- rm -f "$file"
- have_changelog=1
- changelog=" changelog"
- break
- done
- if test "$have_changelog" = "1"; then break; fi
- done
- fi
- #### debian/copyright ####
- file="$(find deb/usr/share/doc/ -name copyright -type f | head -1)"
- if test ! -z "$file"; then
- cp "$file" debian/copyright
- touch -r "$file" debian/copyright
- rm -f "$file"
- fi
- #### debian/compat ####
- echo "Generating debian/compat"
- echo 5 > debian/compat
- #### debian/rules ####
- echo "Generating debian/rules"
- cat > debian/rules << EOF
- #!/usr/bin/make -f
- # -*- makefile -*-
- build:
- clean:
- dh_testdir
- dh_clean
- binary:
- dh_testdir
- dh_testroot
- dh_clean -k
- mkdir -p debian/$package
- cp -ra files/* debian/$package
- dh_installdocs -p$package
- dh_installchangelogs -p$package$changelog
- dh_compress
- dh_fixperms
- dh_strip
- dh_makeshlibs
- dh_shlibdeps
- dh_installdeb
- dh_gencontrol
- dh_md5sums
- dh_builddeb
- .PHONY: build clean binary
- EOF
- chmod +x debian/rules
- #### debian/control ####
- echo "Generating debian/control..."
- cat > debian/control << EOF
- Source: $source
- Maintainer: $maintainer
- Build-Depends: debhelper (>= 5)
- EOF
- cat deb/DEBIAN/control | grep -v '^Version:' | grep -v '^Installed-Size:' | grep -v '^Maintainer:' >> debian/control
- #### debian pre/post scripts ####
- echo "Adding debian scripts..."
- mv deb/DEBIAN/pre* debian/ 2>/dev/null
- mv deb/DEBIAN/post* debian/ 2>/dev/null
- #### docs ####
- echo "Adding debian docs..."
- for file in $(ls deb/usr/share/doc/$package/ 2>/dev/null); do
- if test ! -f "deb/usr/share/doc/$package/$file"; then continue; fi
- mv "deb/usr/share/doc/$package/$file" "$file"
- if echo "$file" | grep -q '\.gz$'; then
- gunzip "$file"
- file="${file%%.gz}"
- fi
- echo "$file" >> "debian/$package.docs"
- done
- if test -z "$(ls -A deb/usr/share/doc/$package/ 2>/dev/null)"; then
- rmdir "deb/usr/share/doc/$package" 2>/dev/null
- if test -z "$(ls -A deb/usr/share/doc/ 2>/dev/null)"; then
- rmdir deb/usr/share/doc 2>/dev/null
- if test -z "$(ls -A deb/usr/share/ 2>/dev/null)"; then
- rmdir deb/usr/share 2>/dev/null
- if test -z "$(ls -A deb/usr/ 2>/dev/null)"; then
- rmdir deb/usr 2>/dev/null
- fi
- fi
- fi
- fi
- #### files ####
- echo "Adding files..."
- rm -rf deb/DEBIAN
- mv deb files
- #### build dsc package ####
- echo "Building source package..."
- dpkg-buildpackage -S -sa -us -uc
- cd ..
- mv *.dsc ../
- mv *.tar.gz ../
- #### remove __tmp ####
- echo "Cleaning..."
- cd .. && rm -rf __tmp
- echo "Done."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement