Logo carnetderootxzz@carnetderoot.net"La simplification est la sophistication suprême" - Léonard De Vinci
jeudi 15 octobre 2015

:: Aide-mémoire SQLite3 ::

Commandes

Ouverture / création de base

$ sqlite3 db.sqlite

Si le fichier db.sqlite existe la base est ouverte, sinon elle est créée.

Opérations basiques

Afficher l'aide

sqlite> .help

Afficher les noms et fichiers des bases attachées

sqlite> .databases
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             /path/to/db.sqlite

Lister les tables

sqlite> .tables
perimeter

Afficher la structure de la table

sqlite> .schema perimeter
CREATE TABLE perimeter (
  theme TEXT,
  nom_envoyeur TEXT,
  regroupement TEXT,
  mail TEXT,
  type TEXT,
  nom TEXT,
  action TEXT,
  cas_failed TEXT,
  action2 TEXT,
  jour TEXT,
  debut TEXT,
  fin TEXT,
  heure_check TEXT,
  tout_sauf_check TEXT,
  check_ok TEXT
);

Afficher la structure de la base et les données

sqlite> .dump

Affichage des colonnes dans les résultats

  • Activer

    sqlite> .explain on
  • Désactiver

    sqlite> .explain off

Affichage des variables de configuration

sqlite> .show
     echo: off
  explain: off
  headers: off
     mode: list
nullvalue: ""
   output: stdout
separator: "|"
    stats: off
    width:

Quitter SQLite

sqlite> .quit

Import de données

Import d'un fichier CSV

sqlite> .separator ','
sqlite> .import data.csv table_sqlite

samedi 26 septembre 2015

:: Hypertext Markup Language ::

Structure de page HTML5

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Titre</title>
    </head>

    <body>

    <header>
        <nav></nav>
    </header>

    <aside></aside>

    <section>
        <article></article>
        <article></article>
        <article></article>
        <nav></nav>
    </section>

    <footer></footer>

    </body>
</html>

Couleurs HTML

Gris

Nuance Code
Clair 7e7e7e
. 626262
. 474747
. 282828
Foncé 020202

vendredi 25 septembre 2015

:: RepRap Prusa i3 bed auto-level ::

Firmware Marlin

Téléchargement dernière version

$ git clone https://github.com/MarlinFirmware/Marlin.git

Configuration du firmware

Fichier Configuration.h

  • Inversion du signal de fin de course pour l'axe Z

    const bool Z_MIN_ENDSTOP_INVERTING = true;
  • Activation de l'option AUTO_BED_LEVELING

    #define ENABLE_AUTO_BED_LEVELING
    #define LEFT_PROBE_BED_POSITION 0
    #define RIGHT_PROBE_BED_POSITION 120
    #define BACK_PROBE_BED_POSITION 150
    #define FRONT_PROBE_BED_POSITION 50
    #define AUTO_BED_LEVELING_GRID_POINTS 3
  • La tête de l'extrudeur étant directement utilisée pour sonder le niveau du lit, la compensation pour les axes X et Y est nulle. La compensation pour l'axe Z sera mesurée directement, on la définit à 0 dans un premier temps.

    #define X_PROBE_OFFSET_FROM_EXTRUDER 0
    #define Y_PROBE_OFFSET_FROM_EXTRUDER 0
    #define Z_PROBE_OFFSET_FROM_EXTRUDER 0
  • Compiler et téléverser le nouveau firmware sur le RAMPS

  • Exécuter le code ci-dessous pour préparer la mesure de la compensation de l'axe Z :

    G28 X          ; home X
    G28 Y          ; home Y
    G28 Z          ; home Z
    G1 Z10         ; fix Z to avoid glass-break
    G29            ; auto bed level
    G1 Z10         ; fix Z to avoid glass-break
    G1 X100 Y150   ; position extruder in center of the bed (300x200)
  • Mesurer la compensation pour l'axe Z
    Placer une feuille de papier sur le lit et descendre l'extrudeur petit à petit jusqu'à ce que le papier soit pincé entre l'extrudeur et le lit, le papier doit encore pouvoir bouger tout en étant légèrement "accroché". A ce moment, lire la mesure Z sur l'écran LCD, la valeur lue correspond à la compensation pour l'axe Z.
    Mettre à jour la variable Z_PROBE_OFFSET_FROM_EXTRUDER avec la valeur trouvée et compiler/téléverser de nouveau le firmware sur le RAMPS.

  • Custom G-code (slic3r)

    G28 X           ; home all axes
    G28 Y
    G28 Z
    G29             ; z-probe
    G1 Z3
    G1 X0 Y0 F3000  ; fix feedrate for next moves
    G1 Z0
  • Example "Ptr G-code -> Prefix" in KISSlicer

    M104 S<TEMP>
    G28 X
    G28 Y
    G28 Z
    G29; Detailed Z-Probe
    G1 Z3
    G1 X100 Y200 F3000
    G1 Z0
    M109 S<TEMP>

