Advertisement
Guest User

Untitled

a guest
Dec 15th, 2012
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.19 KB | None | 0 0
  1. #!/bin/sh
  2. # Author: Pali Rohár
  3. # Licence: GPLv3
  4.  
  5. if test -z "$1"; then
  6.     echo "Usage: $0 file.deb"
  7.     exit 1
  8. fi
  9.  
  10. if test ! -f "$1"; then
  11.     echo "File $1 not exists"
  12.     exit 1
  13. fi
  14.  
  15. if test -d "__tmp"; then
  16.     echo "Temporary directory __tmp exists"
  17.     exit 1
  18. fi
  19.  
  20. mkdir -p __tmp
  21. if test "$?" != "0"; then
  22.     echo "Cannot create temporary directory __tmp"
  23.     exit 1
  24. fi
  25.  
  26. echo "Unpacking..."
  27. dpkg -x "$1" __tmp/deb
  28. dpkg -e "$1" __tmp/deb/DEBIAN
  29.  
  30. cd __tmp || exit 1
  31.  
  32. source="$(sed -n 's/^Source:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
  33. package="$(sed -n 's/^Package:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
  34. version="$(sed -n 's/^Version:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
  35. maintainer="$(sed -n 's/^Maintainer:\s*\(.*\)$/\1/p' deb/DEBIAN/control | head -1)"
  36.  
  37. if test -z "$source"; then
  38.     source="$package"
  39. fi
  40.  
  41. if test -z "$maintainer"; then
  42.     if test -z "$USER"; then USER=user; fi
  43.     if test -z "$HOSTNAME"; then HOSTNAME="$(hostname)"; fi
  44.     if test -z "$HOSTNAME"; then HOSTNAME=localhost; fi
  45.     if test -z "$DEBEMAIL"; then DEBEMAIL="$USER@$HOSTNAME"; fi
  46.     if test -z "$DEBFULLNAME"; then DEBFULLNAME="$USER"; fi
  47.     maintainer="$DEBFULLNAME <$DEBEMAIL>"
  48. fi
  49.  
  50. mkdir "$source-$version" || exit 1
  51. mv deb "$source-$version/" || exit 1
  52. cd "$source-$version" || exit 1
  53.  
  54. #### debian ####
  55.  
  56. echo "Creating debian"
  57. mkdir debian || exit 1
  58.  
  59. #### debian/changelog ####
  60.  
  61. echo "Generating debian/changelog"
  62.  
  63. have_changelog=0
  64. upstream_changelog=0
  65.  
  66. for file in changelog.Debian.gz changelog.Debian changelog.gz changelog; do
  67.     for file in $(find deb/usr/share/doc/ -name $file -type f); do
  68.         if test ! -f "$file"; then continue; fi
  69.         if echo "$file" | grep -q '\.gz$'; then
  70.             gunzip -c "$file" > debian/changelog
  71.             if test "$?" != "0"; then continue; fi
  72.         else
  73.             cp "$file" debian/changelog
  74.         fi
  75.         touch -r "$file" debian/changelog
  76.         rm -f "$file"
  77.         have_changelog=1
  78.         break
  79.     done
  80.     if echo "$file" | grep -q Debian; then upstream_changelog=1; fi
  81.     if test "$have_changelog" = "1"; then break; fi
  82. done
  83.  
  84. if test "$have_changelog" != "1"; then
  85.  
  86.     time="@$(find deb -type f -exec stat --format '%Y' {} \; | sort -nr | cut -d: -f2- | head -1)"
  87.     if test -z "$time"; then time="now"; fi
  88.     date="$(date -R -d $time)"
  89.     cat > debian/changelog << EOF
  90. $source ($version) unstable; urgency=low
  91.  
  92.   * Initial release
  93.  
  94.  -- $maintainer  $date
  95. EOF
  96.  
  97. fi
  98.  
  99. have_changelog=0
  100. if test "$upstream_changelog" = "1"; then
  101.     for file in changelog.gz changelog; do
  102.         for file in $(find deb/usr/share/doc/ -name $file -type f); do
  103.             if test ! -f "$file"; then continue; fi
  104.             if echo "$file" | grep -q '\.gz$'; then
  105.                 mv "$file" changelog.gz
  106.                 gunzip changelog.gz
  107.             else
  108.                 mv "$file" changelog
  109.             fi
  110.             rm -f "$file"
  111.             have_changelog=1
  112.             changelog=" changelog"
  113.             break
  114.         done
  115.         if test "$have_changelog" = "1"; then break; fi
  116.     done
  117. fi
  118.  
  119. #### debian/copyright ####
  120.  
  121. file="$(find deb/usr/share/doc/ -name copyright -type f | head -1)"
  122. if test ! -z "$file"; then
  123.     cp "$file" debian/copyright
  124.     touch -r "$file" debian/copyright
  125.     rm -f "$file"
  126. fi
  127.  
  128. #### debian/compat ####
  129.  
  130. echo "Generating debian/compat"
  131.  
  132. echo 5 > debian/compat
  133.  
  134. #### debian/rules ####
  135.  
  136. echo "Generating debian/rules"
  137.  
  138. cat > debian/rules << EOF
  139. #!/usr/bin/make -f
  140. # -*- makefile -*-
  141.  
  142. build:
  143.  
  144. clean:
  145.     dh_testdir
  146.     dh_clean
  147.  
  148. binary:
  149.     dh_testdir
  150.     dh_testroot
  151.     dh_clean -k
  152.     mkdir -p debian/$package
  153.     cp -ra files/* debian/$package
  154.     dh_installdocs -p$package
  155.     dh_installchangelogs -p$package$changelog
  156.     dh_compress
  157.     dh_fixperms
  158.     dh_strip
  159.     dh_makeshlibs
  160.     dh_shlibdeps
  161.     dh_installdeb
  162.     dh_gencontrol
  163.     dh_md5sums
  164.     dh_builddeb
  165.  
  166. .PHONY: build clean binary
  167. EOF
  168.  
  169. chmod +x debian/rules
  170.  
  171. #### debian/control ####
  172.  
  173. echo "Generating debian/control..."
  174.  
  175. cat > debian/control << EOF
  176. Source: $source
  177. Maintainer: $maintainer
  178. Build-Depends: debhelper (>= 5)
  179.  
  180. EOF
  181. cat deb/DEBIAN/control | grep -v '^Version:' | grep -v '^Installed-Size:' | grep -v '^Maintainer:' >> debian/control
  182.  
  183. #### debian pre/post scripts ####
  184.  
  185. echo "Adding debian scripts..."
  186.  
  187. mv deb/DEBIAN/pre* debian/ 2>/dev/null
  188. mv deb/DEBIAN/post* debian/ 2>/dev/null
  189.  
  190. #### docs ####
  191.  
  192. echo "Adding debian docs..."
  193.  
  194. for file in $(ls deb/usr/share/doc/$package/ 2>/dev/null); do
  195.     if test ! -f "deb/usr/share/doc/$package/$file"; then continue; fi
  196.     mv "deb/usr/share/doc/$package/$file" "$file"
  197.     if echo "$file" | grep -q '\.gz$'; then
  198.         gunzip "$file"
  199.         file="${file%%.gz}"
  200.     fi
  201.     echo "$file" >> "debian/$package.docs"
  202. done
  203.  
  204. if test -z "$(ls -A deb/usr/share/doc/$package/ 2>/dev/null)"; then
  205.     rmdir "deb/usr/share/doc/$package" 2>/dev/null
  206.     if test -z "$(ls -A deb/usr/share/doc/ 2>/dev/null)"; then
  207.         rmdir deb/usr/share/doc 2>/dev/null
  208.         if test -z "$(ls -A deb/usr/share/ 2>/dev/null)"; then
  209.             rmdir deb/usr/share 2>/dev/null
  210.             if test -z "$(ls -A deb/usr/ 2>/dev/null)"; then
  211.                 rmdir deb/usr 2>/dev/null
  212.             fi
  213.         fi
  214.     fi
  215. fi
  216.  
  217. #### files ####
  218.  
  219. echo "Adding files..."
  220.  
  221. rm -rf deb/DEBIAN
  222. mv deb files
  223.  
  224. #### build dsc package ####
  225.  
  226. echo "Building source package..."
  227.  
  228. dpkg-buildpackage -S -sa -us -uc
  229.  
  230. cd ..
  231. mv *.dsc ../
  232. mv *.tar.gz ../
  233.  
  234. #### remove __tmp ####
  235.  
  236. echo "Cleaning..."
  237.  
  238. cd .. && rm -rf __tmp
  239.  
  240. echo "Done."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement