Skip to content

Instantly share code, notes, and snippets.

@Razuuu
Last active May 1, 2024 13:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Razuuu/6bd91497f464650d54322ef0010ece53 to your computer and use it in GitHub Desktop.
Save Razuuu/6bd91497f464650d54322ef0010ece53 to your computer and use it in GitHub Desktop.
Sync LineageOS on a freshly installed Debian 12+ server
#!/bin/bash
#
# Script by Razuuu
#
# Variables
CONFIGFILE=$1
# Access to usershell via function
function user_shell() {
su ${USERNAME} -c "$*"
}
# Check shell argument
if [ -z ${CONFIGFILE} ]; then
echo "Usage: ./$(basename $0) <configfile>"
exit 999
fi
# Check if configfile exist
if [ ! -f ${CONFIGFILE} ]; then
# If not, create a template
echo "LINEAGE_VERSION=\"\" # e.g 18.1" >> ${CONFIGFILE}
echo -e "USERNAME=\"\" # without spaces\n" >> ${CONFIGFILE}
echo "SSH_PUBLIC_KEY=\"\"" >> ${CONFIGFILE}
echo -e "SSH_PRIVATE_KEY=\"\"\n" >> ${CONFIGFILE}
echo "GIT_USER=\"\"" >> ${CONFIGFILE}
echo "GIT_EMAIL=\"\"" >> ${CONFIGFILE}
echo "Created configfile \"${CONFIGFILE}\" due to the file not existing, please edit!"
exit 999
else
# Source file
source ${CONFIGFILE}
# Check if all is set
CONFIGVARS=("LINEAGE_VERSION" "USERNAME" "SSH_PUBLIC_KEY" "SSH_PRIVATE_KEY" "GIT_USER" "GIT_EMAIL")
for CONFIGVAR in "${CONFIGVARS[@]}"; do
CONFIGVARNOTSET="no"
if [ -z "${!CONFIGVAR}" ]; then
CONFIGVARNOTSET="yes"
echo "${CONFIGVAR} is not set"
fi
done
if [ ${CONFIGVARNOTSET} == "yes" ]; then
echo "Please edit the configfile!"
exit 999
fi
USERHOME="/home/${USERNAME}"
fi
# Update apt cache
apt update
# Install curl (needed for install packages)
apt -y install curl
# Install packages
APT_PACKAGES=$(curl -s https://wiki.lineageos.org/devices/beyond1lte/build | grep -o '<code class="language-plaintext highlighter-rouge">.*</code>' | awk -F'>|<' '{print $3}' | grep "bc" | grep "curl")
apt -y install ${APT_PACKAGES} repo screen python-is-python3 unzip git-lfs
# Fix libncurses5 not found by linking libcurses6
ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.5
ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5
# Create user
adduser --disabled-password --gecos "" ${USERNAME}
# Setup SSH
SSH_PATH="${USERHOME}/.ssh"
SSH_KEY_TYPE=$(echo ${SSH_PUBLIC_KEY} | grep -oE '^[^[:space:]]+' | sed 's/ssh-//')
mkdir -p ${SSH_PATH}
echo "${SSH_PUBLIC_KEY}" > ${SSH_PATH}/id_${SSH_KEY_TYPE}.pub
echo "${SSH_PRIVATE_KEY}" > ${SSH_PATH}/id_${SSH_KEY_TYPE}
chown ${USERNAME}:${USERNAME} -R ${SSH_PATH}
chmod 700 ${SSH_PATH}/
chmod 644 ${SSH_PATH}/id_${SSH_KEY_TYPE}.pub
chmod 600 ${SSH_PATH}/id_${SSH_KEY_TYPE}
# Setup Git
echo "[user]
name = ${GIT_USER}
email = ${GIT_EMAIL}
[filter \"lfs\"]
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
[color]
ui = auto" > ${USERHOME}/.gitconfig
chmod +x ${USERHOME}/.gitconfig
# Sync LineageOS sources
user_shell "mkdir -p ${USERHOME}/android/lineage"
user_shell "cd ${USERHOME}/android/lineage && repo init -u https://github.com/LineageOS/android.git -b lineage-${LINEAGE_VERSION} --git-lfs"
user_shell "cd ${USERHOME}/android/lineage && screen -dmS lineage_reposync repo sync"
echo "LineageOS syncing within a screen named lineage_reposync with the user ${USERNAME}!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment