Nxl67002 - AndLinux - Files

From miki
Jump to navigation Jump to search

These are the configuration files on Configuration NXP Dell Latitude D620 - AndLinux.

Windows Host files

settings.txt

Download [{{#file: settings.txt}} this file].

mem=384
root=/dev/cobd0
kernel=vmlinux
cobd0=Drives\base.vdi
cobd1=Drives\swap.vdi
cobd2=Drives\data.reiserfs.10G.dvi
cofs31=.
eth0=slirp
eth1=tuntap,"TAP-Colinux",00:11:22:33:44:55
cofs0=C:\
cofs1=D:\

AndLinux files

/etc/fstab

Download [{{#file: fstab}} this file].

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>      <options>       <dump>  <pass>
proc            /proc           proc        defaults        0       0
/dev/cobd0      /               ext3        defaults        1       1
/dev/cobd1      none            swap        sw              0       0
/dev/cobd2      /mnt/data       reiserfs    noatime,notail  0       0
31              /mnt/and        cofs        defaults        0       0
0               /mnt/winc       cofs        defaults,gid=samba,dmask=0775,fmask=0775        0       0
1               /mnt/wind       cofs        defaults,gid=samba,dmask=0775,fmask=0775        0       0

/usr/local/bin/be

Download [{{#file: be}} this file].
Note that this script would ideally require to add the following line to /etc/sudoers:

ALL ALL=(ALL) NOPASSWD: /bin/loadkeys
#!/bin/bash

sudo loadkeys /usr/share/keymaps/i386/azerty/be2-latin1.kmap.gz

/usr/local/bin/ssh-agent-refresh.sh

Download [{{#file: ssh-agent-refresh.sh}} this file].

#!/bin/bash
#
# This script will detect any running ssh-agent and restore the environment
# variable that would normally be created with the command
#
# % ssh-agent -s
#
# By default, this script looks for an existing ssh-agent process already running with
# same UID as the current shell. If none is found, a new ssh-agent process is launched.
# If the SSH_AUTH_SOCK is not specified, the script will try to find back the correct
# socket name. For this it looks for a socket named /tmp/ssh-*/agent.*, with same UID
# as current script.
#
# If the environment variable SSH_AUTH_SOCK is set, ssh-agent will use that socket name
# instead of generating a new one (on first invocation). 
#
# Example of use:
#   ssh-agent-refresh.sh
#   if ( ssh-add -L | grep -q $USER ); then ssh-add -t 3600; fi
#
# Example with predefined SSH_AUTH_SOCK
#   export SSH_AUTH_SOCK=/tmp/.ssh-agent-$USER
#   ssh-agent-refresh.sh
#   if ( ssh-add -L | grep -q $USER ); then ssh-add -t 3600; fi
#
# Example of output of ssh-agent -s:
#
# SSH_AUTH_SOCK=/tmp/ssh-VAjpOtefMI/agent.2112; export SSH_AUTH_SOCK;
# SSH_AGENT_PID=2568; export SSH_AGENT_PID;
# echo Agent pid 2568;

SSH_AGENT_PROCESS_NAME=ssh-agent

# Shell must be a login shell - for USER variable
if [ -z "$USER" ]; then
	echo "ERROR! Environment variable USER not defined - you probably don't run a login shell"
	exit 4
fi

# First see check that at most one instance of ssh-agent is running.
SSH_AGENT_COUNT=`ps -u $USER | grep -c "[/ ]${SSH_AGENT_PROCESS_NAME}\$"`
if [ $SSH_AGENT_COUNT -gt 1 ]; then
	echo "ERROR! Several ssh-agent processes are running">/dev/stderr
	exit 3
fi

# Third launch a new ssh-agent if none is running. We use variable SSH_AUTH_SOCK if defined
if [ $SSH_AGENT_COUNT -eq 0 ]; then 
	# Remove old /tmp/ssh-* directory if no ssh-agent process is running
	rm -rf /tmp/ssh-*

	if [ $SSH_AUTH_SOCK ]; then 
		ssh-agent -a "$SSH_AUTH_SOCK" -s
	else 
		ssh-agent -s
	fi
	exit 1
fi

# Fourth, find back ssh-agent-pid We use the blob below because pidof doesn't filter based on process UID
SSH_AGENT_PID=`ps -u $USER | grep "[/ ]$SSH_AGENT_PROCESS_NAME$" | sed -r 's/^ *([0-9]*) .*$/\1/'`

# Finally find the socket that the running ssh-agent is attached to. We reuse variable SSH_AUTH_SOCK if it is defined.
if [ ! $SSH_AUTH_SOCK ]; then 
	SSH_AUTH_SOCK=`find /tmp -type s -user $USER -path "/tmp/ssh-*/agent.*"`
else
	if [ -x "$SSH_AUTH_SOCK" ]; then
		echo "ssh-agent process found (pid $SSH_AGENT_PID), but given socket does not exist ($SSH_AUTH_SOCK)!">/dev/stderr
		exit 2
	fi
fi

echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK; export SSH_AUTH_SOCK;"
echo "SSH_AGENT_PID=$SSH_AGENT_PID; export SSH_AGENT_PID;"
echo "echo Agent pid $SSH_AGENT_PID;"

exit 0

~/.bashrc

Download [{{#file: .bashrc}} this file]. Everything before #### CUSTOMIZATION is the original file.

# ~/.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
# don't overwrite GNU Midnight Commander's setting of `ignorespace'.
export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups
# ... or force ignoredups and ignorespace
export 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)

# 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

# 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 color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    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 -l'
#alias la='ls -A'
#alias l='ls -CF'

# 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 ]; then
    . /etc/bash_completion
fi


################################################################################
##### CUSTOMIZATION ############################################################
################################################################################

#### ALIASES & FUNCTIONS
########################

# Read colors from .dircolors.cfg
if [ -x /usr/bin/dircolors -a -a ~/.dircolors.cfg ]; then
	eval `dircolors -b ~/.dircolors.cfg`
	alias ls='ls -F --color=auto --group-directories-first'
else
	alias ls='ls -F --group-directories-first'
fi

alias df='df -h'
alias du='du -h'
alias grep='grep --color'						# show differences in colour
alias egrep='egrep --color'						# show differences in colour
alias fgrep='fgrep --color'						# show differences in colour
alias l='ls -l'									# long list
alias la='ls -A'								# all but . and ..
alias ll='ls -Al'
alias lla="ls -al"
alias ls-l='ls -l'
alias dua="du -sh * .*"
alias dfh="df -h"
alias dir='ls --format=vertical'
alias vdir='ls --format=long'
function sorttag()
{
  TAGS="$*"
  echo $TAGS | sed "s/ /\n/g" | sort | (for i in `cat`; do MYVAR="$MYVAR $i"; done; echo $MYVAR) >/dev/clipboard
  cat /dev/clipboard
}
alias st=sorttag

#### SSH
########################

alias ssha="ssh andlinux"
alias sshn="ssh -t noekeon 'bash --rcfile ~/private/mip.bashrc'"
alias sshg="ssh gryphon"
alias sshnd="ssh -t noekeondirect 'bash --rcfile ~/private/mip.bashrc'"
alias sftpn="sftp daemenj@ftp.noekeon.org"
#alias sshag="ssh-agent bash --rcfile ~/.basshrc"	#Activate a ssh-agent shell

# function scpg - Copy file from/to gryphon
# USAGE: scpg src-local-file-path    @/dest-remote-file-path
#        scpg @/src-remote-file-path  dest-local-file-path
function scpg() {
 SRC=`echo $1|sed 's!@!gryphon:/home/baddreams!'`;
 DST=`echo $2|sed 's!@!gryphon:/home/baddreams!'`;
 scp "$SRC" "$DST";
}

# function scpa - Copy file from/to andlinux
# USAGE: scpa src-local-file-path    @/dest-remote-file-path
#        scpa @/src-remote-file-path  dest-local-file-path
function scpa() {
 SRC=`echo $1|sed 's!@!andlinux:/home/beq06659!'`;
 DST=`echo $2|sed 's!@!andlinux:/home/beq06659!'`;
 scp "$SRC" "$DST";
}

# function scpn - Copy file from/to remote noekeon.org priorweb
# USAGE: scpn src-local-file-path    @/dest-remote-file-path
#        scpn @/src-remote-file-path  dest-local-file-path
function scpn() {
 SRC=`echo $1|sed 's!@!daemenj@noekeon:/opt/www/daemenj/web/private!'`;
 DST=`echo $2|sed 's!@!daemenj@noekeon:/opt/www/daemenj/web/private!'`;
 scp "$SRC" "$DST";
}

# function scpnup - Copy file from/to remote Miki Wiki's upload directory
# USAGE: scpn src-local-file-path    @/dest-remote-file-path
#        scpn @/src-remote-file-path  dest-local-file-path
function scpnup() {
 SRC=`echo $1|sed 's!@!daemenj@noekeon:/opt/www/daemenj/web/kiwi.noekeon.org/miki/upload!'`;
 DST=`echo $2|sed 's!@!daemenj@noekeon:/opt/www/daemenj/web/kiwi.noekeon.org/miki/upload!'`;
 scp "$SRC" "$DST";
}

#### NETWORK
########################

# NXP network settings
#proxy is a synonym but less portable because likely only valid in NXP Leuven
#alias nxp="export http_proxy=http://proxy:8080/; export ftp_proxy=http://proxy:8080/"
alias nxp="cp ~/.ssh/config-nxp ~/.ssh/config; export http_proxy=http://emea.nics.nxp.com:8080/; export ftp_proxy=\$http_proxy"

# HOME network settings
alias home="cp ~/.ssh/config-home ~/.ssh/config"

# TUNNEL network settings
alias tunnel="cp ~/.ssh/config-tunnel ~/.ssh/config"

#### CUSTOMIZATION
########################
# Set a default prompt of: user@host and current_directory
PS1='\[\e]0;\w\a\]\n\[\e[01m\e[34m\]\u@\h \[\e[0m\e[33m\]\w\[\e[0m\]\n\$ '
export PS1

~/.dircolors.cfg

Download [{{#file: .dircolors.cfg}} this file].

# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
# Below, there should be one TERM entry for each termtype that is colorizable
TERM linux
TERM linux-c
TERM mach-color
TERM console
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM cygwin
TERM dtterm
TERM mlterm
TERM putty
TERM xterm
TERM xterm-color
TERM xterm-debian
TERM rxvt
TERM rxvt-unicode
TERM screen
TERM screen-bce
TERM screen-w
TERM vt100
TERM Eterm
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 35 # socket
DOOR 35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 32
# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 32 # executables (bright green)
#.exe 32
#.com 32
#.btm 32
#.bat 32
.tar 01;31 # archives or compressed (bright red)
.tgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.zip 01;31
.z 01;31
.Z 01;31
.gz 01;31
.bz2 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
# image formats
.jpg 35
.jpeg 35
.gif 35
.bmp 35
.pbm 35
.pgm 35
.ppm 35
.tga 35
.xbm 35
.xpm 35
.tif 35
.tiff 35
.png 35
.mov 35
.mpg 35
.mpeg 35
.avi 35
.fli 35
.gl 35
.dl 35
.xcf 35
.xwd 35
# audio formats
.flac 35
.mp3 35
.mpc 35
.ogg 35
.wav 35

~/.inputrc

Download [{{#file: .inputrc}} this file].

#
# MIP CUSTOM BINDING STARTS HERE
#

# Allow 8-bit input/output (for Cygwin)
set meta-flag on
set convert-meta off
set input-meta on
set output-meta on
$if Bash
  # Don't ring bell on completion
  #set bell-style none

  # or, don't beep at me - show me
  #set bell-style visible

  #
  # If set to on, words which have more than one possible completion without
  # any possible partial completion cause the matches to be listed immediately
  # instead of ringing the bell.
  #
  set show-all-if-unmodified on

  #
  # If set to on, words which have more than one possible completion cause the
  # matches to be listed immediately instead of ringing the bell.
  #
  set show-all-if-ambiguous on

  # Expand homedir name
  #set expand-tilde on

  # Append "/" to all dirnames
  #set mark-directories on
  #set mark-symlinked-directories on

  # Match all files
  #set match-hidden-files on

  # 'Magic Space'
  # Insert a space character then performs
  # a history expansion in the line
  Space: magic-space
$endif

"\eOA":history-search-backward     #Up arrow
"\e[A":history-search-backward     #Up arrow
"\eOB":history-search-forward      #Down arrow
"\e[B":history-search-forward      #Down arrow
"\C- ":dynamic-complete-history    #Ctrl-space
"\e ":dynamic-complete-history     #Esc-space

~/.profile

Download [{{#file: .profile}} this file].

# ~/.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

# SSH settings
##############
eval `/usr/local/bin/ssh-agent-refresh.sh` >/dev/null
if ( ! ( ssh-add -L | grep -q $USER ) ); then ssh-add; fi

~/.ssh/config-home

Download [{{#file: config-nxp}} this file].

# ~/.ssh/config-home

Host ftp.noekeon.org noekeon
	User		daemenj
	HostName	ftp.noekeon.org

Host noekeonsshtunnel
        User            daemenj
        HostName        ftp.noekeon.org
        ProxyCommand    /usr/local/bin/ssh-tunnel.pl -q -f - - %h %p

Host gryphon gryphon
	User		baddreams
	HostName	gryphon

Host *
	ServerAliveInterval	15

~/.ssh/config-nxp

Download [{{#file: config-nxp}} this file].

# ~/.ssh/config-nxp

Host ftp.noekeon.org noekeon
	User		daemenj
	HostName	ftp.noekeon.org
#TEST-To prevent disconnect if network down...
	TCPKeepAlive	no			
	ProxyCommand	/usr/local/bin/ssh-tunnel.pl -f - - %h %p
#	Proxycommand /bin/bash -c 'exec 3<>/dev/tcp/emea.nics.nxp.com/8080;echo -n -e "CONNECT %h:%p HTTP/1.0\r\n\r\n" >&3; read -n 39 <&3; echo -n -e "SSH-2.0-OpenSSH_5.1\r\n" >&3; head -c 50 <&3; read -n 21; exec /usr/local/bin/multitee 0:3 3:1'
######  EXPERIMENTS:
#	Proxycommand /bin/bash -c 'exec 3<>/dev/tcp/emea.nics.nxp.com/8080;echo -n -e "CONNECT %h:%p HTTP/1.0\r\n\r\n" >&3; read -n 39 <&3; cat ~/.ssh/clbanner.txt >&3; head -c 50 <&3; read -n $(stat -c %%s ~/.ssh/clbanner.txt); exec /usr/local/bin/socat - FD:3'

Host noekeonsshtunnel
        User            daemenj
        HostName        ftp.noekeon.org
        ProxyCommand    /usr/local/bin/ssh-tunnel.pl -q -f - - %h %p

Host andlinux
	User		beq06659
	HostName	andlinux
	ProxyCommand	none

Host gryphon
	User		baddreams
	HostName	gryphon

Host *
#	ProxyCommand /usr/local/bin/ssh-tunnel.pl - - %h %p
	Proxycommand /bin/bash -c 'exec 3<>/dev/tcp/emea.nics.nxp.com/8080;echo -n -e "CONNECT %h:%p HTTP/1.0\r\n\r\n" >&3; read -n 39 <&3; echo -n -e "SSH-2.0-OpenSSH_5.1\r\n" >&3; head -c 50 <&3; read -n 21; exec /usr/local/bin/socat - FD:3'
	ServerAliveInterval     15

~/.ssh/config-tunnel

Download [{{#file: config-nxp}} this file].

# ~/.ssh/config-tunnel

Host ftp.noekeon.org noekeon
	User				daemenj
	HostName			ftp.noekeon.org
	ProxyCommand		/usr/local/bin/ssh-tunnel.pl -q -f - - %h %p

Host noekeonsshtunnel
	User				daemenj
	HostName			ftp.noekeon.org
	ProxyCommand		/usr/local/bin/ssh-tunnel.pl -q -f - - %h %p

Host andlinux
	User				beq06659
	HostName			andlinux
	ProxyCommand		none

Host gryphon gryphon
	User				baddreams
	HostName			gryphon

Host *
	ProxyCommand		/usr/local/bin/ssh-tunnel.pl -q - - %h %p
	ServerAliveInterval	15

~/.ssh/proxy.conf

Download [{{#file: proxy.conf}} this file].

# SSH Tunnel configuration file.

# Section: OPTIONS
[option-section]
debug=0
dry=0
icmp=0
sshping=1
timeout=1

# Section: PROXY
[proxy2-section]

#=== Philips gateway & proxy ========
130.145.67/24   proxy.adc-itcl.ce.philips.com:8080 -C ~/.ssh/clbanner.txt

#=== NXP Proxy - on DELL/WinXP ======================
#proxy is a synonym - but not portable because it might only work at Leuven...
#134.27.180/22	proxy:8080		-C ~/.ssh/clbanner.txt
134.27.180/22	emea.nics.nxp.com:8080	-C ~/.ssh/clbanner.txt

#=== NXP Proxy - on DELL/AndLinux ======================
#proxy is a synonym - but not portable because it might only work at Leuven... 
#10.0.2.2/32		proxy:8080		-C ~/.ssh/clbanner.txt
10.0.2.2/32		emea.nics.nxp.com:8080  -C ~/.ssh/clbanner.txt

~/.vimrc

Download [{{#file: .vimrc}} this file].

syntax enable
set bg=light
set number
set bs=2
nnoremap j h
nnoremap k j
nnoremap l k
nnoremap m l
nnoremap h m
vnoremap j h
vnoremap k j
vnoremap l k
vnoremap m l
vnoremap h m
set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab
set autoindent

~/crontab

Download [{{#file: crontab}} this file]. Install this file with crontab -u beq06659 ~/crontab.

# usr /bin/bash to run commands, instead of the default /bin/sh
SHELL=/bin/bash
# mail any output to 'beq06659', no matter whose crontab this is
MAILTO=beq0665
#
#
# m h dom mon dow   command     (dow=0|7 is sunday)
15 12 * * *      ~beq06659/bin/backup_noekeon

~/bin/backup_noekeon

Download [{{#file: backup_noekeon}} this file]. This file must be chmod +755.

#! /bin/bash

# This script will create a backup of the miki wiki database on noekeon.org
# Backup will be saved in ~/backup

# Some environment variable
BACKUPDIR=~/backup
WIKINAME=www.noekeon.org_miki
FSQLNAMEBASE=$BACKUPDIR/wiki-$WIKINAME-$(date '+%Y%m%d')
FFILENAMEBASE=$BACKUPDIR/wiki-$WIKINAME-$(date '+%Y%m%d')
FSQLNAME=${FSQLNAMEBASE}.sql.gz
FFILENAME=${FFILENAMEBASE}.tar.gz
MAXBACKUPCOUNT=3
BACKUPRC=~/.mybackuprc
THISWEEK=$(date '+%Y%V')
THISMONTH=$(date '+%Y%m')
THISYEAR=$(date '+%Y')

#Read our resource file if it exists, or create a new one...
if [ -a $BACKUPRC ]
then
	# ! HOMEDIR must be chmod 755 at most, and $BACKUPRC chmod 644 at most
	. $BACKUPRC
else
	NEXTWEEKLY=$THISWEEK                              # Next weekly is this week by default
	NEXTMONTHLY=$THISMONTH                            # Next monthly is this month by default
	NEXTYEARLY=$THISYEAR                              # Next yearly is this year by default
fi

#Create backup parent directory
mkdir -p $BACKUPDIR

function makedaily()
{
	local FSQLNAMENEW=${FSQLNAMEBASE}.daily.sql.gz
	echo "Creating backup file ${FSQLNAMENEW}..."
	mv $FSQLNAME ${FSQLNAMENEW}                       # We rename the file!
	local FFILENAMENEW=${FFILENAMEBASE}.daily.tar.gz
	echo "Creating backup file ${FFILENAMENEW}..."
	mv $FFILENAME ${FFILENAMENEW}                     # We rename the file!
}

function makeweekly()
{
	local FSQLNAMENEW=${FSQLNAMEBASE}.weekly.sql.gz
	echo "Creating backup file ${FSQLNAMENEW}..."
	cp $FSQLNAME ${FSQLNAMENEW}
	local FFILENAMENEW=${FFILENAMEBASE}.weekly.tar.gz
	echo "Creating backup file ${FFILENAMENEW}..."
	cp $FFILENAME ${FFILENAMENEW}
	NEXTWEEKLY=$((NEXTWEEKLY+1))                    # This will overflow but 201001 > 200954 so it's ok
}

function makemonthly()
{
	local FSQLNAMENEW=${FSQLNAMEBASE}.monthly.sql.gz
	echo "Creating backup file ${FSQLNAMENEW}..."
	cp $FSQLNAME ${FSQLNAMENEW}
	local FFILENAMENEW=${FFILENAMEBASE}.monthly.tar.gz
	echo "Creating backup file ${FFILENAMENEW}..."
	cp $FFILENAME ${FFILENAMENEW}
	NEXTMONTHLY=$((NEXTMONTHLY+1))                    # This will overflow but 201001 > 200913 so it's ok
}

function makeyearly()
{
	local FSQLNAMENEW=${FSQLNAMEBASE}.yearly.sql.gz
	echo "Creating backup file ${FSQLNAMENEW}..."
	cp $FSQLNAME ${FSQLNAMENEW}
	local FFILENAMENEW=${FFILENAMEBASE}.yearly.tar.gz
	echo "Creating backup file ${FFILENAMENEW}..."
	cp $FFILENAME ${FFILENAMENEW}
	NEXTYEARLY=$((NEXTYEARLY+1)) 
}

#First we need to restore the ssh-agent context, if any
eval $(/usr/local/bin/ssh-agent-refresh.sh) > /dev/null

#We create the SQL backup file
echo "Backing up the MySQL database to '$FSQLNAME'..."
ssh noekeon '~daemenj/private/backup_wiki ~daemenj/kiwi.noekeon.org/miki/LocalSettings.php' > "$FSQLNAME" 

#We create the wiki directory backup file
echo "Backing up the files & extensions to '$FFILENAME'..." 
ssh noekeon 'cd ~daemenj/kiwi.noekeon.org; /usr/bin/nice -n 19 tar -cz miki/' > "$FFILENAME"

#Now, depending on current date, we'll create daily, weekly, monthly or yearly backups...
[ $THISWEEK -ge $NEXTWEEKLY ] && makeweekly 
[ $THISMONTH -ge $NEXTMONTHLY ] && makemonthly 
[ $THISYEAR -ge $NEXTYEARLY ] && makeyearly 
makedaily


#Now let's delete the oldest backups

function rmoldest()
{
	local EXT=$1
	local TYPE=$2
	local NBR=$3

	#Count files
	file_count=$(ls $BACKUPDIR/*.${TYPE}${EXT}| wc -l)

	#Delete files while we have more than $NBR
	while [ $file_count -gt $NBR ]
	do
		#Delete alphabetically oldest file (ls sort by name is default)
		rm $(ls $BACKUPDIR/*.${TYPE}${EXT} | head -n 1) 
		#Count files again
		file_count=$(ls $BACKUPDIR/*.${TYPE}${EXT}| wc -l)
	done
}

rmoldest ".sql.gz" "daily" "3"
rmoldest ".tar.gz" "daily" "3"
rmoldest ".sql.gz" "weekly" "3"
rmoldest ".tar.gz" "weekly" "3"
rmoldest ".sql.gz" "monthly" "3"
rmoldest ".tar.gz" "monthly" "3"
rmoldest ".sql.gz" "yearly" "3"
rmoldest ".tar.gz" "yearly" "3"

#Finally we update our resource file
umask 022
echo "NEXTWEEKLY=${NEXTWEEKLY}" >$BACKUPRC
echo "NEXTMONTHLY=${NEXTMONTHLY}" >>$BACKUPRC
echo "NEXTYEARLY=${NEXTYEARLY}" >>$BACKUPRC