生成postman的deb安装包

https://gist.github.com/SanderTheDragon/1331397932abaa1d6fbbf63baed5f043

  1. #!/bin/sh
  2. ls Postman*.tar.gz > /dev/null 2>&1
  3. if [ $? -eq 0 ]; then
  4. echo "Removing old Postman tarballs"
  5. rm -f $(ls Postman*.tar.gz)
  6. fi
  7. curlExists=$(command -v curl)
  8. echo "Testing Postman version"
  9. targetName=""
  10. if [ -z $curlExists ]; then
  11. targetName=$(wget -S --spider "https://dl.pstmn.io/download/latest/linux64" 2>&1 | grep "Content-Disposition" | awk -F '=' '{ print $2 }')
  12. else
  13. targetName=$(curl -sI "https://dl.pstmn.io/download/latest/linux64" | grep "content-disposition" | awk -F '=' '{ print $2 }')
  14. fi
  15. versionMaj=$(echo "$targetName" | awk -F '-' '{ print $4 }' | awk -F '.' '{ print $1 }')
  16. versionMin=$(echo "$targetName" | awk -F '-' '{ print $4 }' | awk -F '.' '{ print $2 }')
  17. versionRev=$(echo "$targetName" | awk -F '-' '{ print $4 }' | awk -F '.' '{ print $3 }')
  18. version="$versionMaj.$versionMin-$versionRev"
  19. echo "Most recent Postman version V$version"
  20. current=$(dpkg-query --showformat='${Version}' --show postman 2> /dev/null)
  21. if [ $? -gt 0 ]; then
  22. echo "Postman is not installed"
  23. else
  24. echo "Installed version V$current"
  25. if [ "$current" = "$version" ]; then
  26. echo "The most recent version of Postman is currently installed"
  27. exit
  28. else
  29. echo "Updating Postman to the latest version"
  30. fi
  31. fi
  32. echo "Downloading latest Postman tarball"
  33. if [ -z $curlExists ]; then
  34. wget -q --show-progress "https://dl.pstmn.io/download/latest/linux64" --content-disposition
  35. else
  36. curl -# "https://dl.pstmn.io/download/latest/linux64" -O -J
  37. fi
  38. if [ $? -gt 0 ]; then
  39. echo "Failed to download Postman tarball"
  40. exit
  41. fi
  42. if [ -d "Postman" ]; then
  43. echo "Removing old 'Postman/'"
  44. rm -rf "Postman/"
  45. fi
  46. echo "Extracting Postman tarball"
  47. tar -xf $(ls Postman*.tar.gz)
  48. if [ $? -gt 0 ]; then
  49. echo "Failed to extract Postman tarball"
  50. exit
  51. fi
  52. if [ -d "postman_$version" ]; then
  53. echo "Removing old 'postman_$version/'"
  54. rm -rf "postman_$version/"
  55. fi
  56. echo "Creating 'postman_$version' folder structure and files"
  57. mkdir -m 0755 -p "postman_$version"
  58. mkdir -m 0755 -p "postman_$version/usr/share/applications"
  59. touch "postman_$version/usr/share/applications/Postman.desktop"
  60. mkdir -m 0755 -p "postman_$version/usr/share/icons/hicolor/128x128/apps"
  61. mkdir -m 0755 -p "postman_$version/opt/postman"
  62. mkdir -m 0755 -p "postman_$version/DEBIAN"
  63. touch "postman_$version/DEBIAN/control" "postman_$version/DEBIAN/postinst" "postman_$version/DEBIAN/prerm"
  64. echo "Copying files"
  65. cp "Postman/app/resources/app/assets/icon.png" "postman_$version/usr/share/icons/hicolor/128x128/apps/postman.png"
  66. cp -R "Postman/"* "postman_$version/opt/postman/"
  67. echo "Testing whether to use '-e'"
  68. lines=$(echo "\n" | wc -l)
  69. e=""
  70. if [ $lines -eq 1 ]; then
  71. echo "'-e' is required"
  72. e="-e"
  73. else
  74. echo "'-e' is not required"
  75. fi
  76. echo "Writing files"
  77. echo $e "[Desktop Entry]\nType=Application\nName=Postman\nGenericName=Postman API Tester\nIcon=postman\nExec=postman\nPath=/opt/postman\nCategories=Development;" > "postman_$version/opt/postman/Postman.desktop"
  78. echo $e "Package: Postman\nVersion: $version\nSection: devel\nPriority: optional\nArchitecture: amd64\nDepends: gconf2, libgtk2.0-0, desktop-file-utils\nOptional: libcanberra-gtk-module\nMaintainer: You\nDescription: Postman\n API something" > "postman_$version/DEBIAN/control"
  79. echo $e "if [ -f \"/usr/bin/postman\" ]; then\n\tsudo rm -f \"/usr/bin/postman\"\nfi\n\nsudo ln -s \"/opt/postman/Postman\" \"/usr/bin/postman\"\n\ndesktop-file-install \"/opt/postman/Postman.desktop\"" > "postman_$version/DEBIAN/postinst"
  80. echo $e "if [ -f \"/usr/bin/postman\" ]; then\n\tsudo rm -f \"/usr/bin/postman\"\nfi" > "postman_$version/DEBIAN/prerm"
  81. echo "Setting modes"
  82. chmod 0775 "postman_$version/usr/share/applications/Postman.desktop"
  83. chmod 0775 "postman_$version/DEBIAN/control"
  84. chmod 0775 "postman_$version/DEBIAN/postinst"
  85. chmod 0775 "postman_$version/DEBIAN/prerm"
  86. echo "Validating modes"
  87. nc=""
  88. if [ $(stat -c "%a" "postman_$version/DEBIAN/control") != "775" ]; then
  89. echo "File modes are invalid, calling 'dpkg-deb' with '--nocheck'"
  90. nc="--nocheck"
  91. else
  92. echo "File modes are valid"
  93. fi
  94. if [ -f "postman_$version.deb" ]; then
  95. echo "Removing old 'postman_$version.deb'"
  96. rm -f "postman_$version.deb"
  97. fi
  98. echo "Building 'postman_$version.deb'"
  99. dpkg-deb $nc -b "postman_$version" > /dev/null
  100. if [ $? -gt 0 ]; then
  101. echo "Failed to build 'postman_$version.deb'"
  102. exit
  103. fi
  104. echo "Cleaning up"
  105. rm -f $(ls Postman*.tar.gz)
  106. rm -rf "Postman/"
  107. rm -rf "postman_$version/"
  108. while true; do
  109. read -p "Do you want to install 'postman_$version.deb' [Y/n] " yn
  110. if [ -z $yn ]; then
  111. yn="y"
  112. fi
  113. case $yn in
  114. [Yy]* ) break;;
  115. [Nn]* ) exit;;
  116. esac
  117. done
  118. echo "Installing"
  119. sudo apt install "./postman_$version.deb"
  120. if [ $? -gt 0 ]; then
  121. echo "Failed to install 'postman_$version.deb'"
  122. exit
  123. fi
  124. echo "Removing 'postman_$version.deb'"
  125. rm -f "postman_$version.deb"