dimanche 30 août 2015

:: GRUB - GRand Unified Bootloader ::

Liens intéressants

Générer le fichier de configuration principal

Note: grub.cfg doit être regénéré à chaque modification de /etc/default/grub ou d'un fichier sous /etc/grub.d/.

# grub-mkconfig -o /boot/grub/grub.cfg

:: Dancer - Exemples ::

Exemple d'ouverture de session

post '/login' => {
    if ( params->{user} eq 'foo' && params->{passwd} eq 'bar' ) {
        session user => params->{user};
        redirect params->{path} || '/';
    } else {
        redirect '/login?failed=1';
    }
};

lundi 24 août 2015

:: SSH brute force banning script ::

Références

Installation et configuration

Note : Ce script est une version modifiée de celui fourni par robzr sur le forum OpenWrt.

Créer le fichier /usr/sbin/dropBrute.sh et copier le contenu suivant :

#!/bin/sh
# ------------------------------------------------------------------------------
# dropBrute.sh : minimalist OpenWRT/dropbear ssh brute force attack banning script
# ------------------------------------------------------------------------------
# initial release by robzr
# ------------------------------------------------------------------------------
# Installation steps:
# 1) Edit the variables in the header of this script to customise for your environment.
# 2) Insert a reference for this rule in your firewall script before you accept ssh.
#    This will block the brute force attack until the IP is banned by the script.
#      iptables -N logndrop
#      iptables -N dropBrute
#      iptables -A logndrop -j LOG
#      iptables -A logndrop -j DROP
#      iptables -A input_rule -p tcp --dport 22 -i eth1 -m state --state NEW -m recent --set
#      iptables -A input_rule -p tcp --dport 22 -i eth1 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j logndrop
#      iptables -A input_rule -p tcp --dport 22 -j dropBrute
# 3) Run the script periodically out of cron:
#      echo '*/10 * * * * /usr/sbin/dropBrute.sh 2>&1 >> /tmp/dropBrute.log' >> /etc/crontabs/root
# 4) If cron is not enabled, you'll also need to run the following:
#      /etc/init.d/cron enable && /etc/init.d/cron start
# ------------------------------------------------------------------------------
# To whitelist hosts or networks, simply add a manual entry to the lease
# file with a leasetime of -1.  This can be done with the following syntax:
#    echo -1 192.168.1.0/24 >> /tmp/dropBrute.leases
# A static, or non-expiring blacklist of a host or network can also be
# added, just use a lease time of 0.  This can be done with the following syntax:
#    echo 0 1.2.3.0/24 >> /tmp/dropBrute.leases
# ------------------------------------------------------------------------------

