|
#!/bin/sh |
|
|
|
# SPDX-FileCopyrightText: 2017-2024 SanderTheDragon <sanderthedragon@zoho.com> |
|
# |
|
# SPDX-License-Identifier: MIT |
|
|
|
arch=$(dpkg --print-architecture) |
|
echo "Detected architecture: $arch" |
|
|
|
case "$arch" in |
|
amd64) downloadURL="https://dl.pstmn.io/download/latest/linux64";; |
|
arm64) downloadURL="https://dl.pstmn.io/download/latest/linux_arm64";; |
|
|
|
*) |
|
echo "Unsupported architecture: $arch" |
|
exit |
|
;; |
|
esac |
|
|
|
curlExists=$(command -v curl) |
|
echo "Testing Postman version" |
|
|
|
dateString="" |
|
if [ -z $curlExists ]; then |
|
dateString=$(wget -S --spider $downloadURL 2>&1 | grep "Date" | awk -F ':' '{ print $2 }') |
|
else |
|
dateString=$(curl -sI $downloadURL 2>&1 | grep "date" | awk -F ':' '{ print $2 }') |
|
fi |
|
|
|
targetName="postman-$(date --date="$dateString" "+%y-%j-%H").tar.gz" |
|
versionMaj=$(echo "$targetName" | awk -F '.' '{ print $1 }' | awk -F '-' '{ print $2 }') |
|
versionMin=$(echo "$targetName" | awk -F '.' '{ print $1 }' | awk -F '-' '{ print $3 }') |
|
versionRev=$(echo "$targetName" | awk -F '.' '{ print $1 }' | awk -F '-' '{ print $4 }') |
|
version="$versionMaj.$versionMin-$versionRev" |
|
echo "Most recent Postman version V$version" |
|
|
|
current=$(dpkg-query --showformat='${Version}' --show postman 2> /dev/null) |
|
if [ $? -gt 0 ]; then |
|
echo "Postman is not installed" |
|
else |
|
echo "Installed version V$current" |
|
|
|
if [ "$current" = "$version" ]; then |
|
echo "The most recent version of Postman is currently installed" |
|
exit |
|
else |
|
echo "Updating Postman to the latest version" |
|
fi |
|
fi |
|
|
|
originalPWD="$(pwd)" |
|
targetPWD="$(mktemp -d postman.XXXXXX)" |
|
cd "$targetPWD" |
|
|
|
echo "Downloading latest Postman tarball" |
|
|
|
if [ -z $curlExists ]; then |
|
wget -q --show-progress $downloadURL -O $targetName |
|
else |
|
curl -# $downloadURL -o $targetName |
|
fi |
|
|
|
if [ $? -gt 0 ]; then |
|
echo "Failed to download Postman tarball" |
|
exit |
|
fi |
|
|
|
echo "Extracting Postman tarball" |
|
tar -xf $targetName |
|
|
|
if [ $? -gt 0 ]; then |
|
echo "Failed to extract Postman tarball" |
|
exit |
|
fi |
|
|
|
echo "Creating 'postman_$version' folder structure and files" |
|
mkdir -m 0755 -p "postman_$version" |
|
|
|
mkdir -m 0755 -p "postman_$version/usr/share/applications" |
|
touch "postman_$version/usr/share/applications/Postman.desktop" |
|
|
|
mkdir -m 0755 -p "postman_$version/usr/share/icons/hicolor/128x128/apps" |
|
|
|
mkdir -m 0755 -p "postman_$version/opt/postman" |
|
|
|
mkdir -m 0755 -p "postman_$version/DEBIAN" |
|
touch "postman_$version/DEBIAN/control" "postman_$version/DEBIAN/postinst" "postman_$version/DEBIAN/prerm" |
|
|
|
echo "Copying files" |
|
cp "Postman/app/resources/app/assets/icon.png" "postman_$version/usr/share/icons/hicolor/128x128/apps/postman.png" |
|
cp -R "Postman/"* "postman_$version/opt/postman/" |
|
|
|
echo "Testing whether to use '-e'" |
|
lines=$(echo "\n" | wc -l) |
|
e="" |
|
if [ $lines -eq 1 ]; then |
|
echo "'-e' is required" |
|
e="-e" |
|
else |
|
echo "'-e' is not required" |
|
fi |
|
|
|
echo "Writing files" |
|
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" |
|
echo $e "Package: Postman\nVersion: $version\nSection: devel\nPriority: optional\nArchitecture: $arch\nDepends: libgtk-3-0, desktop-file-utils\nMaintainer: You\nDescription: Postman\n API something" > "postman_$version/DEBIAN/control" |
|
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" |
|
echo $e "if [ -f \"/usr/bin/postman\" ]; then\n\tsudo rm -f \"/usr/bin/postman\"\nfi" > "postman_$version/DEBIAN/prerm" |
|
|
|
echo "Setting modes" |
|
|
|
chmod 0775 "postman_$version/usr/share/applications/Postman.desktop" |
|
|
|
chmod 0775 "postman_$version/DEBIAN/control" |
|
chmod 0775 "postman_$version/DEBIAN/postinst" |
|
chmod 0775 "postman_$version/DEBIAN/prerm" |
|
|
|
echo "Validating modes" |
|
nc="" |
|
if [ $(stat -c "%a" "postman_$version/DEBIAN/control") != "775" ]; then |
|
echo "File modes are invalid, calling 'dpkg-deb' with '--nocheck'" |
|
nc="--nocheck" |
|
else |
|
echo "File modes are valid" |
|
fi |
|
|
|
echo "Building 'postman_$version.deb'" |
|
dpkg-deb $nc -b "postman_$version" > /dev/null |
|
|
|
if [ $? -gt 0 ]; then |
|
echo "Failed to build 'postman_$version.deb'" |
|
exit |
|
fi |
|
|
|
mv "postman_$version.deb" "$originalPWD" |
|
cd "$originalPWD" |
|
|
|
echo "Cleaning up" |
|
rm -rf "$targetPWD" |
|
|
|
while true; do |
|
read -p "Do you want to install 'postman_$version.deb' [Y/n] " yn |
|
|
|
if [ -z $yn ]; then |
|
yn="y" |
|
fi |
|
|
|
case $yn in |
|
[Yy]* ) break;; |
|
[Nn]* ) exit;; |
|
esac |
|
done |
|
|
|
echo "Installing" |
|
sudo apt install -y "./postman_$version.deb" |
|
|
|
if [ $? -gt 0 ]; then |
|
echo "Failed to install 'postman_$version.deb'" |
|
exit |
|
fi |
|
|
|
echo "Removing 'postman_$version.deb'" |
|
rm -f "postman_$version.deb" |
@0xjams Thanks for these improvements!
I moved the architecture check to the top, so the date/version is checked for the correct architecture (I would expect that they are the same, but just to be sure).
I also checked the dependencies, and it seems like it now depends on GTK 3 instead of GTK 2, so gconf2 is not needed anymore.