Archives janvier 2020

#IT/

Script d'init pour Murmur

Un petit script à mettre dans init.d pour pouvoir lancer Murmur comme un service :
### BEGIN INIT INFO
# Provides:          murmur
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Short description: Start/Stop Murmur, the voice chat server
### END INIT INFO

# chkconfig: 2345 55 25

pidfile=/var/run/murmur/murmur.pid
pid=`/bin/cat /var/run/murmur/murmur.pid`

case "$1" in
    start)
        if [ ! "$pid" ]; then
            /bin/echo "Starting Murmur ... "
            /opt/mumble/murmur.x86
        fi
        exit 0
    ;;
    stop)
        if [ "$pid" ]; then
            /bin/echo "Shutting down Murmur ... "
            /bin/kill -9 $pid
            :> $pidfile 
        fi
        exit 0
    ;;
    status)
        /bin/echo -n "Murmur is "
        if [ "$pid" ]; then
            /bin/echo "running."
            exit 0
        else
            /bin/echo "not running!"
            exit 1
        fi
    ;;
    restart|reload|force-reload)
        $0 stop
        $0 start
    ;;
    *)
        echo "Usage: $0 {start|stop|status|restart|reload|force-reload}" >&2
        exit 1
    ;;
esac
29 janvier 2020 Aucun commentaire

#IT/

Script Pandoc de conversion Markdown vers PDF

Script pour convertir un fichier Markdown en fichier PDF, avec table des matières

#!/bin/bash
if [ $# -lt 2 ];
then
        echo "Syntax: $0  "
        exit -1
fi
markdown="$1"
pdf="$2"

pandoc ${markdown} --variable=author:"Aline" --variable=date:"$(date +%d-%m-%Y)" -N --toc -o ${pdf}

Avec le template Latex par defaut default.latex modifié :

%\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}
\documentclass[12pt]{$documentclass$}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\usepackage{geometry}

%Aline:marges
\geometry{verbose,a4paper,tmargin=2.5cm,bmargin=2.5cm,lmargin=2.2cm,rmargin=2.2cm}
%aline :style pour que le code soit encadre et colore
%
% Define new command 'verbatim" which is used to hold the code of any language.
%
\usepackage{fancyvrb,fancybox,calc}
\usepackage[svgnames]{xcolor}
\usepackage[style=1,leftmargin=0pt,rightmargin=0pt]{mdframed}
%\definecolor{verb_border}{rgb}{0.7,0.7,1}
%\definecolor{verb_bg}{rgb}{.95,.96,.97}
\let\oldverbatim=\verbatim
\let\oldendverbatim=\endverbatim
\renewenvironment{verbatim}[1][test]
{
   \begin{mdframed}[linewidth=2,backgroundcolor=gray!10,linecolor=gray, 
fontcolor=black]\fontsize{10}{10}\sffamily\selectfont
   \begin{oldverbatim}
}
{
  \end{oldverbatim}
  \end{mdframed}
}
%fin aline

% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[utf8]{inputenc}
$if(euro)$
  \usepackage{eurosym}
$endif$
\else % if luatex or xelatex
  \ifxetex
    \usepackage{mathspec}
    \usepackage{xltxtra,xunicode}
  \else
    \usepackage{fontspec}
  \fi
  \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
  \newcommand{\euro}{€}
$if(mainfont)$
    \setmainfont{$mainfont$}
$endif$
$if(sansfont)$
    \setsansfont{$sansfont$}
$endif$
$if(monofont)$
    \setmonofont[Mapping=tex-ansi]{$monofont$}
$endif$
$if(mathfont)$
    \setmathfont(Digits,Latin,Greek){$mathfont$}
$endif$
\fi

% use microtype if available
\IfFileExists{microtype.sty}{\usepackage{microtype}}{}
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
$if(natbib)$
\usepackage{natbib}

\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
$endif$
$if(biblatex)$
\usepackage{biblatex}

$if(biblio-files)$
\bibliography{$biblio-files$}
$endif$
$endif$

$if(listings)$
\usepackage{listings}
$endif$

$if(lhs)$
\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
$endif$

$if(highlighting-macros)$
$highlighting-macros$
$endif$

$if(verbatim-in-note)$
\usepackage{fancyvrb}
$endif$

$if(tables)$
\usepackage{longtable,booktabs}
$endif$

$if(graphics)$
\usepackage{graphicx}

% Redefine \includegraphics so that, unless explicit options are
% given, the image width will not exceed the width of the page.
% Images get their normal width if they fit onto the page, but
% are scaled down if they would overflow the margins.
\makeatletter
\def\ScaleIfNeeded{%
  \ifdim\Gin@nat@width>\linewidth
    \linewidth
  \else
    \Gin@nat@width
  \fi
}

