From 1922e731e7d1b9ecae21c69e407e1c21f1c69096 Mon Sep 17 00:00:00 2001 From: Emiliano Vavassori Date: Sun, 17 Jun 2018 14:28:05 +0200 Subject: [PATCH] Initial import. --- README.md | 23 +++++++++++++++++++++++ Scratch2.desktop | 11 +++++++++++ air-installer.sh | 37 +++++++++++++++++++++++++++++++++++++ install.sh | 25 +++++++++++++++++++++++++ scratch-wrapper.sh | 22 ++++++++++++++++++++++ scratch.png | Bin 0 -> 13265 bytes 6 files changed, 118 insertions(+) create mode 100644 README.md create mode 100644 Scratch2.desktop create mode 100755 air-installer.sh create mode 100644 install.sh create mode 100755 scratch-wrapper.sh create mode 100644 scratch.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..04d16f4 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Simplify installation for Scratch 456.0.1 on Linux # + +These scripts simplify the deployment and distribution of Scratch on +GNU/Linux. + +## Installation ## + +Run the `install.sh` script as root to install Scratch on the local machine on +`/opt/scratch`: + + sudo bash install.sh + +## Adobe AIR and redistribution ## + +You should not distribute Adobe AIR based on Adobe AIR License, so we have +devised a script to install it on GNU/Linux systems accepting the License and +using Adobe AIR SDK for simplified management. + +Adobe AIR installation is managed at first launch of Scratch (via the +`scratch-wrapper.sh` script) or it can be done launching the +`air-installer.sh` script by hand with root: + + sudo bash air-installer.sh diff --git a/Scratch2.desktop b/Scratch2.desktop new file mode 100644 index 0000000..79f27f0 --- /dev/null +++ b/Scratch2.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Exec=/opt/scratch/scratch-wrapper.sh +Icon=/opt/scratch/scratch.png +Terminal=false +Name=Scratch 2 +Comment=Programming system and content development tool +Categories=Application;Education;Development;ComputerScience; +MimeType=application/x-scratch-project diff --git a/air-installer.sh b/air-installer.sh new file mode 100755 index 0000000..62b43d2 --- /dev/null +++ b/air-installer.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# LibreSchool project - info@libreschool.org +# Install AIR SDK and run AIR application from there. + +echo 1 +echo "1 - Installing dependencies" &> /tmp/ls-air-installer.log +# Installing depending packages +apt-get install -y libgtk2.0-0:i386 libstdc++6:i386 libxml2:i386 libxslt1.1:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386 libqt4-qt3support:i386 libgnome-keyring0:i386 libnss-mdns:i386 libnss3:i386 &>> /tmp/ls-air-installer.log +echo 25 +echo "25 - Linking libraries" &>> /tmp/ls-air-installer.log +ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 /usr/lib/libgnome-keyring.so.0 &>> /tmp/ls-air-installer.log +ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib/libgnome-keyring.so.0.2.0 &>> /tmp/ls-air-installer.log +echo 30 +echo "30 - Downloading AIR SDK" &>> /tmp/ls-air-installer.log +wget --no-check-certificate https://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRSDK.tbz2 -O /tmp/AdobeAIRSDK.tbz2 &>> /tmp/ls-air-installer.log +echo 50 +echo "50 - Directory for AIR SDK" &>> /tmp/ls-air-installer.log +mkdir -p /opt/adobe-air-sdk &>> /tmp/ls-air-installer.log +echo 55 +echo "55 - Unpacking AIR SDK" &>> /tmp/ls-air-installer.log +# Installing SDK +tar jxf /tmp/AdobeAIRSDK.tbz2 -C /opt/adobe-air-sdk &>> /tmp/ls-air-installer.log +rm -f /tmp/AdobeAIRSDK.tbz2 &>> /tmp/ls-air-installer.log +echo 75 +echo "75 - Downloading AIR wrapper" &>> /tmp/ls-air-installer.log +# Installing wrapper for SDK to run AIR simply +wget --no-check-certificate https://aur.archlinux.org/cgit/aur.git/snapshot/adobe-air.tar.gz -O /tmp/adobe-air.tar.gz &>> /tmp/ls-air-installer.log +echo 85 +echo "85 - Unpacking AIR wrapper" &>> /tmp/ls-air-installer.log +tar xzf /tmp/adobe-air.tar.gz -C /opt/adobe-air-sdk &>> /tmp/ls-air-installer.log +rm -f /tmp/adobe-air.tar.gz &>> /tmp/ls-air-installer.log +echo 95 +echo "95 - Finishing" &>> /tmp/ls-air-installer.log +chmod +x /opt/adobe-air-sdk/adobe-air/adobe-air &>> /tmp/ls-air-installer.log +touch /opt/scratch/.air-installed &>> /tmp/ls-air-installer.log +echo 100 diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..4bbeca7 --- /dev/null +++ b/install.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright 2018 - LibreSchool Project + +# Prepare and install Scratch for distribution. + +# Scratch itself is distributable, Adobe AIR is not. +# So we prepare a folder for Scratch, leaving download and accepting of the +# license to the user at first launch of Scratch. + +mkdir -p /opt/scratch +cp * /opt/scratch +find /opt/scratch -iname \*.sh -exec chmod +x {} \; + +# Gets two different versions of Scratch from the site, links the highest one. + +# Scratch 442 +wget --no-check-certificates https://scratch.mit.edu/scratchr2/static/sa/Scratch-442.air -O /opt/scratch/Scratch-442.air &> /dev/null + +# Scratch 456.0.1 +wget --no-check-certificates https://scratch.mit.edu/scratchr2/static/sa/Scratch-456.0.1.air -O /opt/scratch/Scratch-456.0.1.air &> /dev/null + +ln -sf /opt/scratch/Scratch-456.0.1.air /opt/scratch/Scratch.air &> /dev/null + +desktop-file-install /opt/scratch/Scratch2.desktop diff --git a/scratch-wrapper.sh b/scratch-wrapper.sh new file mode 100755 index 0000000..0216a21 --- /dev/null +++ b/scratch-wrapper.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# LibreSchool project - info@libreschool.org +# This wrapper permits to download and install Adobe Air runtime with user +# consent + +if [[ -f /opt/scratch/.air-installed ]]; then + # Run Scratch + /opt/adobe-air-sdk/adobe-air/adobe-air /opt/scratch/Scratch.air +else + zenity --info --icon-name=info --text 'Sembra che in questo sistema non sia installato Adobe AIR, necessario per eseguire Scratch 2.\nPrego leggere ed aderire ai termini di licenza di Adobe AIR.' --no-wrap + + # Ask the user for the final acceptance. + zenity --question --text 'Accettare la licenza di Adobe AIR SDK?\n\nSe la licenza non viene accettata, sarà impossibile eseguire Scratch 2.' --default-cancel --no-wrap + if [[ $? -eq 1 ]]; then + exit + else + pkexec /opt/scratch/air-installer.sh | zenity --progress --text 'Installazione e configurazione di Adobe AIR in corso...' --auto-close --no-cancel --auto-kill --percentage=1 + + (( $? != 0 )) && zenity --error --text 'Errore in fase di configurazione di Adobe AIR.' && exit 1 || zenity --info --text "L'installazione è andata a buon fine.\nPrego rilanciare Scratch per avviare effettivamente l'applicazione." --no-wrap + fi +fi diff --git a/scratch.png b/scratch.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6bd36e4e1e6bf9a17894b354b7cd1ea58f4a63 GIT binary patch literal 13265 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 literal 0 HcmV?d00001