# =========================== CUSTOMIZABLE VARIABLES =========================== 
# Debug mode (let empty to disable, debug = '')
debug='1'
# How many bad attempts before banning.
allowedAttempts=3
# How long IPs are banned for (in seconds)
secondsToBan=86400
# the "lease" file - defaults to /tmp which does not persist across reboots
# Note: here, USB key is mounted on /tmp/cache. This way, leases file persists across reboots
leaseFile=/tmp/cache/dropBrute.leases
# Iptables chain that drop commands will go into.
iptChain=dropBrute
# IP Tables drop & whitelist rules
iptDropRule='-j DROP'
iptWhiteRule='-j RETURN'
# Default leasefile entries
[ -f $leaseFile ] || cat <<__EOF__>>$leaseFile
-1 192.168.1.0/24
__EOF__
# Path to iptables command
ipt='/usr/sbin/iptables'
# ======================= END OF CUSTOMIZABLE VARIABLES ========================

# ------------------------------------------------------------------------------
[ `date +'%s'` -lt 1320000000 ] && echo System date not set, aborting. && exit -1
$ipt -N $iptChain >&/dev/null
now=`date +'%s'`
nowPlus=$((now + secondsToBan))
echo ------ Starting dropBrute on `date` \($now\)

# find new badIPs (method 1)
[ "$debug" ] && echo Looking for bad IPs \(method 1\)
for badIP in `logread | fgrep dropbear | egrep -i 'login attempt for nonexistent user'\|'bad password attempt for'| sed 's/^.*from //' | sed 's/:.*$//' | sort -u` ; do
  [ "$debug" ] && echo  - Working on $badIP
  n=`logread | fgrep dropbear | egrep -i 'login attempt for nonexistent user'\|'bad password attempt for'|sed 's/^.*from //'|sed 's/:.*$//' | fgrep $badIP | wc -l`
  if [ $n -ge $allowedAttempts ] ; then
    [ "$debug" ] && echo ... KO \($n occurences\)
    # if there is not a lease, add it
    if [ $(egrep -c $badIP$ $leaseFile) -eq 0 ] ; then
      echo $nowPlus $badIP >> $leaseFile
      [ "$debug" ] && echo ... Adding new lease for $badIP
    else
      [ "$debug" ] && echo ... Lease for $badIP already exists
    fi
  else
    [ "$debug" ] && echo ... Ok \($n occurences\)
  fi
done

# find new badIPs (Method 2)
[ "$debug" ] && echo Looking for bad IPs \(method 2\)
for fuzzyIP in `logread | fgrep dropbear | egrep -i 'Child connection from' | sed 's/^.*from //' | sed 's/:.*$//' | sort -u` ; do
  n=0
  [ "$debug" ] && echo - Working on $fuzzyIP
  for fuzzyPs in `logread | fgrep dropbear | egrep -i 'Child connection from' | fgrep  $fuzzyIP | sed 's/^.*dropbear\[//' | sed 's/\]:.*$//' | sort -u` ; do
    nbPs=`logread | egrep -i 'Exit before auth' | fgrep $fuzzyPs | wc -l`
    n=$((n+nbPs))
  done
  if [ $n -ge $allowedAttempts ] ; then
    [ "$debug" ] && echo ... KO \($n occurences\)
    # if there is not a lease, add it
    if [ $(egrep -c $fuzzyIP $leaseFile) -eq 0 ] ; then
      echo $nowPlus $fuzzyIP >> $leaseFile
      [ "$debug" ] && echo ... Adding new lease for $fuzzyIP
    else
      [ "$debug" ] && echo ... Lease for $fuzzyIP already exists
    fi
  else
    [ "$debug" ] && echo ... Ok \($n occurences\)
  fi
done

