Skip to content

Instantly share code, notes, and snippets.

@RBFraphael
Last active December 12, 2024 12:05
Show Gist options
  • Save RBFraphael/cad9c5b4f94ab78f88ea0a7c429f9aa7 to your computer and use it in GitHub Desktop.
Save RBFraphael/cad9c5b4f94ab78f88ea0a7c429f9aa7 to your computer and use it in GitHub Desktop.
Post install script for Linux Mint 22
#!/usr/bin/env bash
CURRENT_USER=$1
HOME="/home/$CURRENT_USER"
# Change URLs below with updated ones
DEB_DOCKER="https://desktop.docker.com/linux/main/amd64/docker-desktop-amd64.deb"
DEB_DRAWIO="https://github.com/jgraph/drawio-desktop/releases/download/v24.7.17/drawio-amd64-24.7.17.deb"
DEB_GOOGLE_CHROME="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
DEB_HYPER="https://releases.hyper.is/download/deb"
DEB_MICROSOFT_EDGE="https://go.microsoft.com/fwlink?linkid=2149051&brand=M102"
DEB_VBOX="https://download.virtualbox.org/virtualbox/7.1.4/virtualbox-7.1_7.1.4-165100~Ubuntu~noble_amd64.deb"
DEB_VSCODE="https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64"
DEB_ZOOM="https://zoom.us/client/6.2.6.2503/zoom_amd64.deb"
ANDROID_STUDIO_PACKAGE="https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2024.1.2.12/android-studio-2024.1.2.12-linux.tar.gz"
GO_PACKAGE="https://go.dev/dl/go1.23.2.linux-amd64.tar.gz"
MICROSOFT_REPO_PACKAGE="https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb"
PHPMYADMIN_PACKAGE="https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-english.zip"
VBOX_EXT_PACK="https://download.virtualbox.org/virtualbox/7.1.4/Oracle_VirtualBox_Extension_Pack-7.1.4.vbox-extpack"
C_YELLOW=`tput setaf 220`
C_RESET=`tput init`
check_root_user() {
if [ "$(id -u)" != 0 ]; then
echo 'Please run the script as root!'
echo 'We need to do administrative tasks'
exit
fi
}
check_user_arg() {
if [ -z "$CURRENT_USER" ]; then
echo 'User not specified.'
echo 'Specify the user by typing "ubuntu-post-install.sh <username>"'
exit
fi
}
check_home() {
if [ -z "$HOME" ]; then
echo 'Cannot set \$HOME variable.'
exit
fi
}
show_message() {
echo -e "${C_YELLOW}\n\
----------------------------------------------- \n\
## $1 \n\
----------------------------------------------- \n\
${C_RESET}"
}
update_system() {
apt update
apt upgrade -y
apt dist-upgrade -y
}
cleanup() {
apt autoremove -y
}
install_gnome_software() {
apt install gnome-software gnome-software-common gnome-software-plugin-flatpak -y
}
install_required_packages() {
apt install ca-certificates git gnupg curl gcc make perl build-essential -y
}
add_repositories() {
add-apt-repository ppa:ondrej/apache2 -y
add-apt-repository ppa:ondrej/php -y
add-apt-repository ppa:libreoffice/ppa -y
add-apt-repository ppa:papirus/papirus -y
add-apt-repository ppa:xtradeb/apps -y
wget -qO - https://hub.unity3d.com/linux/keys/public | gpg --dearmor | tee /etc/apt/trusted.gpg.d/Unity_Technologies_ApS.gpg > /dev/null
sh -c 'echo "deb [signedby=/etc/apt/trusted.gpg.d/Unity_Technologies_ApS.gpg] https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list'
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$UBUNTU_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
curl -fsSL https://keys.anydesk.com/repos/DEB-GPG-KEY -o /etc/apt/keyrings/anydesk.asc
chmod a+r /etc/apt/keyrings/anydesk.asc
echo "deb [signed-by=/etc/apt/keyrings/anydesk.asc] http://deb.anydesk.com/ all main" | tee /etc/apt/sources.list.d/anydesk-stable.list > /dev/null
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc | tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | tee /etc/apt/sources.list.d/ngrok.list
}
install_web_server() {
apt install apache2 libapache2-mod-fcgid \
php5.6-fpm php5.6-bz2 php5.6-curl php5.6-gd php5.6-geoip php5.6-http php5.6-imap php5.6-intl php5.6-json php5.6-ldap php5.6-mbstring php5.6-mcrypt php5.6-memcache php5.6-memcached php5.6-mongodb php5.6-mysql php5.6-pgsql php5.6-raphf php5.6-redis php5.6-smbclient php5.6-soap php5.6-sqlite3 php5.6-uploadprogress php5.6-xdebug php5.6-xml php5.6-yaml php5.6-zip \
php7.0-fpm php7.0-bz2 php7.0-curl php7.0-gd php7.0-geoip php7.0-http php7.0-imap php7.0-intl php7.0-json php7.0-ldap php7.0-mbstring php7.0-mcrypt php7.0-memcache php7.0-memcached php7.0-mongodb php7.0-mysql php7.0-pgsql php7.0-raphf php7.0-redis php7.0-smbclient php7.0-soap php7.0-sqlite3 php7.0-uploadprogress php7.0-uuid php7.0-xdebug php7.0-xml php7.0-yaml php7.0-zip \
php7.2-fpm php7.2-bz2 php7.2-curl php7.2-gd php7.2-geoip php7.2-http php7.2-imap php7.2-intl php7.2-json php7.2-ldap php7.2-mbstring php7.2-mcrypt php7.2-memcache php7.2-memcached php7.2-mongodb php7.2-mysql php7.2-pgsql php7.2-raphf php7.2-redis php7.2-smbclient php7.2-soap php7.2-sqlite3 php7.2-uploadprogress php7.2-uuid php7.2-xdebug php7.2-xml php7.2-yaml php7.2-zip \
php7.4-fpm php7.4-bz2 php7.4-curl php7.4-gd php7.4-geoip php7.4-http php7.4-imap php7.4-intl php7.4-json php7.4-ldap php7.4-mbstring php7.4-mcrypt php7.4-memcache php7.4-memcached php7.4-mongodb php7.4-mysql php7.4-pgsql php7.4-raphf php7.4-redis php7.4-smbclient php7.4-soap php7.4-sqlite3 php7.4-uploadprogress php7.4-uuid php7.4-xdebug php7.4-xml php7.4-yaml php7.4-zip \
php8.0-fpm php8.0-bz2 php8.0-curl php8.0-gd php8.0-http php8.0-imap php8.0-intl php8.0-ldap php8.0-mbstring php8.0-mcrypt php8.0-memcache php8.0-memcached php8.0-mongodb php8.0-mysql php8.0-pgsql php8.0-raphf php8.0-redis php8.0-smbclient php8.0-soap php8.0-sqlite3 php8.0-uploadprogress php8.0-uuid php8.0-xdebug php8.0-xml php8.0-yaml php8.0-zip \
php8.2-fpm php8.2-bz2 php8.2-curl php8.2-gd php8.2-http php8.2-imap php8.2-intl php8.2-ldap php8.2-mbstring php8.2-mcrypt php8.2-memcache php8.2-memcached php8.2-mongodb php8.2-mysql php8.2-pgsql php8.2-raphf php8.2-redis php8.2-smbclient php8.2-soap php8.2-sqlite3 php8.2-uploadprogress php8.2-uuid php8.2-xdebug php8.2-xml php8.2-yaml php8.2-zip \
php8.3-fpm php8.3-bz2 php8.3-curl php8.3-gd php8.3-http php8.3-imap php8.3-intl php8.3-ldap php8.3-mbstring php8.3-mcrypt php8.3-memcache php8.3-memcached php8.3-mongodb php8.3-mysql php8.3-pgsql php8.3-raphf php8.3-redis php8.3-smbclient php8.3-soap php8.3-sqlite3 php8.3-uploadprogress php8.3-uuid php8.3-xdebug php8.3-xml php8.3-yaml php8.3-zip \
php8.4-fpm php8.4-bz2 php8.4-curl php8.4-gd php8.4-http php8.4-imap php8.4-intl php8.4-ldap php8.4-mbstring php8.4-mcrypt php8.4-memcache php8.4-memcached php8.4-mongodb php8.4-mysql php8.4-pgsql php8.4-raphf php8.4-redis php8.4-soap php8.4-sqlite3 php8.4-uploadprogress php8.4-uuid php8.4-xdebug php8.4-xml php8.4-yaml php8.4-zip \
mariadb-server -y
a2dismod php*
a2enmod alias vhost_alias headers rewrite ssl fcgid proxy_fcgi
a2enconf php5.6-fpm php7.0-fpm php7.2-fpm php7.4-fpm php8.0-fpm php8.2-fpm php8.3-fpm php8.4-fpm
echo -e "\
export PHP56=\"proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost\" \n\
export PHP70=\"proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost\" \n\
export PHP72=\"proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost\" \n\
export PHP74=\"proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost\" \n\
export PHP80=\"proxy:unix:/run/php/php8.0-fpm.sock|fcgi://localhost\" \n\
export PHP82=\"proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost\" \n\
export PHP83=\"proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost\" \n\
export PHP84=\"proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost\" \n\
" | tee -a /etc/apache2/envvars > /dev/null
sed -i "s/www-data/$CURRENT_USER/g" /etc/apache2/envvars
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/5.6/fpm/pool.d/www.conf
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/7.0/fpm/pool.d/www.conf
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/7.2/fpm/pool.d/www.conf
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/7.4/fpm/pool.d/www.conf
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/8.2/fpm/pool.d/www.conf
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s/www-data/$CURRENT_USER/g" /etc/php/8.4/fpm/pool.d/www.conf
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/5.6/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/5.6/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/5.6/fpm/php.ini
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/7.0/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/7.0/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/7.0/fpm/php.ini
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/7.2/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/7.2/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/7.2/fpm/php.ini
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/7.4/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/7.4/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/7.4/fpm/php.ini
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/8.0/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/8.0/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/8.0/fpm/php.ini
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/8.2/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/8.2/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/8.2/fpm/php.ini
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/8.3/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/8.3/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/8.3/fpm/php.ini
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php/8.4/fpm/php.ini
sed -i "s/post_max_size = 8M/post_max_size = 10G/g" /etc/php/8.4/fpm/php.ini
sed -i "s/max_execution_time = 30/max_execution_time = 900/g" /etc/php/8.4/fpm/php.ini
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP83}
</FilesMatch>
AccessFileName .htaccess .phpv
<Directory $HOME/Web> \n\
Options Indexes FollowSymLinks \n\
AllowOverride All \n\
Require all granted \n\
</Directory> \n\
<VirtualHost *:80> \n\
ServerName local.host \n\
ServerAlias localhost \n\
DocumentRoot $HOME/Web \n\
ErrorLog \${APACHE_LOG_DIR}/error.log \n\
CustomLog \${APACHE_LOG_DIR}/access.log combined \n\
</VirtualHost> \n\
<VirtualHost *:80> \n\
ServerAlias *.*.*.local.host \n\
ServerAlias *.*.*.localhost \n\
VirtualDocumentRoot $HOME/Web/%3/%2/%1 \n\
ErrorLog \${APACHE_LOG_DIR}/error.log \n\
CustomLog \${APACHE_LOG_DIR}/access.log combined \n\
</VirtualHost> \n\
<VirtualHost *:80> \n\
ServerAlias *.*.local.host \n\
ServerAlias *.*.localhost \n\
VirtualDocumentRoot $HOME/Web/%2/%1 \n\
ErrorLog \${APACHE_LOG_DIR}/error.log \n\
CustomLog \${APACHE_LOG_DIR}/access.log combined \n\
</VirtualHost> \n\
<VirtualHost *:80> \n\
ServerAlias *.local.host \n\
ServerAlias *.localhost \n\
VirtualDocumentRoot $HOME/Web/%1 \n\
ErrorLog \${APACHE_LOG_DIR}/error.log \n\
CustomLog \${APACHE_LOG_DIR}/access.log combined \n\
</VirtualHost> \n\
" | tee /etc/apache2/sites-available/localhost.conf > /dev/null
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP83}
</FilesMatch>
AccessFileName .htaccess .phpv
<Directory /home/raphael/Web> \n\
Options Indexes FollowSymLinks \n\
AllowOverride All \n\
Require all granted \n\
</Directory> \n\
<VirtualHost *:443> \n\
ServerName local.host \n\
ServerAlias localhost \n\
DocumentRoot /home/raphael/Web \n\
SSLEngine On \n\
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem \n\
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key \n\
ErrorLog \${APACHE_LOG_DIR}/error-ssl.log \n\
CustomLog \${APACHE_LOG_DIR}/access-ssl.log combined \n\
</VirtualHost> \n\
<VirtualHost *:443> \n\
ServerAlias *.*.*.local.host \n\
ServerAlias *.*.*.localhost \n\
VirtualDocumentRoot /home/raphael/Web/%3/%2/%1 \n\
SSLEngine On \n\
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem \n\
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key \n\
ErrorLog \${APACHE_LOG_DIR}/error-ssl.log \n\
CustomLog \${APACHE_LOG_DIR}/access-ssl.log combined \n\
</VirtualHost> \n\
<VirtualHost *:443> \n\
ServerAlias *.*.local.host \n\
ServerAlias *.*.localhost \n\
VirtualDocumentRoot /home/raphael/Web/%2/%1 \n\
SSLEngine On \n\
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem \n\
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key \n\
ErrorLog \${APACHE_LOG_DIR}/error-ssl.log \n\
CustomLog \${APACHE_LOG_DIR}/access-ssl.log combined \n\
</VirtualHost> \n\
<VirtualHost *:443> \n\
ServerAlias *.local.host \n\
ServerAlias *.localhost \n\
VirtualDocumentRoot /home/raphael/Web/%1 \n\
SSLEngine On \n\
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem \n\
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key \n\
ErrorLog \${APACHE_LOG_DIR}/error-ssl.log \n\
CustomLog \${APACHE_LOG_DIR}/access-ssl.log combined \n\
</VirtualHost> \n\
" | tee /etc/apache2/sites-available/localhost-ssl.conf > /dev/null
a2dissite 000-default
a2ensite localhost
a2ensite localhost-ssl
service apache2 restart
service php5.6-fpm reload
service php5.6-fpm restart
service php7.0-fpm reload
service php7.0-fpm restart
service php7.2-fpm reload
service php7.2-fpm restart
service php7.4-fpm reload
service php7.4-fpm restart
service php8.0-fpm reload
service php8.0-fpm restart
service php8.2-fpm reload
service php8.2-fpm restart
service php8.3-fpm reload
service php8.3-fpm restart
service php8.4-fpm reload
service php8.4-fpm restart
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP84}
</FilesMatch>
" > $HOME/Web/.phpv_84
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP83}
</FilesMatch>
" > $HOME/Web/.phpv_83
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP82}
</FilesMatch>
" > $HOME/Web/.phpv_82
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP80}
</FilesMatch>
" > $HOME/Web/.phpv_80
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP74}
</FilesMatch>
" > $HOME/Web/.phpv_74
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP72}
</FilesMatch>
" > $HOME/Web/.phpv_72
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP70}
</FilesMatch>
" > $HOME/Web/.phpv_70
echo -e "\
<FilesMatch \\.php$>
SetHandler \${PHP56}
</FilesMatch>
" > $HOME/Web/.phpv_56
update-alternatives --set php /usr/bin/php8.3
}
install_phpmyadmin() {
wget $PHPMYADMIN_PACKAGE -O $HOME/Web/phpMyAdmin.zip
unzip $HOME/Web/phpMyAdmin.zip -d $HOME/Web
rm $HOME/Web/phpMyAdmin.zip
mv $HOME/Web/phpMyAdmin-5.2.1-english $HOME/Web/phpmyadmin
ln -s $HOME/Web/phpmyadmin $HOME/Web/pma
echo -e "<?php\n\
\$cfg['blowfish_secret'] = '$(uuidgen)';\n\
\$cfg['Servers'][1]['auth_type'] = 'config';\n\
\$cfg['Servers'][1]['user'] = '$CURRENT_USER';\n\
\$cfg['Servers'][1]['AllowNoPassword'] = true;\n\
\$cfg['ThemeDefault'] = 'blueberry';\n\
\$cfg['ExecTimeLimit'] = 900;\n" | tee $HOME/Web/phpmyadmin/config.inc.php > /dev/null
wget "https://files.phpmyadmin.net/themes/blueberry/1.1.0/blueberry-1.1.0.zip" -O $HOME/Web/phpmyadmin/themes/blueberry.zip
unzip $HOME/Web/phpmyadmin/themes/blueberry.zip -d $HOME/Web/phpmyadmin/themes
rm $HOME/Web/phpmyadmin/themes/blueberry.zip
chown -R $CURRENT_USER:$CURRENT_USER $HOME/Web
}
install_docker() {
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
}
install_unity_hub() {
apt install unityhub -y
}
install_anydesk() {
apt install anydesk -y
}
install_ngrok() {
apt install ngrok -y
}
install_other_packages() {
apt install antimicro cpu-x cheese papirus-icon-theme hardinfo simplescreenrecorder \
stacer vlc filezilla filezilla-theme-papirus samba samba-common-bin smbclient remmina \
remmina-plugin-rdp remmina-plugin-vnc ttf-* fonts-roboto* dconf-editor openssh-server \
redshift redshift-gtk gnome-font-viewer -y
}
install_flatpak_apps() {
flatpak install com.spotify.Client com.slack.Slack org.blender.Blender org.kde.krita \
org.inkscape.Inkscape org.gimp.GIMP org.kde.kdenlive com.usebottles.bottles com.github.tchx84.Flatseal \
com.valvesoftware.Steam com.getpostman.Postman org.gnome.meld org.sqlitebrowser.sqlitebrowser \
org.telegram.desktop com.discordapp.Discord com.github.IsmaelMartinez.teams_for_linux com.todoist.Todoist \
org.flameshot.Flameshot io.github.Figma_Linux.figma_linux org.kde.okular io.dbeaver.DBeaverCommunity \
com.github.PintaProject.Pinta com.heroicgameslauncher.hgl it.mijorus.gearlever org.audacityteam.Audacity \
org.gnome.clocks org.gnome.SoundRecorder rest.insomnia.Insomnia uk.org.greenend.chiark.sgtatham.putty \
com.uploadedlobster.peek com.poweriso.PowerISO io.github.nokse22.Exhibit org.DolphinEmu.dolphin-emu \
org.ppsspp.PPSSPP app.xemu.xemu org.duckstation.DuckStation org.qbittorrent.qBittorrent org.gnome.Boxes -y
}
create_home_dirs() {
mkdir $HOME/Applications
chown -R $CURRENT_USER:$CURRENT_USER $HOME/Applications
mkdir $HOME/bin
chown -R $CURRENT_USER:$CURRENT_USER $HOME/bin
mkdir $HOME/Projects
chown -R $CURRENT_USER:$CURRENT_USER $HOME/Projects
mkdir $HOME/Git
chown -R $CURRENT_USER:$CURRENT_USER $HOME/Git
mkdir $HOME/Web
chown -R $CURRENT_USER:$CURRENT_USER $HOME/Web
mkdir $HOME/deb_temp
chown -R $CURRENT_USER:$CURRENT_USER $HOME/deb_temp
mkdir $HOME/.themes
chown -R $CURRENT_USER:$CURRENT_USER $HOME/.themes
}
download_third_party_packages() {
wget $DEB_DOCKER -P $HOME/deb_temp/
wget $DEB_DRAWIO -P $HOME/deb_temp/
wget $DEB_GOOGLE_CHROME -P $HOME/deb_temp/
wget $DEB_HYPER -O $HOME/deb_temp/hyper.deb
wget $DEB_MICROSOFT_EDGE -O $HOME/deb_temp/edge.deb
wget $DEB_VBOX -P $HOME/deb_temp/
wget $DEB_VSCODE -O $HOME/deb_temp/code.deb
wget $DEB_ZOOM -P $HOME/deb_temp/
wget $MICROSOFT_REPO_PACKAGE -P $HOME/deb_temp/
wget $VBOX_EXT_PACK -O $HOME/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack
}
install_third_party_packages() {
dpkg -i $HOME/deb_temp/*.deb
apt install -f -y
rm -rf $HOME/deb_temp
vboxmanage extpack install --replace $HOME/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack
rm $HOME/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack
}
install_dotnet_8() {
apt install dotnet8 \
dotnet-apphost-pack-8.0 \
dotnet-host-8.0 \
dotnet-hostfxr-8.0 \
dotnet-runtime-8.0 \
dotnet-sdk-8.0 \
dotnet-targeting-pack-8.0 \
dotnet-templates-8.0 \
aspnetcore-runtime-8.0 \
aspnetcore-targeting-pack-8.0 -y
}
install_composer() {
wget https://getcomposer.org/download/latest-stable/composer.phar -O $HOME/bin/composer
chown $CURRENT_USER:$CURRENT_USER $HOME/bin/composer
chmod +x $HOME/bin/composer
wget https://getcomposer.org/download/latest-1.x/composer.phar -O $HOME/bin/composer1
chown $CURRENT_USER:$CURRENT_USER $HOME/bin/composer1
chmod +x $HOME/bin/composer1
}
setup_aliases() {
touch $HOME/.bash_aliases
chown $CURRENT_USER:$CURRENT_USER $HOME/.bash_aliases
echo "alias ci='composer install'" >> $HOME/.bash_aliases
echo "alias cr='composer require'" >> $HOME/.bash_aliases
echo "alias cu='composer update'" >> $HOME/.bash_aliases
echo "alias pa='php artisan'" >> $HOME/.bash_aliases
echo "alias ni='npm install'" >> $HOME/.bash_aliases
echo "alias nr='npm run'" >> $HOME/.bash_aliases
echo "alias nrm='npm remove'" >> $HOME/.bash_aliases
echo "alias nvi='nvm install'" >> $HOME/.bash_aliases
echo "alias nvu='nvm use'" >> $HOME/.bash_aliases
echo "alias gc='git clone'" >> $HOME/.bash_aliases
echo "alias gf='git fetch'" >> $HOME/.bash_aliases
echo "alias gp='git pull'" >> $HOME/.bash_aliases
echo "alias gfp='git fetch && git pull'" >> $HOME/.bash_aliases
ln -s /usr/bin/gnome-calculator $HOME/bin/calc
chown $CURRENT_USER:$CURRENT_USER $HOME/bin/calc
}
setup_user_bin() {
echo "export PATH=\$PATH:\$HOME/bin" >> $HOME/.bashrc
}
setup_user_groups() {
usermod -aG vboxusers $CURRENT_USER
usermod -aG sambashare $CURRENT_USER
}
setup_dnsmasq() {
echo -e "\
[main] \n\
plugins=ifupdown,keyfile \n\
dns=dnsmasq \n\
\n\
[ifupdown] \n\
managed=false \n\
\n\
[device] \n\
wifi.scan-rand-mac-address=no \n\
" | tee /etc/NetworkManager/NetworkManager.conf > /dev/null
mv /etc/resolv.conf /etc/resolv.conf.original
ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
echo -e "\
address=/localhost/127.0.0.1\n\
address=/local.host/127.0.0.1\n\
" | tee /etc/NetworkManager/dnsmasq.d/localhost.conf > /dev/null
systemctl reload NetworkManager.service
}
add_user_to_samba() {
smbpasswd -a $CURRENT_USER
}
setup_mysql() {
mysql_secure_installation
mysql --execute="CREATE USER $CURRENT_USER;"
mysql --execute="GRANT ALL PRIVILEGES ON *.* TO $CURRENT_USER;"
mysql --execute="FLUSH PRIVILEGES;"
service mariadb stop
mv /var/lib/mysql /home/mysql
sed -i '/#datadir/c\datadir = /home/mysql' /etc/mysql/mariadb.conf.d/50-server.cnf
sed -i "s/ProtectHome=true/ProtectHome=false/g" /usr/lib/systemd/system/mariadb.service
systemctl daemon-reload
service mariadb restart
}
install_android_studio() {
wget $ANDROID_STUDIO_PACKAGE -O $HOME/Applications/android-studio.tar.gz
tar -xvf $HOME/Applications/android-studio.tar.gz -C $HOME/Applications
rm $HOME/Applications/android-studio.tar.gz
chown -R $CURRENT_USER:$CURRENT_USER $HOME/Applications
echo -e "[Desktop Entry]
Name=Android Studio
Exec=$HOME/Applications/android-studio/bin/studio.sh
Comment=Android Studio IDE
Terminal=false
Icon=android-studio
Type=Application
Categories=Development;IDE;" >$HOME/.local/share/applications/android-studio.desktop
chown $CURRENT_USER:$CURRENT_USER $HOME/.local/share/applications/android-studio.desktop
chmod +x $HOME/.local/share/applications/android-studio.desktop
}
install_golang() {
wget $GO_PACKAGE -O $HOME/Applications/go.tar.gz
tar -xvf $HOME/Applications/go.tar.gz -C $HOME/Applications
rm $HOME/Applications/go.tar.gz
ln -s $HOME/Applications/go/bin/go $HOME/bin/go
ln -s $HOME/Applications/go/bin/gofmt $HOME/bin/gofmt
chown -R $CURRENT_USER:$CURRENT_USER $HOME/Applications
}
add_vscode_to_context_menu() {
if [ -f "/usr/share/applications/code.desktop" ]; then
sed -i '/MimeType/c\MimeType=text/plain;inode/directory;application/x-code-workspace;' /usr/share/applications/code.desktop
update-desktop-database
fi
}
sysctl_config() {
echo "kernel.apparmor_restrict_unprivileged_userns=0" >> /etc/sysctl.conf
sysctl -p
}
ask_reboot() {
echo 'Reboot now? (y/n)'
while true; do
read choice
if [[ "$choice" == 'y' || "$choice" == 'Y' ]]; then
reboot
exit 0
fi
if [[ "$choice" == 'n' || "$choice" == 'N' ]]; then
break
fi
done
}
main() {
check_root_user
check_user_arg
check_home
show_message "Installing Gnome Software"
install_gnome_software
show_message "Creating Home Dirs"
create_home_dirs
show_message "Installing required packages"
update_system
install_required_packages
show_message "Adding repositories"
add_repositories
update_system
show_message "Installing Web Server"
install_web_server
show_message "Installing phpMyAdmin"
install_phpmyadmin
show_message "Installing Docker"
install_docker
show_message "Installing Unity Hub"
install_unity_hub
show_message "Installing Anydesk"
install_anydesk
show_message "Installing ngrok"
install_ngrok
show_message "Installing Other Packages"
update_system
install_other_packages
show_message "Installing Flatpak Apps"
install_flatpak_apps
show_message "Downloading and installing third-party packages"
download_third_party_packages
update_system
install_third_party_packages
show_message "Installing .NET 8"
update_system
install_dotnet_8
show_message "Installing Composer"
install_composer
show_message "Setting up user aliases"
setup_aliases
show_message "Setting up user /bin"
setup_user_bin
show_message "Adding user $CURRENT_USER to groups"
setup_user_groups
show_message "Setting up reverse proxy with dnsmasq"
setup_dnsmasq
show_message "Adding user $CURRENT_USER to Samba"
add_user_to_samba
show_message "Setting up MySQL with user $CURRENT_USER"
setup_mysql
show_message "Installing Android Studio"
install_android_studio
show_message "Installing GoLang"
install_golang
show_message "Adding VS Code MimeTypes"
add_vscode_to_context_menu
show_message "Apply sysctl configs"
sysctl_config
show_message "Finished!"
echo "It's recommended to reboot your system."
ask_reboot
}
(return 2> /dev/null) || main
@RBFraphael
Copy link
Author

RBFraphael commented Nov 8, 2024

sudo mint-post-install.sh <current user>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment