Archives janvier 2020
#
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
#
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}
#
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
#
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é.
#
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 !