# now parse the leaseFile
[ "$debug" ] && echo Parsing the leasefile
cat $leaseFile | while read lease ; do
  leaseTime=`echo $lease|cut -f1 -d\ `
  leaseIP=`echo $lease|cut -f2 -d\ `
  # when used with the iptables example on the top a return rule is not needed
  if [ $leaseTime -lt 0 ] ; then
    if [ `$ipt -S $leaseChain|egrep \ $leaseIP/32\ \|\ $leaseIP\ |fgrep -- "$iptWhiteRule"| wc -l` -lt 1 ] ; then
      #[ "$debug" ] && echo Adding new whitelist rule for $leaseIP
      #$ipt -I $iptChain -s $leaseIP $iptWhiteRule
      true
    fi
  elif [ $leaseTime -ge 1 -a $now -gt $leaseTime ] ; then
    [ "$debug" ] && echo  - Expiring lease for $leaseIP
    $ipt -D $iptChain -s $leaseIP $iptDropRule
    $ipt -D $iptChain -s $leaseIP -j LOG --log-prefix "dropBrute "
    sed -i /$leaseIP/d $leaseFile
  elif [ $leaseTime -ge 0 -a `$ipt -S $leaseChain|egrep \ $leaseIP/32\ \|\ $leaseIP\ |wc -l` -lt 1 ] ; then
    [ "$debug" ] && echo  - Adding new rule for $leaseIP
    $ipt -I $iptChain -s $leaseIP $iptDropRule
    $ipt -I $iptChain -s $leaseIP -j LOG --log-prefix "dropBrute "
  fi
done < $leaseFile

echo ------ Ending dropBrute on `date` \(`date +'%s'`\)

jeudi 23 juillet 2015

:: Gestion des volumes logiques sous Debian ::

Installation

# apt-get update && apt-get install lvm2
# dpkg-query -l lvm2
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom                                        Version                    Architecture               Description
+++-==========================================-==========================-==========================-=========================================================================================
ii  lvm2                                       2.02.95-8                  amd64                      Linux Logical Volume Manager

Configuration

Volume physique

# pvcreate /dev/md0
# pvdisplay
# pvs

Groupe de volume

# vgcreate <nom_du_volume> /dev/md0
# vgdisplay
# vgs

Volume logique

# lvcreate
# lvdisplay
# lvs

Préparation des volumes logiques

# mkfs.ext4
# mkdir
# mount

jeudi 16 juillet 2015

:: OpenSCAD ::

Commandes de dessin

Formes 3D simples

  • cube() pour un parallélépipède,
  • cylinder() pour un cylindre ou un cône, tronqué ou non,
  • sphere() pour une sphère,
  • polyhedron() pour un polyèdre.

Toutes ces commandes comportent, dans les parenthèses qui suivent leur nom, un ou plusieurs paramètres. Ils sont particuliers à chaque commande et indiquent généralement des dimensions ou des distances, toujours en millimètres, parfois des instructions de rendu.

Formes 2D

  • square() pour un carré ou rectangle,
  • circle() pour un cercle,
  • polygon() pour un polygone.

Elles n’ont pas d’épaisseur, celle-ci leur est donnée par les commandes de transformation linear\_extrude() et rotate\_extrude().

Commandes de transformation

Les formes 3D et 2D peuvent être combinées et manipulées pour former des objets complexes, par des commandes de transformation dont voici les principales :

  • difference() pour extraire une forme d’une autre,
  • union() pour unir plusieurs éléments,
  • translate() pour déplacer un élément,
  • rotate() pour pivoter un élément,
  • intersection() pour ne conserver que la partie commune de deux formes se chevauchant,
  • resize() pour modifier la taille d’un élément,
  • color() pour colorer l’affichage d’un élément,
  • hull() pour réaliser une fusion de formes,
  • minkowski() pour créer un enveloppement d’une forme par une autre,
  • import() pour utiliser un fichier STL ou DXF,
  • linear_extrude() et rotate_extrude() pour donner une élévation à une forme 2D.

Références


mercredi 10 juin 2015

:: Gestion des dates (localtime) ::

Astuces

Calcul de dates

Date du jour

my ($sec,$min,$heure,$jmois,$mois,$annee,$jsem,$jcal,$ete) = localtime(time)

Date de la veille

my ($sec,$min,$heure,$jmois,$mois,$annee,$jsem,$jcal,$ete) = localtime(time-3600*24);

mercredi 03 juin 2015

:: Capteur de proximité ::

Activer / désactiver le capteur

