diff --git a/conf/balut.conf.sh b/conf/balut.conf.sh new file mode 100644 index 0000000..5521265 --- /dev/null +++ b/conf/balut.conf.sh @@ -0,0 +1,73 @@ +# Fichier de configuration principal + +# ------------------------------------------------------------------------------ +# -------------------- Importation de paramêtres globaux ----------------------- +# ------------------------------------------------------------------------------ + +# Importe les paramètres geoffray-levasseur.org +. $MYPATH/conf/includes/gl.conf.sh + +# Importe la sélection de paquets par défaut +. $MYPATH/conf/includes/pkgsel.base.conf.sh + +# Les paramètres précédemment importés sont surchargeable après cette ligne + +# ------------------------------------------------------------------------------ +# ------------------------------ General Section ------------------------------- +# ------------------------------------------------------------------------------ + +# User of the machine (must exists) +MAINUSER=root + +# Pilotes X11 non libre à installer ? +#X11_DRV="virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11" + +# Authentication: use LDAP+Kerberos ? +WITH_LDAP_KERB=no + +# Users to create, add or remove +REMOVE_USERS=fatal + +# Network +IPV4_IFACES="eth0 eth1 eth2" + +NET4_MODE_eth0="static" +NET4_IP_eth0="192.168.1.221/24" +NET4_GW_eth0="192.168.1.231" +NET4_NS_eth0="192.168.1.206 192.168.1.205" +NET4_NS_SEARCH_eth0=$REALM + +NET4_MODE_eth1="static" +NET4_IP_eth1="192.168.74.221/24" + +NET4_MODE_eth2="static" +NET4_IP_eth2="10.0.254.221/16" + +IPV6_IFACES="eth0 eth1" + +NET6_MODE_eth0="static" +NET6_IP_eth0="2a03:7220:8081:b301::dd/64" +NET6_GW_eth0="2a03:7220:8081:b301::e7" +NET6_NS_eth0="2a03:7220:8081:b301::ce 2a03:7220:8081:b301::cd" +NET6_NS_SEARCH_eth0=$REALM + +NET6_MODE_eth1="static" +NET6_IP_eth1="2a03:7220:8081:b34a::dd/64" + + +# Mode d'installation : +# * dev : installe les paquets un par un avec apt (lent) +# * full : envoie d'un seul coup la liste de tous les paquets à apt (rapide) +INTALL_MODE=full + +# Paquets additionnels +PKGSEL="$PKGSEL iptables fail2ban curl" + +# ------------------------------------------------------------------------------ +# -------------------------- Section modules d'init ---------------------------- +# ------------------------------------------------------------------------------ + +# Liste des modules à executer (surchargeable en ligne de commande) +MODULE_LIST="conf_ntp upgrade_dist conf_ceph authnz conf_locale conf_ssh \ + conf_mail install_pkg install_profile patch_snmp install_mkagent \ + conf_syslog conf_network" diff --git a/conf/includes/gl.conf.sh b/conf/includes/gl.conf.sh index 6bd381c..aac0e5d 100644 --- a/conf/includes/gl.conf.sh +++ b/conf/includes/gl.conf.sh @@ -32,7 +32,7 @@ export SHARED_HOME="false" export SSHD_PERMITROOT_RANGE="192.168.1.0/24" # Check MK -export MK_VERSION="2.0.0p20-1" +export MK_VERSION="2.2.0b6-1" export MK_URL="https://nagios.geoffray-levasseur.org/check_mk/check_mk/agents/check-mk-agent_${MK_VERSION}_all.deb" export MK_SERVER_IP="192.168.1.201" diff --git a/init.sh b/init.sh index c662460..c7e61ca 100755 --- a/init.sh +++ b/init.sh @@ -39,14 +39,14 @@ export LANG=C export VERSION="0.99.20" # Store script's path (realpath -s resolve symlinks if init.sh is a symlink) -export MYPATH=$(dirname $(realpath -s "$0")) +export MYPATH=$(dirname "$(realpath -s "$0")") # Get hostname export HOSTNAME=$(hostname) # Load libraries for lib in $MYPATH/lib/*.sh; do - . $lib + . "$lib" done unset lib diff --git a/repo/common/profile/profile b/repo/common/profile/profile deleted file mode 100644 index 6795de0..0000000 --- a/repo/common/profile/profile +++ /dev/null @@ -1,1006 +0,0 @@ -#!/bin/bash -# Begin profile -# ------------------------------------------------------------------------------ -# Initial version from Beyond Linux From Scratch by -# * James Robertson -# * Dagmar d'Surreal -# ------------------------------------------------------------------------------ -# Current version from Geoffray Levasseur -# 16/02/2013 Version 1.0.0 : Initial version -# 24/10/2015 Version 2.0.0 : Added advanced functionnalities (clean, srr, etc.) -# 04/02/2017 Version 2.0.1 : clean improvements (--shell) -# 16/09/2018 Version 2.1.0 : Added rmhost, setc, setfr, more locales management -# 23/09/2019 Version 2.1.1 : [bugfix] dpkgs -# 24/09/2019 Version 2.1.2 : [bugfix] bug in profile version display -# 16/12/2019 Version 2.2.0 : Added showinfo, primary write of showdiskmap -# 08/01/2020 Version 2.3.0 : Added use of figlet and neofetch as a motd replace -# 16/01/2020 Version 2.3.1 : [bugfix] non-interactive were blocked with some functions -# 31/01/2020 Version 2.3.2 : Figlet: changed default font to ansi_shadow -# 02/03/2020 Version 2.4.0 : Added command auzip -# 03/03/2020 Version 2.5.0 : Added command taz and rmspc, auzip => utaz improved -# 05/03/2020 Version 2.5.1 : Language consistancy fix, added pigz support in taz -# 06/03/2020 Version 2.5.2 : Few aliases sorted out -# 11/09/2020 Version 2.5.3 : Few more aliases, improved code consistancy and typo, -# : improved utaz, removed showdiskmap -# : removed remaining French, -# : added license information for future publication -# 24/10/2020 Version 2.6.0 : Added session save and restore for Konsole -# 25/12/2020 Version 2.6.1 : Add check on rmhost, improvements rmspc, created expendlist -# 26/02/2021 Version 2.6.2 : taz: corrected bug with trailing slash on directories -# 18/10/2021 Version 2.6.3 : changed PS1 for status bar style version -# few minor improvements -# ------------------------------------------------------------------------------ -# Copyright (c) 2013-2020 Geoffray Levasseur -# Protected by the BSD3 license. Please read bellow for details. -# -# * Redistribution and use in source and binary forms, -# * with or without modification, are permitted provided -# * that the following conditions are met: -# * -# * Redistributions of source code must retain the above -# * copyright notice, this list of conditions and the -# * following disclaimer. -# * -# * Redistributions in binary form must reproduce the above -# * copyright notice, this list of conditions and the following -# * disclaimer in the documentation and/or other materials -# * provided with the distribution. -# * -# * Neither the name of the copyright holder nor the names -# * of any other contributors may be used to endorse or -# * promote products derived from this software without -# * specific prior written permission. -# * -# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -# * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -# * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# * OF SUCH DAMAGE. -# ------------------------------------------------------------------------------ - -export PROFVERSION="2.6.3" - -export DEFAULT_CITY="Toulouse" - -# ------------------------------------------------------------------------------ -# path* : private functions for PATH variable management -# ------------------------------------------------------------------------------ -pathremove () -{ - local ifs=':' - local newpath - local dir - local pathvar=${2:-PATH} - for dir in ${!pathvar} ; do - if [ "$dir" != "$1" ] ; then - newpath=${newpath:+$newpath:}$dir - fi - done - export $pathvar="$newpath" -} - -pathprepend () -{ - pathremove $1 $2 - local pathvar=${2:-PATH} - export $pathvar="$1${!pathvar:+:${!pathvar}}" -} - -pathappend () -{ - pathremove $1 $2 - local pathvar=${2:-PATH} - export $pathvar="${!pathvar:+${!pathvar}:}$1" -} - -# ------------------------------------------------------------------------------ -# expandlist : treat wildcards in a file/directory list -# ------------------------------------------------------------------------------ -expandlist() -{ - local result="" - for item in "$1"; do - for content in "$item"; do - result+="\"$content\" " - done - done - echo $result -} - -# ------------------------------------------------------------------------------ -# timer_* functions : internal timing function for prompt -# ------------------------------------------------------------------------------ -function timer_now -{ - date +%s%N -} - -function timer_start -{ - timer_start=${timer_start:-$(timer_now)} -} - -function timer_stop -{ - local delta_us=$((($(timer_now) - $timer_start) / 1000)) - local us=$((delta_us % 1000)) - local ms=$(((delta_us / 1000) % 1000)) - local s=$(((delta_us / 1000000) % 60)) - local m=$(((delta_us / 60000000) % 60)) - local h=$((delta_us / 3600000000)) - # Goal: always show around 3 digits of accuracy - if ((h > 0)); then - timer_show=${h}h${m}m - elif ((m > 0)); then - timer_show=${m}m${s}s - elif ((s >= 10)); then - timer_show=${s}.$((ms / 100))s - elif ((s > 0)); then - timer_show=${s}.$(printf %03d $ms)s - elif ((ms >= 100)); then - timer_show=${ms}ms - elif ((ms > 0)); then - timer_show=${ms}.$((us / 100))ms - else - timer_show=${us}us - fi - unset timer_start -} - -# ------------------------------------------------------------------------------ -# Function triguered internaly by bash : defining prompt -# ------------------------------------------------------------------------------ -set_prompt () -{ - Last_Command=$? # Must come first! - Blue='\[\e[0;34m\]' - White='\[\e[01;37m\]' - Yellow='\[\e[01;93m\]' - Red='\[\e[01;31m\]' - Green='\[\e[01;32m\]' - OnGrey='\[\e[47m\]' - OnRed='\[\e[41m\]' - OnBlue='\[\e[44m\]' - ICyan='\[\e[0;96m\]' - Default='\[\e[00m\]' - FancyX='\342\234\227' - Checkmark='\342\234\223' - - # Begin with time - PS1="\[\e[s\e[1;1H$Blue$OnGrey [ \t ] $OnBlue" - - # Add a bright white exit status for the last command - - # If it was successful, print a green check mark. Otherwise, print - # a red X. - if [[ $Last_Command == 0 ]]; then - PS1+="$White$OnBlue [ \$Last_Command " - PS1+="$Green$Checkmark " - else - PS1+="$White$OnRed [ \$Last_Command " - PS1+="$Yellow$FancyX " - fi - - # Add the ellapsed time and current date - timer_stop - PS1+="($timer_show)$White ] $OnBlue " - - # If root, just print the host in red. Otherwise, print the current user - # and host in green. - if [[ $EUID -eq 0 ]]; then - PS1+="$Red\\u$Green@\\h" - else - PS1+="$Green\\u@\\h" - fi - PS1+="\e[K\e[u$Default" - # Print the working directory and prompt marker in blue, and reset - # the text color to the default. - PS1+="$ICyan\\w \\\$$Default " -} - -# ------------------------------------------------------------------------------ -# Show profile version -# ------------------------------------------------------------------------------ -ver () -{ - echo "Profile version $PROFVERSION." -} -export ver -# ------------------------------------------------------------------------------ -# Change locale to French -# ------------------------------------------------------------------------------ -setfr () -{ - # Set fr locale definitions - export LANG=fr_FR.UTF-8 - export LC_MESSAGES=fr_FR.UTF-8 - export LC_ALL=fr_FR.UTF-8 -} -export setfr - -# ------------------------------------------------------------------------------ -# Change locale to C standard -# ------------------------------------------------------------------------------ -setc () -{ - # Locale definitions - export LANG=C - export LC_MESSAGES=C - export LC_ALL=C -} -export setc - -# ------------------------------------------------------------------------------ -# Change locale to US (needed by Steam) -# ------------------------------------------------------------------------------ -setus () -{ - # Locale definitions - export LANG=en_US.UTF-8 - export LC_MESSAGES=en_US.UTF-8 - export LC_ALL=en_US.UTF-8 -} -export setc - -# ------------------------------------------------------------------------------ -# Display weather of the given city (or default one) -# ------------------------------------------------------------------------------ -meteo () -{ - cities=$@ - [[ $# -eq 0 ]] && local cities=$DEFAULT_CITY - - for city in $cities; do - curl wttr.in/$city - done -} -export meteo - -# ------------------------------------------------------------------------------ -# Clean a directory or a tree from temporary or backup files -# ------------------------------------------------------------------------------ -clean () -{ - for opt in $@ ; do - case $opt in - "-r"|"--recurs") - local recursive=1 - ;; - - "-h"|"--help") - echo "clean: erase backup files in the given directories." - echo - echo "Usage: clean [option] [directory1] [...[directoryX]]" - echo - echo "Options:" - echo " -h, --help Display that help screen" - echo " -r, --recurs Do a recursive cleaning" - echo " -f, --force Do not ask for confirmation (use with care)" - echo " -s, --shell Do nothing and display what will be executed" - echo - return 0 - ;; - - "-s"|"--shell") - local outshell=1 - ;; - - "-f"|"--force") - local force=1 - ;; - - "-"*) - echo "Invalid option, use \"clean --help\" to display usage." - echo - return 1 - ;; - - *) - local dirlist="$dirlist $opt" - ;; - esac - done - - [[ ! $dirlist ]] && local dirlist=$(pwd) - - [[ ! $recursive ]] && local findopt="-maxdepth 1" - [[ ! $force ]] && local rmopt="-i" - unset recursive force - - for dir in $dirlist; do - local dellist=$(find $dir $findopt -type f -name "*~" -o -name "#*#" \ - -o -name "*.bak" -o -name ".~*#") - for f in $dellist; do - if [[ ! $outshell ]]; then - rm $rmopt $f - else - echo "rm $rmopt $f" - fi - done - done - unset outshell dirlist dellist findopt rmopt -} -export clean - -# ------------------------------------------------------------------------------ -# Login root via SSH on the given machine -# ------------------------------------------------------------------------------ -ssr () -{ - for opt in $@ ; do - case $opt in - "-h"|"--help") - echo "ssr: do a root user ssh login." - echo - echo "Usage: ssr " - return 0 - ;; - esac - done - - [[ ! $1 ]] && - echo "Please specify the server you want to log in." && - return 1 - - local srv=$1 && shift - - ssh -Y root@$srv $@ -} -export ssr - -# ------------------------------------------------------------------------------ -# Look for a package within installed one -# ------------------------------------------------------------------------------ -dpkgs () -{ - local count=0 - for opt in $@ ; do - case $opt in - "-h"|"--help") - echo "dpkgs: look for an installed package by it's name." - echo - echo "Usage: dpkgs " - return 0 - ;; - - "-"*) - echo "Invalid option, use \"dpkgs --help\" to display usage." - echo - return 1 - ;; - - *) - local pkg=$1 && shift - count=$(( $count + 1 )) - [[ $count -gt 1 ]] && - echo "*** Error: Please specify a package name, without space, eventually partial." && - return 1 - - ;; - esac - done - [[ $count -lt 1 ]] && - echo "*** Error: Please specify a package name, without space, eventually partial." && - return 1 - - [[ -x /usr/sbin/dpkg ]] && - echo "*** Error: dpkg command seems unavialable." && - return 2 - - dpkg -l | grep $pkg -} -export dpkgs - -# ------------------------------------------------------------------------------ -# Search processes matching the given string -# ------------------------------------------------------------------------------ -ppg () -{ - ps -edf | grep $@ | grep -v "grep $@" -} -export ppg - -# ------------------------------------------------------------------------------ -# Create a directory then goes inside -# ------------------------------------------------------------------------------ -mcd () { - if [[ ! $# -eq 1 ]] ; then - echo "Create a directory then goes inside." - echo "Usage: mcd " - return 1 - fi - mkdir -pv $1 && cd $1 -} -export mcd - -# ------------------------------------------------------------------------------ -# Get PID list of the given process name -# ------------------------------------------------------------------------------ -gpid () { - [[ $# -eq 1 ]] && local single=1 - for pid in $@; do - local result=$(ps -A | grep $pid | awk '{print $1}') - if [[ $single ]]; then - [[ $result ]] && echo "$result" - else - [[ $result ]] && echo "$pid: $result" - fi - done - [[ $result ]] || return 1 -} -export gpid - -# ------------------------------------------------------------------------------ -# Remove host from know_host (name and IP) for the active user -# ------------------------------------------------------------------------------ -rmhost () { - if [[ "$#" -ne 1 ]]; then - echo "Error: incorrect number of parameters." - echo "Usage: rmhost " - return 1 - fi - - hst=$1 - ip=$(host $hst | grep "has address" | awk '{print $NF}') - [[ ! $? ]] && echo "*** rmhost(): Error extracting IP from hostname." && return 1 - - echo "Removing host $hst from ssh known_host..." - ssh-keygen -R $hst > /dev/null - echo "Removing IP $ip from ssh known_host..." - ssh-keygen -R $ip > /dev/null -} -export rmhost - -# ------------------------------------------------------------------------------ -# Rename all files in current directory to replace spaces with _ -# ------------------------------------------------------------------------------ -rmspc () { - local lst="" - for opt in $@ ; do - case $opt in - "-h"|"--help") - echo "rmspc: remove spaces from all filenames in current directories" - echo - echo "Usage: rmspc [option]" - echo - echo "Options:" - echo " -h, --help Display that help screen" - echo " -r, --recursive Treat subdirectories of the given directory" - echo " -c, --subst-char Change the replacement character (default is underscore)" - echo " -v, --verbose Display what is being done" - echo " -s, --shell Do nothing and display commands that would be executed" - echo - return 0 - ;; - - "-r"|"--recursive") - local recurs=1 - ;; - - "-c"?*|"--subst-char"?*) - local substchar=$(echo "$opt" | cut -f 2- -d '=') - ;; - - "-v"|"--verbose") - local verb=1 - ;; - - "-s"|"--shell") - local shell=1 - ;; - - *) - echo "Invalid parameter, use \"rmspc --help\" to display options list" - echo - return 1 - ;; - esac - done - - [[ ! $substchar ]] && substchar="_" - [[ $verb ]] && local mvopt="-v" - - for f in *\ *; do - [[ $recurs ]] && [[ -d "$f" ]] && ( - #[[ $verb ]] && echo "Entering directory $f ..." - pushd "$f" > /dev/null - rmspc --subst-char="$substchar" $mvopt --shell - popd > /dev/null - #[[ $verb ]] && echo "Leaving directory $f" - ) - - if [[ $(echo $f | grep " ") ]]; then - local newf="${f// /${substchar}}" - local command="mv $mvopt \"$f\" \"$newf\"" - if [[ $shell ]]; then - echo $command - else - $command - fi - fi - done - unset lst substchar verb shell newf command mvopt -} -export rmspc - -# ------------------------------------------------------------------------------ -# Smartly uncompress archives (zip only) -# ------------------------------------------------------------------------------ -utaz() -{ - for opt in $@ ; do - case $opt in - "-h"|"--help") - echo "utaz: uncompress all the given files and/or the ones found in the given" - echo " directories creating an host directory where needed." - echo - echo "Usage: utaz [option] [directorie(s)|file(s)]" - echo - echo "Options:" - echo " -h, --help Display that help screen" - echo " -d, --delete If decompression success, delete the source file" - echo " -c, --create-dir Always create a host directory" - echo " -n, --no-dir Never create a host directory" - echo - return 0 - ;; - - "-d"|"--delete") - local willrm=1 - ;; - - "-c"|"--create-dir") - local createdir=1 - ;; - - "-n"|"--no-dir") - local nodir=1 - ;; - - "-"*) - echo "Invalid option, use \"utaz --help\" to display options list" - echo - return 1 - ;; - - *) - # The ${opt%/} writing is to remove trailing / if any - local LIST="$LIST ${opt%/}" - ;; - esac - done - - [[ $createdir && $nodir ]] && echo "*** Error: --create-dir and --no-dir options are mutually exclusive." - - [[ ! $LIST ]] && local LIST="." - - for zitem in $LIST; do - [[ $(ls $zitem/*.zip 2> /dev/null | wc -l) -eq 0 ]] && - echo "$zitem contains no supported archive file, skipping." && - continue - - for f in $zitem/*.zip; do - echo -n "Processing archive $zitem/$f... " - local dir=${f::-4} - - mkdir -p $dir - [[ $? -gt 0 ]] && - echo "[ filesystem can't create directories, exit ]" && - return 1 - - unzip -o $f -d $dir > /dev/null 2>&1 - case $? in - 0) - [[ $willrm ]] && rm -f $f && echo -n "Deleted ! " - ;; - - 1) - echo "No deletion on warnings " - ;; - *) - echo "[ zip file corrupted, failed ]" - rm -rf $dir > /dev/null 2>&1 - continue - ;; - esac - - if [[ $createdir ]]; then - echo -n "[ subdir created, " - elif [[ $nodir ]]; then - mv ./$dir/* ./ && rmdir $dir - echo -n "[ No subdir, " - else - subdirs=$(find $dir -maxdepth 1 | wc -l) - if [[ $subdirs -eq 2 ]]; then - mv ./$dir/* ./ && rmdir $dir - echo -n "[ No subdir, " - else - echo -n "[ subdir created, " - fi - fi - echo " OK ]" - done - done -} -export utaz - -# ------------------------------------------------------------------------------ -# Compress directories or files into one or more archive -# ------------------------------------------------------------------------------ -taz() -{ - _doxz() - { - command -v xz >/dev/null 2>&1 || { - echo -e >&2 "\t*** The program 'xz' is not installed, aborting." - return 127 - } - - [[ $4 ]] && local verb='-v' - - # Display a warning for this format - echo -e "\t! Warning: xz format is not suited for long term archiving." - echo -e "\t See https://www.nongnu.org/lzip/xz_inadequate.html for details." - - # Compresse to xz (lzma2) - Deprecated - xz $verb --compress --keep -$3 -T $2 $1 - return $? - } - - _dolz() - { - local procopt="--threads $2" - local command=plzip - - command -v plzip >/dev/null 2>&1 || { - command -v lzip >/dev/null 2>&1 || { - echo -e >&2 "\t*** Program 'plzip' or 'lzip' are not installed, aborting." - return 127 - } - local command=lzip - local procopt="" - [[ $2 -gt 1 ]] && - echo -e "\t! Warning: lzip doesn't support multithreading, falling back to 1 thread." && - echo -e "\t* Consitder installing plzip to obtain multithreading abilities." - } - - [[ $4 ]] && local verb="-vv" - - # Compresse au format lzip (lzma) - $command $verb $procopt --keep -$3 $1 - return $? - } - - _dogz() - { - local procopt="--processes $2" - local command=pigz - - command -v pigz >/dev/null 2>&1 || { - command -v gzip >/dev/null 2>&1 || { - echo -e >&2 "\t*** Programs 'pigz' or 'gzip' are not installed, aborting." - return 127 - } - local command="gzip --compress" - local procopt="" - [[ $2 -gt 1 ]] && - echo -e "\t! Warning: gzip doesn't support multithreading, falling back to 1 thread." && - echo -e "\t* Consitder installing pigz to obtain multithreading abilities." - } - - [[ $4 ]] && local verb="--verbose" - - # Compresse au format bz2 - $command $verb $procopt --keep -$3 $1 - return $? - } - - _dobz2() - { - local procopt="-p$2" - local command=pbzip2 - - command -v pbzip2 >/dev/null 2>&1 || { - command -v bzip2 >/dev/null 2>&1 || { - echo -e >&2 "\t*** The program 'pbzip2' or 'bzip2' are not installed, aborting." - return 127 - } - local command=bzip2 - local procopt="" - [[ $2 -gt 1 ]] && - echo -e "\t! Warning: bzip2 doesn't support multithreading, falling back to 1 thread." && - echo -e "\t* Consitder installing pbzip2 to obtain multithreading abilities." - } - - [[ $4 ]] && local verb="-v" - - # Compresse au format bz2 - $command $verb --compress $procopt --keep -$3 $1 - return $? - } - - _dolzo() - { - command -v lzop >/dev/null 2>&1 || { - echo -e >&2 "\t*** The program 'lzop' is not installed, aborting." - return 127 - } - - [[ $4 ]] && local verb='-v' - [[ $2 -gt 1 ]] && echo -e "\t! Warning: lzop doesn't support multithreading, falling back to 1 thread." - - # Compresse au format lzo - lzop --keep -$3 $1 - return $? - } - - for opt in $@ ; do - case $opt in - "-h"|"--help") - echo "taz: archive all files of a directory." - echo - echo "Usage: taz [option] [--parallel=] [--format=] [directory1 ... directoryN]" - echo - echo "Options:" - echo " -h, --help Display that help screen" - echo " -d, --delete Delete source file or directory after success" - echo " -f, --format Chose archive format in the given list. If several format are" - echo " given, the smalest is kept" - echo " -p, --parallel Number of threads to use (if allowed by underlying utility)" - echo " -v, --verbose Display progress where possible" - echo " -1, .., -9 Compression level to use [1=fast/big, 9=slow/small]" - echo - echo "Supported archive format:" - echo " Param.| programs | Algo. | Description" - echo " ------+---------------+-------+----------------------------------------" - echo " lz | plzip, lzip | lzma | Safe efficient default format" - echo " xz | xz | lzma2 | Unsafe, not for long term" - echo " bz2 | pbzip2, bzip2 | bzip2 | Historical but less efficient than lz" - echo " gz | pigz, gzip | lz77 | Historical, safe, fast" - echo " lzo | lzop | lzo | Very fast but no multithread" - echo " tar | tar | tar | No compression" - echo - return 0 - ;; - - "-d"|"--delete") - local willrm=1 - ;; - - "-f"?*|"--format"?*) - local compform=$(echo "$opt" | cut -f 2- -d '=') - ;; - - "-p"?*|"--parallel"?*) - local nproc=$(echo "$opt" | cut -f 2- -d '=') - ;; - - "-v"|"--verbose") - local verbose=1 - ;; - - "-"[1..9]) - local complevel=${opt:1:1} - ;; - - "-"*) - echo "Invalid option, use taz --help to display options list" - echo - return 1 - ;; - - *) - local LIST="$LIST ${opt%/}" - ;; - esac - done - - [[ ! $compform ]] && compform=lz # safe and efficient (unless data are already compressed) - [[ ! $nproc ]] && nproc=1 - [[ ! $complevel ]] && complevel=6 - - for item in $LIST; do - local donetar=0 - echo "--- Processing $item..." - - if [[ -d $item ]]; then - echo -ne "\t* Creating $item.tar... " - - tar -cf $item{.tar,} - if [[ ! $? -eq 0 ]]; then - echo "[ failed, skipping ]" - continue - fi - - local donetar=1 - echo "[ OK ]" - fi - - local fname=$item - [[ $donetar -gt 0 ]] && fname=$item.tar - - # Skip compression part if tar is asked - if [[ $compform != "tar" ]]; then - echo -e "\t* Compressing archive..." - _do$compform $fname $nproc $complevel $verbose - [[ ! $? -eq 0 ]] && case $? in - 127) - echo -e "\t*** Compression program unavailable, aborting." - return 127 - ;; - *) - echo -e "\t*** Compression program returned an error, not deleting anything if asked, skipping to next item." - continue - ;; - esac - - [[ $donetar -gt 0 ]] && rm $fname - fi - - if [[ $willrm ]]; then - echo -en "\t* Deleting original source as asked... " - rm -r $item && echo '[ OK ]' || echo '[ failed ]' - fi - - echo "--- Done" - done - -} -export taz - -# ------------------------------------------------------------------------------ -# Display system genal information -# ------------------------------------------------------------------------------ -showinfo() { - echo -e "\n" - figlet -f ansi_shadow $(hostname) -t -k - echo "" - neofetch -} -export showinfo - -# ------------------------------------------------------------------------------ -# Save or restore Konsle session manually -# ------------------------------------------------------------------------------ -ksession() { - # Configuration - local command='' - local savepath="${HOME}/.konsole/" - local savefile="$savepath/current-tabs" - - # Restore if asked to - if [[ "$1" = "restore" ]]; then - echo "Restoring..." - konsole --tabs-from-file $savefile -e 'bash -c exit' & - - elif [[ "$1" = "save" ]]; then - pid=$(pgrep konsole -u $USER) - if [[ $pid ]]; then - echo "# Most recent session list " $(date) > $savefile - for p in $pid; do - local sessions=$(qdbus org.kde.konsole-$p | grep /Sessions/) - if [[ $sessions ]] ; then - [[ ! -d $savepath ]] && mkdir $savepath - for i in $sessions; do - local format=$(qdbus org.kde.konsole-$p $i tabTitleFormat 0) - local processid=$(qdbus org.kde.konsole-$p $i processId) - local cwd=$(pwdx $processid | sed -e "s/^[0-9]*: //") - if [[ $(pgrep --parent $processid) ]] ; then - childpid=$(pgrep --parent $processid) - command=$(ps -p $childpid -o args=) - fi - echo "workdir: ${cwd};; title: ${format};; command:${command}" >> ${savefile} - command='' - done - fi - done - fi - else - echo "ksession: save and restore KDE's Konsole sessions" - echo - echo "Usage: ksession " - fi -} -export ksession - - -# ------------------------------------------------------------------------------ -# ------------------------------------------------------------------------------ -# ********************************** MAIN PROGRAM ****************************** -# ------------------------------------------------------------------------------ -# ------------------------------------------------------------------------------ - -# Former PS1, stopped for much better function -# Set the prompt look'n'feel -# NORMAL="\[\e[0m\]" -# RED="\[\e[1;31m\]" -# GREEN="\[\e[1;32m\]" -# PURPLE="\[\e[1;35m\]" -# BLUEONGREY="\[\e[0;34m\e[47m\]" -# if [[ $EUID == 0 ]] ; then -# export PS1="$BLUEONGREY[\t]$NORMAL $PURPLE\$?$NORMAL|$RED\u@\H:$NORMAL\w$RED\$ $NORMAL" -# else -# export PS1="$BLUEONGREY[\t]$NORMAL $PURPLE\$?$NORMAL|$GREEN\u@\H:$NORMAL\w$GREEN\$ $NORMAL" -# fi - -# Build PATH environment variable -if [[ $EUID -eq 0 ]] ; then - pathappend /sbin:/usr/sbin -fi -[[ -d /share/services/gestparc ]] && pathappend /share/services/gestparc -[[ -d ~/bin ]] && pathappend ~/bin -[[ -d ~/.local/bin ]] && pathappend ~/.local/bin - -# Set bash history -export HISTSIZE=50000 -export HISTIGNORE="&:[bf]g:exit" - -# Set default pager -export PAGER=less - -# Execute optionnal config script if any -for script in ~/profile.d/*.sh ; do - if [ -r $script ] ; then - . $script - fi -done - -# Interactive shell detection, two methods available each one of those might have different result -# depending on distribution -#shopt -q login_shell && INTERACTIVE=1 -[[ $- == *i* ]] && INTERACTIVE=1 - -if [[ $INTERACTIVE ]]; then - # For compiling (as we often compile with LFS/0linux...) - export MAKEFLAGS='-j4' - export PKGSOURCES='/share/src/archives' - - #Aliases - alias ll='ls -laFh --color=auto' - alias la='ls -Ah --color=auto' - alias l='ls -CF --color=auto' - alias ls='ls --color=auto' - - alias grep='grep --color=auto' - alias egrep='egrep --color=auto' - alias fgrep='fgrep --color=auto' - alias qfind="find . -name " - - alias mkck='make check' - alias mkin='make install' - alias mkdin='make DESTDIR=$PWD/dest-install install' - alias ssh='ssh -Y' - - alias wget='wget -c' # resume mode by default - alias myip='curl ip.appspot.com' - - # Human readable by default - alias df='df -H' - alias du='du -ch' - - alias sdu='du -sk ./* | sort -n' - - # Define PS1 - trap 'timer_start' DEBUG - PROMPT_COMMAND='set_prompt' - - # More colors - export TERM=xterm-256color - - # Set default language - setfr - showinfo - echo "Profile version $PROFVERSION chargé..." -fi - -# Cleanup -unset pathremove pathprepend pathappend - -#return 0 -# End /etc/profile