diff --git a/.gitignore b/.gitignore index 92be537..fa0ae04 100644 --- a/.gitignore +++ b/.gitignore @@ -3,16 +3,3 @@ .vstags *.tdy *.bak -**/.vscode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets - -# Local History for Visual Studio Code -.history/ - -# Built Visual Studio Code Extensions -*.vsix \ No newline at end of file diff --git a/05_fuse b/05_fuse new file mode 100755 index 0000000..0ea1d75 --- /dev/null +++ b/05_fuse @@ -0,0 +1,4 @@ +#!/bin/sh +#Copy this to /etc/pm/sleep.d +#Unmount all sshfs mounts before system goes to sleep so tasks do not refuse to sleep +mount -l -t fuse.sshfs | awk -F " " '{print "fusermount -u " $3}' | bash diff --git a/README.md b/README.md index cd43066..c0def5a 100755 --- a/README.md +++ b/README.md @@ -1,18 +1,4 @@ -# Various shell utility scripts - -## File processing -Archive financial files from previous year and set up directory structure for current year - -## gnome -Old customizer scripts for gnome - -## nextcloud -WIP - Install all missing needed modules for Nextcloud on a server - -## utility -Miscellaneous scripts, e.g. set screen brightness from command line (bug workaround) - -## Other -* Backup and restore scripts for packages installed on Solus OS -* Set up a Solus OS development environment (update needed) -* Backup and restore scripts for Linux systems +# ZSH Bash and other config files for personal use +# File processing scripts to archive financial files from previous year +## TODO +None \ No newline at end of file diff --git a/utility/bright_up.sh b/bright_up.sh similarity index 100% rename from utility/bright_up.sh rename to bright_up.sh diff --git a/utility/checkPPAs.sh b/checkPPAs.sh similarity index 100% rename from utility/checkPPAs.sh rename to checkPPAs.sh diff --git a/utility/check_os.sh b/check_os.sh similarity index 100% rename from utility/check_os.sh rename to check_os.sh diff --git a/file_processing/README.md b/file_processing/README.md deleted file mode 100644 index 6dea2cc..0000000 --- a/file_processing/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# archive_statements.pl and archive_taxes.pl - -## Requirements - -cpanm -S File::Find::Rule File::Copy::Recursive File::DirCompare Time::Piece Test2::V0 Test2::Plugin::NoWarnings Modern::Perl \ No newline at end of file diff --git a/file_processing/archive_statements.pl b/file_processing/archive_statements.pl index 29d4c07..4368a83 100755 --- a/file_processing/archive_statements.pl +++ b/file_processing/archive_statements.pl @@ -1,35 +1,87 @@ #!/usr/bin/perl -use Modern::Perl; -use ProcessDirectories; +use strict; +use warnings; # Script to archive the financial data from the previous year +use Time::Piece; +use File::Basename; +use File::Find::Rule; +use File::Copy::Recursive qw(dircopy); +use File::DirCompare; use Carp qw( croak ); -# use File::Basename; -# use File::Find::Rule; -# use File::Copy::Recursive qw(dircopy); -# use File::DirCompare; -# use Getopt::Long qw(GetOptionsFromArray); -use Time::Piece qw/localtime/; -my $now = localtime; -my $year = $now->year; +my $now = localtime; +my $year = $now->year; +print "Current year: $year\n"; + +# Get year to archive from current year my $lastyear = $now->add_years(-1)->year; -print("Current year: $year Last year: $lastyear\n"); +print("Last year: $lastyear\n"); # Define and create folders -my $financial_folder = '/home/tracey/Documents/financial/current_year/'; -my $financial_archive_folder = '/home/tracey/Documents/financial/1_financial_archives/'; -my $lastyear_folder = $financial_archive_folder . $lastyear . '_FinancialArchives'; +my $financial_folder = '/home/tracey/Documents/financial/current_year/'; +my $financial_archive_folder = + '/home/tracey/Documents/financial/1_financial_archives/'; +my $lastyear_folder = + $financial_archive_folder . $lastyear . 'FinancialArchives'; +my @folders = + ( $financial_folder, $financial_archive_folder, $lastyear_folder ); +print("Copying current directories to archive folder\n"); +print("From: $financial_folder\n"); +print("To: $lastyear_folder\n"); +dircopy( $financial_folder, $lastyear_folder ) + or croak "Could not copy directories $!"; -create_archive_dirs ( $financial_folder, $lastyear_folder ); - -# Make sure contents match before we do any deleting -# croak on errors to guard against data loss -# my $same_result = compare_dirs( $financial_folder, $lastyear_folder ); -croak "Error: The source and destintion folder contents are not the same!" unless ( compare_dirs( $financial_folder, $lastyear_folder ) ); +# Make sure contents match before we do any Deleting +# croak on errors to guard against data losss +my $same_result = compare_dirs( $financial_folder, $lastyear_folder ); +croak "Error: The folders are not the same!" unless ( $same_result == 1 ); # Delete all files from current year from archive folders # Also delete files from last year in current year folder -clean_dirs( $financial_folder, $lastyear_folder, $year, $lastyear ); +delete_dirs( $financial_folder, $lastyear_folder, $year, $lastyear ); +sub compare_dirs { + my ( $dir1, $dir2 ) = @_; + my $same = 1; + print("Making sure the copy was complete and all files match\n"); + File::DirCompare->compare( + $dir1, $dir2, + sub { + my ( $a, $b ) = @_; + if ( !$b ) { + printf "Only in %s: %s\n", dirname($a), basename($a); + $same = 0; + } + elsif ( !$a ) { + printf "Only in %s: %s\n", dirname($b), basename($b); + $same = 0; + } + else { + print "Files $a and $b differ\n"; + $same = 0; + } + } + ); + print("Diff of directories done\n"); + return $same; +} + +sub delete_dirs { + my ( $new_dir, $old_dir, $curr_year, $last_year ) = @_; + print("Deleting files from current year $curr_year in archives\n"); + print("and files from last year $last_year from current folder\n"); + + my @this_year_files = + File::Find::Rule->file()->name("*$curr_year*")->in($old_dir); + my @last_year_files = + File::Find::Rule->file()->name("*$last_year*")->in($new_dir); + + unlink @this_year_files; + print("Deleted all $curr_year files from the folder for $last_year\n"); + unlink @last_year_files; + print("Deleted all $last_year files from the folder for $curr_year\n"); + + return; +} diff --git a/file_processing/archive_taxes.pl b/file_processing/archive_taxes.pl index cff31e3..a454926 100755 --- a/file_processing/archive_taxes.pl +++ b/file_processing/archive_taxes.pl @@ -1,5 +1,6 @@ #!/usr/bin/perl -use Modern::Perl; +use strict; +use warnings; use Time::Piece; use File::Find::Rule; # find all the subdirectories of a given directory @@ -20,7 +21,7 @@ print("Last year was $lastyear and tax year was $lasttaxyear\n"); # Define and create folders my ( $financial_folder, $financial_archive_folder, $lastyear_folder, $lasttaxyear_folder ); $financial_folder = '/home/tracey/Documents/financial/current_year/'; -$financial_archive_folder = '/home//Documents/financial/1_financial_archives/'; +$financial_archive_folder = '~/Documents/financial/1_financial_archives/'; $lastyear_folder = $financial_archive_folder . $lastyear . 'FinancialArchives'; $lasttaxyear_folder = $financial_archive_folder . $lasttaxyear . 'TaxArchives'; my @folders = ( $financial_folder, $financial_archive_folder, $lastyear_folder, $lasttaxyear_folder ); diff --git a/file_processing/lib/FinancialFileArchiver.pm b/file_processing/lib/FinancialFileArchiver.pm deleted file mode 100644 index e69de29..0000000 diff --git a/file_processing/lib/ProcessDirectories.pm b/file_processing/lib/ProcessDirectories.pm deleted file mode 100644 index 61c9e47..0000000 --- a/file_processing/lib/ProcessDirectories.pm +++ /dev/null @@ -1,125 +0,0 @@ -package ProcessDirectories; -use Modern::Perl; -# VERSION -# AUTHORITY -# ABSTRACT: Get current subdirectories in current year directory and copy to archive directory -use Carp qw( croak ); -use File::Basename; -use File::Find::Rule; -use File::Copy::Recursive qw(dircopy); -use File::DirCompare; -use Pod::Usage; -# use Time::Piece qw/localtime/; - -sub create_archive_dirs { - my ( $source_dir, $dest_dir ) = @_; - unless ( -d $source_dir ) { - die "Source directory '$source_dir' does not exist, please create it"; - } - - print("Copying current directories to archive folder\n"); - print("From: $source_dir\n"); - print("To: $dest_dir\n"); - dircopy( $source_dir, $dest_dir ) - or croak "Could not copy directories $!"; - - return; -} - -sub compare_dirs { - my ( $dir1, $dir2 ) = @_; - my $same = 1; - print("Making sure all directories and files match between source and destination\n"); - File::DirCompare->compare( - $dir1, $dir2, - sub { - my ( $a, $b ) = @_; - if ( !$b ) { - printf "Only in %s: %s\n", dirname($a), basename($a); - $same = 0; - } - elsif ( !$a ) { - printf "Only in %s: %s\n", dirname($b), basename($b); - $same = 0; - } - else { - print "Files $a and $b differ\n"; - $same = 0; - } - } - ); - return $same; -} - -sub clean_dirs { - my ( $new_dir, $old_dir, $curr_year, $last_year ) = @_; - - my @this_year_files = - File::Find::Rule->file()->name("*$curr_year*")->in($old_dir); - my @last_year_files = - File::Find::Rule->file()->name("*$last_year*")->in($new_dir); - - unlink @this_year_files; - print("Deleted all files for $curr_year from the folder for $last_year\n"); - unlink @last_year_files; - print("Deleted all files for $last_year from the folder for $curr_year\n"); - - return; -} - -1; - -=pod - -=head1 NAME - -ProcessDirectories - -=head1 DESCRIPTION - -Methods for copying and processing a directory of files for the past year and this year - -=head1 SYNOPSIS - - use ProcessDirectories - - create_archive_dirs ( $source_dir, $dest_dir ); - compare_dirs( $source_dir, $dest_dir ); - clean_dirs( $source_dir, $dest_dir, $year, $lastyear ); - -=head1 METHODS - -=head2 -C: Copies the directory structure and contents of a source file to the archive / destination directory. - -=head3 -Usage: - create_archive_dirs( $source_dir, $destination_dir ); - -=head2 -C: Compares the content of two specified directories. Provides feedback on the results. Returns 1 if the source and destination match, 0 otherwise. - -=head3 -Usage: - compare_dirs( $source_dir, $destination_dir ); - -=head2 -C: This method accepts the following parameters: - -=over 4 - -=item source_dir - -=item destination_dir - -=item this_year - -=item last_year - -=back - -=head3 -Usage: - clean_dirs( $source_dir, $destination_dir, 2023, 2022 ); - -=cut \ No newline at end of file diff --git a/file_processing/t/00-load.t b/file_processing/t/00-load.t deleted file mode 100644 index fad0213..0000000 --- a/file_processing/t/00-load.t +++ /dev/null @@ -1,14 +0,0 @@ -use Test2::V0; -use Test2::Plugin::Times; -use Test2::Plugin::ExitSummary; -use Test2::Plugin::NoWarnings; -use FindBin qw($Bin); -use lib "$Bin/../lib"; - - -plan(1); -BEGIN { - use ProcessDirectories; - - pass('Module loads correctly.'); -} \ No newline at end of file diff --git a/file_processing/t/01-subroutines.t b/file_processing/t/01-subroutines.t deleted file mode 100644 index 74b657d..0000000 --- a/file_processing/t/01-subroutines.t +++ /dev/null @@ -1,79 +0,0 @@ -use Test2::V0; -use Test2::Plugin::Times; -use Test2::Plugin::ExitSummary; -use Test2::Plugin::NoWarnings; -use FindBin qw($Bin); -use File::Path::Tiny; -use Time::Piece qw/localtime/; - -use lib "$Bin/../lib"; -use ProcessDirectories; - - -plan(2); - -# Preconditions -my $now = localtime; -my $year = $now->year; -my $lastyear = $now->add_years(-1)->year; -diag("Current year: $year Last year: $lastyear\n"); - -## Define and create test source folder -my $current_year_dir = 't/current_year/'; -my $archive_folder = 't/1_archives/'; -my $prev_year_dir = $archive_folder . $lastyear . '_Archives'; -diag("Source test dir $current_year_dir Dest test dir $prev_year_dir"); - -if(!File::Path::Tiny::mk($current_year_dir)) { - die "Could not create test source directory: '$current_year_dir': $!"; -} - -my @test_files = qw( 2003_file-1 2003_file-2 2002_file-1 2002_file-2 2002_file-3 ); -for my $file (@test_files) { - create_file($current_year_dir . '/' . $file); -} - -# Begin testing -ProcessDirectories::create_archive_dirs( $current_year_dir, $prev_year_dir ); -ok( ( -d $prev_year_dir ), "Previous year archive directory was created" ); - - -ok( ProcessDirectories::compare_dirs( $current_year_dir, $prev_year_dir ), "Previous year archive directory contents matches current directory contents" ); - - -# clean_dirs - -# End Testing - -# Cleanup -# if(!File::Path::Tiny::rm($current_year_dir)) { -# die "Could not remove test source directory: '$current_year_dir': $!"; -# } -# if(!File::Path::Tiny::rm($archive_folder)) { -# die "Could not remove test archive directory: '$archive_folder': $!"; -# } - -sub create_file { - my $filepath = shift; - open (my $fh, ">", $filepath) or die "Can't open file '$filepath' for writing: $!"; - - # you can control the range of characters here - my $minimum = 4; - my $range = 16; - my $num_bytes = '100'; - - for (my $bytes = 0; $bytes < $num_bytes; $bytes += 4) { - my $rand = int(rand($range ** 4)); - my $string = ''; - for (1..4) { - $string .= chr($rand % $range + $minimum); - $rand = int($rand / $range); - } - print $fh $string; - } - - close($fh) or warn "Can't close file '$filepath': $!"; - - - return; -} \ No newline at end of file diff --git a/file_processing/t/02-archive-files.t b/file_processing/t/02-archive-files.t deleted file mode 100644 index a4092e6..0000000 --- a/file_processing/t/02-archive-files.t +++ /dev/null @@ -1,19 +0,0 @@ -use Modern::Perl; -use Carp qw/carp croak/; - -use Test2::V0; -use Test2::Tools::Subtest qw/subtest_streamed/; -use Test2::Plugin::ExitSummary; -# use Test2::Tools::Exception qw/dies lives/; -use Test2::Plugin::NoWarnings; -# use Cwd qw(cwd); -use File::Path qw(remove_tree make_path); -use Time::Piece qw/localtime/; - -# Order is important -use FindBin qw($Bin); -use lib "$Bin/../lib"; -use ProcessDirectories; - -use File::Temp qw/ tempfile tempdir /; - diff --git a/file_processing/t/1_archives/2022_Archives/2002_file-1 b/file_processing/t/1_archives/2022_Archives/2002_file-1 deleted file mode 100644 index 31f5985..0000000 --- a/file_processing/t/1_archives/2022_Archives/2002_file-1 +++ /dev/null @@ -1,7 +0,0 @@ -  -     -       - - -    -       \ No newline at end of file diff --git a/file_processing/t/1_archives/2022_Archives/2002_file-2 b/file_processing/t/1_archives/2022_Archives/2002_file-2 deleted file mode 100644 index cd4e7d2..0000000 --- a/file_processing/t/1_archives/2022_Archives/2002_file-2 +++ /dev/null @@ -1,5 +0,0 @@ -    -   -     -   -   \ No newline at end of file diff --git a/file_processing/t/1_archives/2022_Archives/2002_file-3 b/file_processing/t/1_archives/2022_Archives/2002_file-3 deleted file mode 100644 index 77a727f..0000000 --- a/file_processing/t/1_archives/2022_Archives/2002_file-3 +++ /dev/null @@ -1,9 +0,0 @@ -   -    -   -    - - -  -    -  \ No newline at end of file diff --git a/file_processing/t/1_archives/2022_Archives/2003_file-1 b/file_processing/t/1_archives/2022_Archives/2003_file-1 deleted file mode 100644 index a40fba6..0000000 --- a/file_processing/t/1_archives/2022_Archives/2003_file-1 +++ /dev/null @@ -1,7 +0,0 @@ -     -  - -        - - -       \ No newline at end of file diff --git a/file_processing/t/1_archives/2022_Archives/2003_file-2 b/file_processing/t/1_archives/2022_Archives/2003_file-2 deleted file mode 100644 index 77d1d77..0000000 --- a/file_processing/t/1_archives/2022_Archives/2003_file-2 +++ /dev/null @@ -1,8 +0,0 @@ -     -    -   -   - -   -      - \ No newline at end of file diff --git a/file_processing/t/current_year/2002_file-1 b/file_processing/t/current_year/2002_file-1 deleted file mode 100644 index 31f5985..0000000 --- a/file_processing/t/current_year/2002_file-1 +++ /dev/null @@ -1,7 +0,0 @@ -  -     -       - - -    -       \ No newline at end of file diff --git a/file_processing/t/current_year/2002_file-2 b/file_processing/t/current_year/2002_file-2 deleted file mode 100644 index cd4e7d2..0000000 --- a/file_processing/t/current_year/2002_file-2 +++ /dev/null @@ -1,5 +0,0 @@ -    -   -     -   -   \ No newline at end of file diff --git a/file_processing/t/current_year/2002_file-3 b/file_processing/t/current_year/2002_file-3 deleted file mode 100644 index 77a727f..0000000 --- a/file_processing/t/current_year/2002_file-3 +++ /dev/null @@ -1,9 +0,0 @@ -   -    -   -    - - -  -    -  \ No newline at end of file diff --git a/file_processing/t/current_year/2003_file-1 b/file_processing/t/current_year/2003_file-1 deleted file mode 100644 index a40fba6..0000000 --- a/file_processing/t/current_year/2003_file-1 +++ /dev/null @@ -1,7 +0,0 @@ -     -  - -        - - -       \ No newline at end of file diff --git a/file_processing/t/current_year/2003_file-2 b/file_processing/t/current_year/2003_file-2 deleted file mode 100644 index 77d1d77..0000000 --- a/file_processing/t/current_year/2003_file-2 +++ /dev/null @@ -1,8 +0,0 @@ -     -    -   -   - -   -      - \ No newline at end of file diff --git a/gitea/.gitignore b/gitea/.gitignore new file mode 100644 index 0000000..8113eca --- /dev/null +++ b/gitea/.gitignore @@ -0,0 +1,13 @@ + +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix diff --git a/gitea/backup-gitea-bin.pl b/gitea/backup-gitea-bin.pl new file mode 100755 index 0000000..eb106d6 --- /dev/null +++ b/gitea/backup-gitea-bin.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +# backup_gitea_bin.pl +# Author: Tracey Clark +# Created: 2019-06-20 +# You must have a mail transport agent installed to run this script + +use strict; +use warnings; + +### TEST CODE ### +my $gitea_bin='/home/tracey/tmp/testbin'; +my $gitea_current_version='1'; +my %binary_file = ( + input => $gitea_bin, + version => $gitea_current_version, + ); + my ( %opts ) = %binary_file; + my $input = $opts{input}; + my $version = $opts{version}; + my $gitea_bin_backup = '/home/tracey/tmp/testbin.' . $gitea_current_version . '.bz2'; + +### TEST CODE ### +# my ( %opts ) = %{shift()}; +# my $input = $opts{input}; +# my $version = $opts{version}; +printf("Backing up the current binary\n"); +printf("Input in backup_bin script is $input\n and version is $version\n"); + + +# my $gitea_bin_backup = '/home/gitea/bin/gitea.' . $gitea_current_version . '.bz2'; +printf("Gitea bin backup will be $gitea_bin_backup\n"); +# Do this with a system call to make a compressed copy of the current binary +# bzip2 -k file.txt +# my $status = system("vi", "fred.txt"); +# if (($status >>=8) != 0) { +# die "Failed to run vi"; +# } + +# HEREHERE how to specify output file?? +my $bzip_status = system("/bin/bzip2 -k $input"); +if (($bzip_status >>=8) != 0) { + die "Failed to run bzip2"; +} diff --git a/gitea/update-gitea.pl b/gitea/update-gitea.pl new file mode 100755 index 0000000..c125963 --- /dev/null +++ b/gitea/update-gitea.pl @@ -0,0 +1,355 @@ +#!/usr/bin/perl + +# Update gitea based on version provided +# Author: Tracey Clark +# Created: 2019-03-04 +# You must have a mail transport agent installed to run this script + +# Note: Daily backups are also being run from cron +# /home/gitea/gitea_backup.sh + +# Re-write to use this dir according to gitea docs +# https://docs.gitea.io/en-us/install-from-binary/ +# Get binary from system rather than hard code +# Stop gitea with systemctl before file copy +# Set right mod & perms? + +use strict; +use warnings; +use LWP::UserAgent; +use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error); +use File::Basename; +use JSON; +use Sort::Versions; +use Getopt::Long qw(GetOptions); +use Term::ANSIColor qw(:constants); +use feature qw(say); +use MIME::Lite; +use utf8; +use open ':std', ':encoding(UTF-8)'; +use Encode qw(encode encode_utf8 ); + +my ( $verbose, $info ); + +GetOptions( + 'info!' => \$info, + 'verbose!' => \$verbose, +); + +########################################## +### The user must set these variables ### +my $email = 'gitea-update@tlcnet.info'; +my $filetype = '-linux-amd64'; +########################################## + +# https://api.github.com/repos/go-gitea/gitea/releases/latest +# This URL will only have one version listed +my $gitea_bin_dir = '/usr/local/bin/'; +my $gitea_bin = $gitea_bin_dir . '/gitea'; +my $gitea_current_version_string = `$gitea_bin --version`; +my $alphanum_ver = 0; + +chomp $gitea_current_version_string; +unless ( defined $gitea_current_version_string ) { + my $status = "❌ [DIE]: Unable to get the version of the gitea binary on the system: $!"; + notification('failed ❌', $status); + die RED "$status", RESET; +} + +my %binary_file = get_current_binary($gitea_current_version_string); +my $gitea_current_version = $binary_file{'version'}; +my $baseURL = q{https://github.com/go-gitea/gitea/}; +my $latestURL = q{https://api.github.com/repos/go-gitea/gitea/releases/latest}; + +# https://hubpages.com/technology/Use-Perl-to-access-REST-API +# Spin up the browser object +my $ua = LWP::UserAgent->new( + cookie_jar => {}, # keep cookies in RAM but not persistent between sessions +); + +my $resp = $ua->get($latestURL); +my $latest_release_hash = decode_json( $resp->content ) + or die "[DIE]: Unable to parse the version data! Output is:\n $resp"; + +my $orig_tag = $latest_release_hash->{tag_name}; +# print "[TLC DEBUG]: ORIG TAG is $orig_tag\n"; +my $tag = $orig_tag; +substr( $tag, 0, 1, '' ); +my $release_id = $latest_release_hash->{id}; # Works +printf( YELLOW +"[INFO] Latest upstream version: $tag\n Release ID $release_id\n", RESET); +my $unz_filename = 'gitea-' . $tag . $filetype; +#ex: gitea-1.7.6-linux-amd64 +my $download_dir = '/home/gitea/bin/'; +my $download_filename = $unz_filename . '.xz'; + +if ( defined $verbose ) { + printf( YELLOW + "[INFO]\nRelease id: $release_id\nUncompressed filename: $unz_filename\nDownload file target: $download_filename\n" + ); +} +if ( versioncmp( $gitea_current_version, $tag ) == -1 ) { + printf( + "[INFO] Version tag is greater than the system version, proceeding with update\n" + ); + backup_bin( \%binary_file ); + + my $download_url = get_download_url( $download_filename, $release_id ); + print("Downloading the compressed binary\n"); + print("[INFO] Download URL we got from the sub is $download_url\n"); + `wget -P $download_dir $download_url`; + my $xz_file = $download_dir . $download_filename; + + if ( defined $info ) { + print YELLOW "[INFO] xz file is $xz_file\n", RESET; + } + install_bin($download_filename); +} +else { + my $status = '✅ Version tag upstream matches the system version, no update needed'; + print "[TLC DEBUG] TAG is $tag\n"; + print( YELLOW "[INFO] $status\n", RESET ); + notification('not needed ✅', $status, $gitea_current_version, $tag); + exit 1; +} + +my $gitea_status = check_gitea_status(); +if ( $gitea_status =~ /active/ ) { + print( GREEN "[INFO] Gitea service is active\n", RESET ); +} +unless ( $gitea_status =~ /active/ ) { + my $status = '❌ [DIE] Status of gitea service is no good!'; + print( RED "[INFO] $status\n", RESET ); + notification('failed ❌', $status, $gitea_current_version, $tag); + die $status; +} +$gitea_current_version_string = `$gitea_bin --version`; +chomp $gitea_current_version_string; +%binary_file = get_current_binary($gitea_current_version_string); +$gitea_current_version = $binary_file{'version'}; + +if ( versioncmp( $gitea_current_version, $tag ) == -1 ) { + my $status = RED "Upstream version tag is STILL greater than the current system version, something went wrong\n", RESET; + notification('failed ❌', $status, $gitea_current_version, $tag); + printf( $status ); +} +else { + my $status = '✅ [INFO] Gitea successfuly update. Installed version is current and service is running'; + print( GREEN "[INFO] $status\n", RESET ); + say "Removing the downloaded xz file and uncompressed file"; + system("rm -vf " . $download_dir . $unz_filename); + system("rm -vf " . $download_dir . $download_filename); + notification('succeeded ✅', $status, $gitea_current_version, $tag); + # Intentionally *not* removing the 'gitea' binary in case something goes wrong running the current binary. +} + +# ##### Subroutines ##### + +# sub check_deps { +# # Check to make sure dependencies installed on system - unit test?? +# # bzip2 perl mods +# } + +sub get_current_binary { + my $current_version_string = shift; + my $current_version; + if ( $current_version_string =~ m/ion\ (\d+\.\d+\.\d*)\s+b/ ) { + $current_version = $1; + printf("Version number of the installed gitea binary: $1\n"); + } + elsif ( $current_version_string =~ m/ion\ (\d+\d+\w*)\s/ ) { + $current_version = $1; + printf("Current version number the installed gitea binary: $1\n"); + $alphanum_ver = 1; + } + my %binary_file = ( + input => $gitea_bin, + version => $current_version, + ); + unless ( defined $current_version ) { + die RED + "[DIE]: Unable to get the current gitea version! Value is $current_version", + RESET; + } + return %binary_file; +} + +sub get_binary_file { + my $version = shift; +} + +sub backup_bin { + + # Ghetto to get it working for now + + my (%opts) = %{ shift() }; + my $input = $opts{input}; + my $version = $opts{version}; + print GREEN "Backing up the current binary\n", RESET; + if ( defined $info ) { + print YELLOW + "[INFO] Input in backup_bin sub is:\n Directory $input\n Version $version\n", + RESET; + } + my $gitea_bin_backup = + '/home/gitea/bin/gitea.' . $gitea_current_version . '.bz2'; + print GREEN "Gitea bin backup will be $gitea_bin_backup\n", RESET; + system("cp $input $input.bak"); + + # TODO + # # Do this with a system call to make a compressed copy of the current binary + # # bzip2 -k file.txt + # # my $status = system("vi", "fred.txt"); + # # if (($status >>=8) != 0) { + # # die "[DIE] Failed to run vi"; + # # } + # my $bzip_status = system("bzip2 -k", "$input"); + # if (($status >>=8) != 0) { + # die "[DIE] Failed to run bzip2"; + # } + + return; +} + +sub get_download_url { + my ( $dl_filename, $rel_id ) = @_; + my $dl_url; + + # Get the download_url from the array + my $assetsURL = + 'https://api.github.com/repos/go-gitea/gitea/releases/' + . $release_id + . '/assets'; + if ( defined $info ) { + print YELLOW "[INFO] Assets URL\n"; + print "$assetsURL\n", RESET; + } + + my $asset_resp = $ua->get($assetsURL); + my $asset_resp_array_ref = decode_json( $asset_resp->content ); + + if ( defined $verbose ) { + printf( RED + "[DEBUG] Array of hashes of the json response for the assets:\n" + ); + printf Dumper $asset_resp_array_ref, RESET; + } + + foreach my $asset_ref ( @{$asset_resp_array_ref} ) { + if ( defined $verbose ) { + print( RED + "[DEBUG] The asset ref in get_download_url is $asset_ref\n" ); + print( + "The asset ref name in get_download_url is $asset_ref->{name}\n", + RESET + ); + } + if ( $asset_ref->{name} eq $dl_filename ) { + print("Yay we have a match for our desired file :D and it is \n"); + print $asset_ref->{name} . "\n"; + $dl_url = $asset_ref->{browser_download_url}; + if ( defined $info ) { + print YELLOW + "[INFO] The download url from the response array is $dl_url\n", + RESET; + } + return $dl_url; + } + } + unless ( defined $dl_url ) { + print( RED + "ONOES we have no download URL from the github API! Trying to build one manually\n", + RESET + ); + my $dl_url = build_download_url( $orig_tag, $download_filename ); + return $dl_url; + } + return 0; +} + +sub build_download_url { + my ( $url_tag, $url_file ) = @_; + print "Building the URL based on the version\n"; + +# If getting the download URL fails through the API, use this to build it manually +# URL is in the form of +# https://github.com/go-gitea/gitea/releases/download/v1.15.2/gitea-1.15.2-linux-amd64.xz + my $built_url = + 'https://github.com/go-gitea/gitea/releases/download/' + . $url_tag . '/' + . $url_file; + if ( defined $info ) { + print YELLOW "The URL built for the download is $built_url\n", RESET; + } + return $built_url; +} + +sub install_bin { + my $filename = shift; + print("Unpacking the downloaded file \"$download_dir$filename\", setting owner and permissions\n"); + my $unpacked_filename = basename($filename, ".xz"); + print "Unpacked filename is $unpacked_filename\n"; + + # Copy the downloaded binary to gitea and chmod it 750 + # Doing this with a filthy system call because the perl library + # for xz manipulation is a memory hog and buggy besides + system("xz -d --keep $download_dir" . "/" . "$filename"); + system("systemctl stop gitea"); + system("cp $download_dir$unpacked_filename $gitea_bin"); + system("chown gitea.gitea $gitea_bin"); + system("chmod 750 $gitea_bin"); + + # Restart service + print("[INFO] Restarting the gitea service\n"); + return system("systemctl restart gitea"); +} + +sub check_gitea_status { + my $gitea_status = `systemctl is-active gitea`; + return $gitea_status; +} + +sub notification { + my ($result, $body, $running_version, $upstream_version) = @_; + my $subject = "Gitea update check: update " . $result; + my $from = 'system@host.tlcnet.info'; + my $ver_body; + + # print "[TLC DEBUG] Body received is\n$body\n"; + + if ( defined $running_version ) { + $ver_body = q{ + + + + + + + + + + + +
Running version:} . $running_version . q{
Upstream version:} . $upstream_version . q{
} + } + + my $msg = MIME::Lite->new( + Subject => encode( 'MIME-Header', $subject ), + From => $from, + To => $email, + Type => 'text/html', + Data => encode_utf8( + ' +

Gitea update result

+

' . $body . '

' . $ver_body . + '
+

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

+

Sincerely,
Your Linode VM

+ ' + ) + ); + + $msg->send(); + + return 1; +} diff --git a/home_config/.vimrc b/home_config/.vimrc new file mode 100755 index 0000000..fb4b67c --- /dev/null +++ b/home_config/.vimrc @@ -0,0 +1,9 @@ + +filetype plugin indent on +" show existing tab with 4 spaces width +set tabstop=4 +" when indenting with '>', use 4 spaces width +set shiftwidth=4 +" On pressing tab, insert 4 spaces +set expandtab +set pastetoggle= #To switch between paste and nopaste modes \ No newline at end of file diff --git a/home_config/konsole_tabs_colo b/home_config/konsole_tabs_colo new file mode 100755 index 0000000..db89b5c --- /dev/null +++ b/home_config/konsole_tabs_colo @@ -0,0 +1,3 @@ +# Konsole tabs for colo session +title: Local;; command: /usr/bin/zsh ;; profile: Breeze +title: Colo;; command: ssh cp ;; profile: Mikado diff --git a/home_config/ssh_config b/home_config/ssh_config new file mode 100755 index 0000000..46f4864 --- /dev/null +++ b/home_config/ssh_config @@ -0,0 +1,19 @@ +Host cp + HostName cp.tlcnet.info + User root + Port 227 + IdentityFile ~/.ssh/tlc_server +Host pi3root + HostName pi3 + User root + IdentityFile ~/.ssh/tlc_pi3 +Host pi3 + HostName pi3 + User pi + IdentityFile ~/.ssh/tlc_pi3_pi +Host gittea + HostName gitea.tlcnet.info + RSAAuthentication yes +# User git + Port 227 + IdentityFile ~/.ssh/id_tlc_gitea diff --git a/perl_scratch.pl b/perl_scratch.pl deleted file mode 100755 index 68d4bc4..0000000 --- a/perl_scratch.pl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env perl - -use Modern::Perl; -use DateTime; - -say "Date Time formatting tests"; - -my $dt_now = DateTime->now( time_zone => 'local' ); -say "Datetime now is $dt_now"; -my $date = $dt_now->ymd(''); -# yymmdd_hhmmss -my $dt = $date . '_' . $dt_now->hms(''); -say "Datetime is $dt"; \ No newline at end of file diff --git a/selenium_bash/.bashrc b/selenium_bash/.bashrc new file mode 100755 index 0000000..77cbad4 --- /dev/null +++ b/selenium_bash/.bashrc @@ -0,0 +1,120 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi + +#List upgradeable packages +apt list --upgradeable diff --git a/selenium_bash/.profile b/selenium_bash/.profile new file mode 100755 index 0000000..c9db459 --- /dev/null +++ b/selenium_bash/.profile @@ -0,0 +1,22 @@ +# ~/.profile: executed by the command interpreter for login shells. +# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login +# exists. +# see /usr/share/doc/bash/examples/startup-files for examples. +# the files are located in the bash-doc package. + +# the default umask is set in /etc/profile; for setting the umask +# for ssh logins, install and configure the libpam-umask package. +#umask 022 + +# if running bash +if [ -n "$BASH_VERSION" ]; then + # include .bashrc if it exists + if [ -f "$HOME/.bashrc" ]; then + . "$HOME/.bashrc" + fi +fi + +# set PATH so it includes user's private bin if it exists +if [ -d "$HOME/bin" ] ; then + PATH="$HOME/bin:$PATH" +fi diff --git a/selenium_bash/.rootbashrc b/selenium_bash/.rootbashrc new file mode 100755 index 0000000..f6939ee --- /dev/null +++ b/selenium_bash/.rootbashrc @@ -0,0 +1,99 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +[ -z "$PS1" ] && return + +# don't put duplicate lines in the history. See bash(1) for more options +# ... or force ignoredups and ignorespace +HISTCONTROL=ignoredups:ignorespace + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then +# . /etc/bash_completion +#fi diff --git a/utility/reset_kde.fish b/utility/reset_kde.fish deleted file mode 100755 index 61323b1..0000000 --- a/utility/reset_kde.fish +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/fish -# Initial folder list from https://tuxtrix.com/reset-kde5-user-config-default/ - -if string length -q $HOME - echo "Backup up $HOME/.config" - cp -a $HOME/.config $HOME/.config.bak - cd $HOME/.config - - echo "Deleting KDE config files" - set fileList Trolltech.conf akregatorrc baloofilerc bluedevilglobalrc kactivitymanagerd-statsrc - set -a fileList kactivitymanagerdrc kactivitymanagerd-pluginsrc kateschemarc kcmfonts kcminputrc kconf_updaterc kded5rc - set -a fileList kdeglobals kfontinstuirc kglobalshortcutsrc khotkeysrc kmixctrlrc kmixrc - set -a fileList kscreenlockerrc ksmserverrc ksplashrc ktimezonedrc kwinrc kwinrulesrc plasma-localerc - set -a fileList plasma-nm plasma-org.kde.plasma.desktop-appletsrc plasmarc plasmashellrc - set -a fileList powermanagementprofilesrc startupconfig startupconfigfiles startupconfigkeys - set -a fileList krunnerrc touchpadxlibinputrc systemsettingsrc kxkbrc PlasmaUserFeedback - set -a fileList kde.org/* kiorc klipperrc knfsshare kuriikwsfilterrc kwalletmanager5rc kwalletrc - set -a fileList plasma.emojierrc plasmanotifyrc PlasmaUserFeedback powerdevilrc kgammarc - set -a fileList kded_device_automounterrc device_automounter_kcmrc klaunchrc - set -a fileList trashrc kactivitymanagerd-switcher gtkrc-2.0 gtkrc baloofileinformationrc - set -a fileList plasmaparc plasmawindowed-appletsrc plasmawindowedrc - - set -a fileList breezerc - - rm $fileList -else - echo "HOME variable not defined" - exit -end diff --git a/utility/tx_session.sh b/utility/tx_session.sh deleted file mode 100755 index 7a558e0..0000000 --- a/utility/tx_session.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -go() { - session="$1" - sessions_dir="$HOME/tilix_profiles" - tilix_opts='' - - for session in "$sessions_dir/$session/"*; do - tilix_opts="$tilix_opts -s $session" - done - - tilix $tilix_opts -} - -go $@ \ No newline at end of file