#
# Disable/enable proximity sensor
#
# To enable use: proximity_disable.sh 0
#
prox_enable_path=`find /sys/devices/ -name 'prox_enable'`

if [ -z "$1" ]; then
     echo "0" > $prox_enable_path
else
     echo "1" > $prox_enable_path
fi

Sauvegarder et "chmoder" le script dans /usr/sbin/ ou /usr/bin/.

Note : ouvrir une session root (devel-su) pour utiliser le script.

Références


dimanche 03 mai 2015

:: CPAN ::

Utilisation

Mode interactif (shell cpan)

$ perl -MCPAN -e shell

Mode commande

$ cpan

Script Perl

CPAN::Shell->install("Module::Name") ;

Commandes basiques

Shell CPAN

cpan> install Module::Name          # Installe le module "Module::Name"
cpan> r [Module/RegExp]             # Liste les mises à jours de modules disponibles
cpan> upgrade [Module/RegExp]       # Installe les mises à jours de modules disponibles

Références


vendredi 03 avril 2015
vendredi 23 janvier 2015

:: Installation d'Ubuntu 14.04 sur un Asus UX303LN ::

Infos

Asus UX303LN-DQ162H

  • Processeur : Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz
  • Mémoire Totale : DDR3 8Go (8063432ko)
  • Disque SSD : SanDisk SD6SB1M256G1002 (256Go)
  • VGA compatible controller : Intel Corporation Haswell-ULT Integrated Graphics Controller
  • 3D controller : NVIDIA Corporation GM108M [GeForce 840M]

Installation Ubuntu 14.04 LTS

Création de la clé usb

$ sudo dd if=ubuntu.iso of=/dev/sdx bs=512k

Attention à ne pas se tromper de disque !!

Démarrer le portable et entrer dans le menu de configuration (touche F2)

Paramétrer le démarrage sur la clé USB, normalement cette dernière est détecté automatiquement comme partition de boot EFI et est proposé dans la liste des options de boot. Si ce n'est pas le cas, créer une nouvelle option de boot et indiquer le chemin vers le fichier bootx64.efi

A noter qu'Ubuntu supporte le boot EFI, on peut donc conserver ce mode et profiter de ses avantages en terme de sécurité.

Booter sur la clé et installer Ubuntu.

Installation des pilotes NVidia

$ sudo add-apt-repository ppa:xorg-edgers/ppa 
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install nvidia-346 nvidia-prime

Installation de Wicd en remplacement de Network-Manager

Dans mon cas, Network-Manager ne se connecte pas au point d'accès présent au boulot (un WPA2 Personal un peu spécial)... A l'opposé Wicd fonctionne trés bien, je l'ai donc installé en remplacement de Network-Manager.

Installation de Wicd

En premier lieu, on réinstalle network-manager. Ceci pour l'avoir dans le cache apt si jamais Wicd venait à ne pas fonctionner.

$ sudo apt-get install -d --reinstall network-manager network-manager-gnome

Ensuite, on installe Wicd et on supprime proprement Network-Manager :

$ sudo apt-get install wicd-gtk
$ sudo apt-get remove --purge network-manager network-manager-gnome

Maintenant, vous pouvez paramétrer votre connexion WiFi via l'application "Wicd Network Manager".

Activation de l'icône Wicd dans la barre des tâches

Depuis la version Ubuntu 13.04, le paramètre 'whitelist' de la zone de notification Unity n'existe plus... Pour pallier à ce manque, voici la marche à suivre :

$ sudo add-apt-repository ppa:gurqn/systray-trusty
$ sudo apt-get update
$ sudo apt-get upgrade

Note : Pour désactiver ce ppa, il est indispensable d'utiliser l'utilitaire ppa-purge

$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:gurqn/systray-trusty

Installation de themes Unity

Themes Ambiance & Radiance

$ sudo add-apt-repository ppa:ravefinity-project/ppa
$ sudo apt-get update
$ sudo apt-get install ambiance-flat-colors
$ sudo apt-get install radiance-flat-colors

[à suivre...]