Add clearing support (directly on remote server)

This commit is contained in:
Alexandre CATTEAU 2022-04-18 11:54:06 +02:00
parent bb27c7061f
commit 4723e1aa35
4 changed files with 93 additions and 66 deletions

View File

@ -13,5 +13,7 @@ In a nutshell:
Version 1.1 is an adapted version 1, with remote repository. The idea is to replace NFS by SCP for everything related Version 1.1 is an adapted version 1, with remote repository. The idea is to replace NFS by SCP for everything related
with connection to repository. with connection to repository.
We also have a specific clearing script, which should run directly on remote server.
#### TODO #### TODO
* clear function is not implemented yet RAS

82
clear-repo.sh Executable file
View File

@ -0,0 +1,82 @@
#!/bin/bash
# The purpose of this script is to clear our custom pacman repository
# i.e. remove older versions of packages
# This script should NOT be run as root.
# Make sure that AWK rules file is present, readable and correctly set in this script's parameters
init() {
# Only run if the user is not root
if [[ $USER = 'root' ]] ; then
echo "You cannot run this script as root!"
exit 1
fi
if [ ! -e $repo_directory/$repo_db_file ] ; then
echo "Could not find db file. Exiting..."
exit 1
fi
source variables.conf
echo "ArchRepo clearing script"
}
clearRepo() {
stream=$(tar xOf $repo_directory/$repo_db_file --wildcards */desc | awk -f $awk_rules_file)
OIFS=$IFS
IFS='|'
stream="${stream:1}"
current=""
for package in $stream
do
IFS='
'
count=0
for line in $package; do
if [ $count -eq 0 ]; then
current="$current $line"
else
continue
fi
((count++))
done
IFS='|'
done
IFS=$OIFS
cd $repo_directory
reg="^($repo_name.).+"
for filename in *; do
if [[ $filename =~ $reg || $filename = 'sync' || $filename = 'local' || $filename = 'resources' ]]; then
continue
fi
for package in $current; do
if [ $filename = $package ]; then
continue 2
fi
done
echo "Removing $filename..."
rm $filename
done
}
run_directory_path=$(pwd)
# Set parameters
repo_db_file=$repo_name.db.tar
repo_db_filesfile=$repo_name.files.tar
awk_rules_file='parser.awk'
# Main process
if [ "$1" = "" ]; then
init
clearRepo
else
echo "Please call this script without any arguments."
exit 1
fi
exit 0

View File

@ -95,8 +95,6 @@ checkUpdates() {
echo "Checking for updates:" echo "Checking for updates:"
upgraded_packages="" upgraded_packages=""
scp $ssh_options $remote_repository/$repo_db_file $remote_repository/$repo_db_filesfile $run_directory_path/ scp $ssh_options $remote_repository/$repo_db_file $remote_repository/$repo_db_filesfile $run_directory_path/
# scp $ssh_options $remote_repository/$repo_db_file $run_directory_path/
# cp $run_directory_path/../$repo_db_filesfile $run_directory_path/
stream=$(tar xOf $run_directory_path/$repo_db_file --wildcards */desc | awk -f $awk_rules_file) stream=$(tar xOf $run_directory_path/$repo_db_file --wildcards */desc | awk -f $awk_rules_file)
OIFS=$IFS OIFS=$IFS
@ -164,13 +162,6 @@ createPackage() { # Create package $1
aur fetch $1 # TODO This could be replaced by a git clone or even a wget+tar thanks to package-query aur fetch $1 # TODO This could be replaced by a git clone or even a wget+tar thanks to package-query
echo "Making $1 package..." echo "Making $1 package..."
cd $1 cd $1
## if linux-lts{414,49} then download kernel source from local repo (saves ~100MB each time)
## WARNING this onlys works because we already have said sources AND because PKBUILD follow this particular line
## (not the same in 419 nor 54)
#reg="(linux-lts).+"
#if [[ $1 =~ $reg ]]; then
#sed -i -e "s/\"https:\/\/www.kernel.org\/pub\/linux\/kernel\/v4.x\/\${_srcname}.tar.xz\"/\"https:\/\/archlinux.kto.black\/resources\/\${_srcname}.tar.xz\"/g" ./PKGBUILD
#fi
makepkg -s --noconfirm --noprogressbar makepkg -s --noconfirm --noprogressbar
cd $run_directory_path cd $run_directory_path
} }
@ -195,54 +186,9 @@ clean() {
echo "Done." echo "Done."
} }
clearRepo() {
stream=$(tar xOf $repo_directory/$repo_db_file --wildcards */desc | awk -f $awk_rules_file)
OIFS=$IFS
IFS='|'
stream="${stream:1}"
current=""
for package in $stream
do
IFS='
'
count=0
for line in $package; do
if [ $count -eq 0 ]; then
current="$current $line"
else
continue
fi
((count++))
done
IFS='|'
done
IFS=$OIFS
cd $repo_directory
reg="^($repo_name.).+"
for filename in *; do
if [[ $filename =~ $reg || $filename = 'sync' || $filename = 'local' || $filename = 'resources' ]]; then
continue
fi
for package in $current; do
if [ $filename = $package ]; then
continue 2
fi
done
echo "Removing $filename..."
rm $filename
done
}
run_directory_path=$(pwd) run_directory_path=$(pwd)
# Set parameters # Set parameters
repo_directory='/mnt/archrepo'
repo_name='kto'
repo_db_file=$repo_name.db.tar repo_db_file=$repo_name.db.tar
repo_db_filesfile=$repo_name.files.tar repo_db_filesfile=$repo_name.files.tar
awk_rules_file='../parser.awk' awk_rules_file='../parser.awk'
@ -257,15 +203,6 @@ elif [ "$1" = "add" ]; then
addPackage $2 addPackage $2
elif [ "$1" = "clean" ]; then elif [ "$1" = "clean" ]; then
clean clean
elif [ "$1" = "clear" ]; then
read -r -p "Are you sure? [y/N] " response
response=${response,,} # tolower
if [[ "$response" =~ ^(yes|y)$ ]]; then
clearRepo
else
echo "Cancelling... Perhaps did you mean 'clean', which empties the local build directory?"
exit 1
fi
else else
exit 1 exit 1
fi fi

View File

@ -2,8 +2,14 @@
# Copy this file as variables.conf, with the correct values # Copy this file as variables.conf, with the correct values
# For both update and clear scripts:
repo_name=""
# For update script:
remote_repository="" remote_repository=""
ssh_key="" ssh_key=""
ssh_options="" ssh_options="-i $ssh_key"
exlist="" exlist=""
# For clear script:
repo_directory=""