\makeatother
\let\Oldincludegraphics\includegraphics
{%
 \catcode`\@=11\relax%
 \gdef\includegraphics{\@ifnextchar[{\Oldincludegraphics}{\Oldincludegraphics[width=\ScaleIfNeeded]}}%
}%
$endif$

\ifxetex
  \usepackage[setpagesize=false, % page size defined by xetex
              unicode=false, % unicode breaks when used with xetex
              xetex]{hyperref}
\else
  \usepackage[unicode=true]{hyperref}
\fi
\hypersetup{breaklinks=true,
            bookmarks=true,
            pdfauthor={$author-meta$},
            pdftitle={$title-meta$},
            colorlinks=true,
            citecolor=$if(citecolor)$$citecolor$$else$blue$endif$,
            urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
            linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
            pdfborder={0 0 0}}
\urlstyle{same}  % don't use monospace font for urls
$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
$endif$
$if(strikeout)$
\usepackage[normalem]{ulem}
% avoid problems with \sout in headers with hyperref:
\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
$endif$

\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em}  % prevent overfull lines

$if(numbersections)$
\setcounter{secnumdepth}{5}
$else$

\setcounter{secnumdepth}{0}
$endif$

$if(verbatim-in-note)$
\VerbatimFootnotes % allows verbatim text in footnotes
$endif$

$if(lang)$
\ifxetex
  \usepackage{polyglossia}
  \setmainlanguage{$mainlang$}
\else
  \usepackage[$lang$]{babel}

\fi

$endif$

$if(title)$
\title{$title$}
$endif$

$if(subtitle)$
\subtitle{$subtitle$}
$endif$

\author{$for(author)$$author$$sep$ \and $endfor$}
\date{$date$}
$for(header-includes)$
$header-includes$
$endfor$

​\begin{document}
$if(title)$
\maketitle
$endif$

$if(abstract)$
\begin{abstract}
$abstract$
\end{abstract}
$endif$

​$for(include-before)$
$include-before$
$endfor$

​$if(toc)$
{
\hypersetup{linkcolor=black}
\setcounter{tocdepth}{$toc-depth$}
\clearpage
\tableofcontents
\clearpage
}
$endif$

$body$
$if(natbib)$
$if(biblio-files)$
$if(biblio-title)$
$if(book-class)$
\renewcommand\bibname{$biblio-title$}
$else$
\renewcommand\refname{$biblio-title$}
$endif$
$endif$
\bibliography{$biblio-files$}
$endif$
$endif$
$if(biblatex)$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
$endif$

$for(include-after)$
$include-after$
$endfor$

\end{document}
29 janvier 2020 Aucun commentaire

#IT/

Script tueur de zombies

#!/bin/bash

display_usage() {
	echo "This script search for zombie process and kill their parents"
}

display_usage

ZOMBIES=$(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')

if test -n "${ZOMBIES}"
then 
	echo "Zombies found : ${ZOMBIES}"

	echo "Do you want to kill the zombies ?"
		select yn in "Yes" "No"; do
		  case $yn in
			Yes ) for ZOMBIE in ${ZOMBIES};
				  do
					   echo "Killing ${ZOMBIE}"
					   kill -9  ${ZOMBIE}
				  done
				  break;;
			No ) break;;
		  esac
	    done
fi
29 janvier 2020 Aucun commentaire

#IT/

Rendre Logwatch moins verbeux

Logwatch est un outil facile à mettre en place et efficace pour surveiller les logs système. Par contre, par défaut il envoie des emails tous les jours, et est assez verbeux. Pour être moins spammée, j’avais déjà paramétré dans dans /etc/logwatch/conf/logwatch.conf un envoi hebdo, et désactivé la surveillance des logs NTPD :

Service = "-XNTPD"

Range ="between -7 days and -1 days"

Mais je recevais tout de même chaque semaine des mails de plus de 500 lignes, plein d’erreurs http, avec la liste des pages en erreur 404, par exemple. Et également la liste de toutes les IP ayant tenté de se connecter en ssh. Afin de le rendre moins verbeux, on peut déjà demander à n’avoir qu’un résumé des erreurs http. On a alors un total, par exemple:

Requests with error response codes
    400 Bad Request SUMMARY - 8 URLs, total: 28 Time(s)

Pour cela, il faut créer le fichier /etc/logwatch/conf/services/http.conf, avec le contenu :

# Always show only summary for reply codes
# Bad Request
$http_rc_detail_rep-400 = 20
# Unauthorized
$http_rc_detail_rep-401 = 20
# Forbidden
$http_rc_detail_rep-403 = 20
# Not Found
$http_rc_detail_rep-404 = 20
# Method Not Allowed
$http_rc_detail_rep-405 = 20
# Internal Server Error
$http_rc_detail_rep-500 = 20
# Service Unavailable
$http_rc_detail_rep-503 = 20

Pour la section ssh, c’est moins facile, il n’existe pas de variable prédéfinie, il faut passer par des regexp. Je n’ai pas supprimé toutes les lignes contenant des IP afin de ne pas vider complètement la section “Users logging in through sshd”, mais j’ai réduit les sections contenant toutes les erreurs ssh et PAM en ajoutant dans /etc/logwatch/conf/ignore.conf :

###### REGULAR EXPRESSIONS IN THIS FILE WILL BE TRIMMED FROM REPORT OUTPUT #####
# remove the lines like "5.39.218.148: 3 times" from the sshd section
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\s\d+\stime
# remove the lines like "unknown (p1.plasa.com): 136 Time(s)" 
# from the ssh authentication failures
\(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\):\s\d+\sTime
# remove the PAM lines
PAM
reverse mapping

Je passe ainsi pour le logwatch de la même semaine de 465 lignes à 253, ce qui augmente beaucoup la lisibilité.

29 janvier 2020 Aucun commentaire

#DIY/

Les produits à base de savon noir

Tout d'abord, comme il s'agit de mon premier billet de l'année, je vous souhaite à tous une très bonne année 2020 ! Pleine de logiciels libres et de produits fait maison, et sans trop de GAFAM ! :D

On commence l'année en beauté avec une petite recette de produit ménager maison, ça faisait longtemps !

 

Lire la suite

16 janvier 2020 1 commentaire