|
#!/bin/sh |
|
|
|
# SPDX-FileCopyrightText: 2017-2024 SanderTheDragon <[email protected]> |
|
# |
|
# 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" |
@fakhamatia I don't get that message on my system (Debian Testing), but it looks like it is caused by the fact that the download and build is done by your current user instead of the
_apt
user. And in my opinion the build should be done by the current user.I could add a check to see if the
_apt
user exists andchown
the package if it does. But since the install succeeds and the loglevel is notice, I think the best way for now is to just ignore it.