Blog personnel d'Alex Sbille sur les technologies, et autres de mes centres d’intérêts.

Aller au contenu | Aller au menu | Aller à la recherche

lundi 24 mars 2014

Loggin ip adress of visitors with Varnish3 and Apache2 as a backend

It is natural to find varnish public ip in apache logs but not very secure in my context, so I'll need to configure Varnish 3 using req.http.X-Forwarded-For and apache2 with mod_rpaf

With a debian like:

On the backend server

apt-get install libapache2-mod-rpaf
nano /etc/apache2/mods-enabled/rpaf.conf
<IfModule rpaf_module>
    RPAFenable On

    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On

    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
    RPAFproxy_ips 5.39.38.60 127.0.0.1 ::1

    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
    RPAFheader X-Forwarded-For

</IfModule>
service apache2 reload

On the reverse proxy / varnish server:

Insert after the start of sub vcl_recv :

if (req.restarts == 0) {
  if (req.http.X-Forwarded-For) {
    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
  } else {
    set req.http.X-Forwarded-For = client.ip;
  }
}

Then reload the configuration and verify a2 logs.

Partage

Log de l'adresse ip du visiteur dans apache2 derrière un reverse proxy varnish3

Varnish, comme tout reverse proxy laissera naturellement son adresse ip dans les logs du backend, ici apache. Dans mon cas, dans un contexte de sécurité, il est nécessaire que le reverse proxy utilise req.http.X-Forwarded-For pour annoncer au backend l'adresse ip du client.

Avec une debian like:

Sur le serveur de backend

apt-get install libapache2-mod-rpaf
nano /etc/apache2/mods-enabled/rpaf.conf
<IfModule rpaf_module>
    RPAFenable On

    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On

    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
    RPAFproxy_ips 5.39.38.60 127.0.0.1 ::1

    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
    RPAFheader X-Forwarded-For

</IfModule>
service apache2 reload

Sur le reverse proxy / varnish:

Insérer après le début de sub vcl_recv :

if (req.restarts == 0) {
  if (req.http.X-Forwarded-For) {
    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
  } else {
    set req.http.X-Forwarded-For = client.ip;
  }
}

Suivi d'un reload de la configuration.

Partage

vendredi 28 février 2014

Supprimer des doublons avec linux et fdupes

On installe le programme et lance un état des lieux avec:

apt-get install && fdupes -r /target/folder

Voir l'espace occupé avant le nettoyage:

du -sh /target/folder

Supprimer les doublons! (d argument) Seulement conserver le premier fichier trouvé et automatiquement valider la suppression des doubles (N argument).

fdupes -r -dN /target/folder

{{ + /media/neuro/Lexar/2010-11-05/2012-01-17/IMG_1523.JPG

  - /media/neuro/Lexar/2010-11-05/2012-07-16/IMG_1523.JPG
  - /media/neuro/Lexar/2012-01-29/IMG_1523-1.JPG
  - /media/neuro/Lexar/2012-01-29/IMG_1523.JPG
  - /media/neuro/Lexar/2012-09-30/IMG_1523.JPG}}

Voir l'espace occupé pour voir le gain gagné:

du -sh /target/folder

Partage

Find and clean multiples sames files with linux

First, install and test fdupes with:

apt-get install && fdupes -r /target/folder

View size before:

du -sh /target/folder

Clean with delete! (d argument) We keep only one file and no ask before delete (N argument).

fdupes -r -dN /target/folder

{{

  + /media/neuro/Lexar/2010-11-05/2012-01-17/IMG_1523.JPG
  - /media/neuro/Lexar/2010-11-05/2012-07-16/IMG_1523.JPG
  - /media/neuro/Lexar/2012-01-29/IMG_1523-1.JPG
  - /media/neuro/Lexar/2012-01-29/IMG_1523.JPG
  - /media/neuro/Lexar/2012-09-30/IMG_1523.JPG}}

View size after:

du -sh /target/folder

Partage

mardi 25 février 2014

Installer steam sur debian 8 testing (Jessy)

Après avoir mis à jour mon sysème en testing, j'ai été ravis de découvrir que steam y est désormais disponible comme paquet non-free. Les années à devoir essuyer des reboots pour booter sur du ntfs sont pour moi révolues et win ne fait désormais plus partie de ma vie depuis hiers, après une bonne session de parted. On peut voir sur les stats que pour un paquet en testing, le popularity-contest du paquet révèle une popularité assez attendue
Ajout des sources non libres et dans mon cas un peu de pinning pour permettre de résoudre des dépendances que vous aurez vous aussi peut-être de non satisfaites.
nano /etc/apt/sources.list
deb http://http.debian.net/debian/ testing main contrib non-free
deb-src http://http.debian.net/debian/ testing main contrib non-free
deb http://http.debian.net/debian/ unstable main contrib non-free
deb-src http://http.debian.net/debian/ unstable main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free
nano  /etc/apt/preferences
Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900
Package: *
Pin: release o=Debian,a=unstable
Pin-Priority: 300
Package: *
Pin: release o=Debian
Pin-Priority: -1
dpkg --add-architecture i386
apt-get install multiarch-support
apt-get update && apt-get upgrade
A partir de là on peut désormais faire le fameux:
apt-get install steam
Avec ma carte graphique 760 gtx de chez Nvidia, il faut installer les drivers propriétaires:
#For video drivers with nvidia
apt-get install nvidia-kernel-dkms nvidia-settings nvidia-driver linux-headers-$(uname -r)
Enfin, on peux trouver dans le menu des applications et sous menu jeux l'application steam, le premier lancement provoque un mise à jour assez lourde.

Partage

Install steam in debian testing jessy (8)

My rig was recently upgraded for running a testing Debian Jessy (8) and I was happily surprised to find that steam is now available as a non-free package.
After years of damn horrible dualboot, I have now destroyed my ntfs partition because steam was working very good in my case in stable debian squeeze with non oficial package.
After ubuntu released it, the Debian Games Team mainteners had make a package.
Statistics of steam installations in debian
Adding contrib and non free sources, in my case, I had also to add some pinning rules for get unstable repo.
nano /etc/apt/sources.list
deb http://http.debian.net/debian/ testing main contrib non-free
deb-src http://http.debian.net/debian/ testing main contrib non-free
deb http://http.debian.net/debian/ unstable main contrib non-free
deb-src http://http.debian.net/debian/ unstable main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free
nano  /etc/apt/preferences
Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900
Package: *
Pin: release o=Debian,a=unstable
Pin-Priority: 300
Package: *
Pin: release o=Debian
Pin-Priority: -1
dpkg --add-architecture i386
apt-get install multiarch-support
apt-get update && apt-get upgrade
At this time, we can install steam package with:
apt-get install steam
With my Nvidia 760 gtx, I should install proprietary drivers:
#For video drivers with nvidia
apt-get install nvidia-kernel-dkms nvidia-settings nvidia-driver linux-headers-$(uname -r)
You can now find in the gnome menu in games the application steam, at first lunch, any update is required.

Partage

lundi 24 février 2014

Move a system from single hdd to software raid

Tested into a Debian 8 distro with raid5 and raid1.

Migrate any existing system ext3 (multiple or single partitions) with a stand alone hdd on a Software replicated raid.

Install mdadm before the system is replicated on the new array or chrooting will be neccesary for booting the future system on the raid.

apt-get install mdadm

#with ubuntu like

sudo apt-get remove dmraid

Retrive disks infos

fdisk -l

Create partitions on the new drives before building the array.

Grub partition need at lest of 1MB but it can be more in the future.

parted /dev/sda
unit kb
p free
#if needed with fresh drives : mklabel gpt
mkpart primary ext3 0 10M
mkpart primary ext3 10M 100%
#(very important)
set 1 bios_grub on
p free
q
partprobe /dev/sda
partprobe /dev/sdb

And do th same for each drives of the future array, grub will be installed on each disks.

Other way for flag grub_on

parted /dev/sda1 set 1 bios_grub on
parted /dev/sdb1 set 1 bios_grub on

Create the filesystem for raid on all disks

mkfs -t ext3 /dev/sda2
mkfs -t ext3 /dev/sdb2

Create the array (here raid1)

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2

View live progression very long for 2TB drives

watch -n 1 cat /proc/mdstat

Create filesystem on the raid.

-m 2 for 2% of inodes

-m 2 pour 2% d'inodes

mkfs.ext3 /dev/md0 -m 2

Put a new line in the fstab

blkid
nano /etc/fstab

UUID=87b54395-1737-435b-b2a8-b4120ee4060d /             ext3 relatime 0 0

Update mdadm.

cat /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
cat /etc/mdadm/mdadm.conf

Mount it.

mkdir /media/raid1/ && mount /dev/md0 /media/raid1/ &&  df -h && cd  /media/raid1/

At this time, synchronize the actual system on the raid.

rsync -aAXv --stats --progress /* /media/raid1/ --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/net*,/lost+found}

Chroot in the future live system.

cd /media/raid1/
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
chroot /media/raid1 /bin/bash

Update the fstab with goods uuid.

blkid
cp /etc/fstab /etc/fstab.bkp
nano /etc/fstab

Install grub on all drives of the array.

grub-install /dev/sda
grub-install /dev/sdb
update-grub
#or
update-grub2

Update the initial ram disk for automount the array during boot

update-initramfs -u

Exit from chroot and reboot, in my case, I unplug the old harddrive

All should run like a charm included grub.

fdisk -l

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdb » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Disque /dev/sdb : 2000.4 Go, 2000398934016 octets

255 têtes, 63 secteurs/piste, 243201 cylindres, total 3907029168 secteurs

Unités = secteurs de 1 * 512 = 512 octets

Taille de secteur (logique / physique) : 512 octets / 4096 octets

taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets

Identifiant de disque : 0x00000000

Périphérique Amorce  Début        Fin      Blocs     Id  Système

/dev/sdb1               1  3907029167  1953514583+  ee  GPT

La partition 1 ne commence pas sur une frontière de cylindre physique.

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sda » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Disque /dev/sda : 2000.4 Go, 2000398934016 octets

255 têtes, 63 secteurs/piste, 243201 cylindres, total 3907029168 secteurs

Unités = secteurs de 1 * 512 = 512 octets

Taille de secteur (logique / physique) : 512 octets / 512 octets

taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Identifiant de disque : 0x00000000

Périphérique Amorce  Début        Fin      Blocs     Id  Système

/dev/sda1               1  3907029167  1953514583+  ee  GPT

Disque /dev/md0 : 2000.3 Go, 2000262529024 octets

2 têtes, 4 secteurs/piste, 488345344 cylindres, total 3906762752 secteurs

Unités = secteurs de 1 * 512 = 512 octets

Taille de secteur (logique / physique) : 512 octets / 4096 octets

taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets

Identifiant de disque : 0x00000000

Le disque /dev/md0 ne contient pas une table de partitions valable

Links helped me:

http://velenux.wordpress.com/2012/07/12/grub-failing-to-install-on-debianubuntu-with-gpt-partitions/

http://forums.linuxmint.com/viewtopic.php?f=90&t=95928

http://forums.debian.net/viewtopic.php?f=5&t=92810

http://unix.stackexchange.com/questions/28443/does-grub2-support-putting-boot-on-a-raid5-partition

http://askubuntu.com/questions/252795/convert-running-system-to-raid-5

https://wiki.archlinux.org/index.php/Full_System_Backup_with_rsync

https://wiki.archlinux.org/index.php/Change_Root

https://wiki.archlinux.org/index.php/Convert_a_single_drive_system_to_RAID

Partage

dimanche 23 février 2014

Migrer d'un système mono-disque vers raid logiciel

Testé avec une distro Debian 8 en raid5 puis raid1.

Migrer d'un système en ext3 (avec une ou plusieurs partitions) avec un seul disque vers un raid logiciel.

Installer mdadm avant la synchronisation pour que lorsque l'on bootera plus tard dans le système répliqué, autrement, il faudrait chrooter pour l'installer pour pouvoir booter avec le système sur raid logiciel.

apt-get install mdadm

#with ubuntu like

sudo apt-get remove dmraid

Etat des lieux des disques

fdisk -l

Créer les partitions sur les nouveaux disques avant de crée le raid logiciel.

Une partition de 1MB est normalement suffisante pour grub mais dans le futur cela pourrait augmenter.

parted /dev/sda
unit kb
p free
#si besoin avec des disques vierges : mklabel gpt
mkpart primary ext3 0 10M
mkpart primary ext3 10M 100%
#(vital pour grub)
set 1 bios_grub on
p free
q
partprobe /dev/sda
partprobe /dev/sdb

Et faire de même pour tous les disques du futur raid car nous installerons grub sur chacun des disques.

Autre méthode pour le flag grub_on

parted /dev/sda1 set 1 bios_grub on
parted /dev/sdb1 set 1 bios_grub on

Créer système de fichier sur lequel sera hébergé le raid sur tous les disques.

mkfs -t ext3 /dev/sda2
mkfs -t ext3 /dev/sdb2

Créer le raid (ici raid1).

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2

Voir la progression en temps réél, c'est long pour des disques 2TB.

watch -n 1 cat /proc/mdstat

Créer le système de fichiers sur le raid.

-m 2 for 2% of inodes

-m 2 pour 2% d'inodes

mkfs.ext3 /dev/md0 -m 2

Mettre le raid dans le fstab

blkid
nano /etc/fstab

UUID=87b54395-1737-435b-b2a8-b4120ee4060d /             ext3 relatime 0 0

Mettre à jour mdadm.

cat /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
cat /etc/mdadm/mdadm.conf

Monter le.

mkdir /media/raid1/ && mount /dev/md0 /media/raid1/ &&  df -h && cd  /media/raid1/

Une fois le raid vierge en place, synchroniser le système actuel vers le raid.

rsync -aAXv --stats --progress /* /media/raid1/ --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/net*,/lost+found}

Chroot dans le future système live.

cd /media/raid1/
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
chroot /media/raid1 /bin/bash

Mettre à jour le fstab avec les bons uuid.

blkid
cp /etc/fstab /etc/fstab.bkp
nano /etc/fstab

Install grub on all drives of the array.

Installer grub sur tous les disques du raid.

grub-install /dev/sda
grub-install /dev/sdb
update-grub
#or
update-grub2

Mettre à jour le ram disk pour que le raid soit automatiquement monté durant le boot

update-initramfs -u

Sortir du chroot et redemarrer, dans mon cas, je débranche le vieux disque.

Tout devrait tourner sur le nouveau raid sans accroc avec grub opérationel.

fdisk -l

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdb » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Disque /dev/sdb : 2000.4 Go, 2000398934016 octets

255 têtes, 63 secteurs/piste, 243201 cylindres, total 3907029168 secteurs

Unités = secteurs de 1 * 512 = 512 octets

Taille de secteur (logique / physique) : 512 octets / 4096 octets

taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets

Identifiant de disque : 0x00000000

Périphérique Amorce  Début        Fin      Blocs     Id  Système

/dev/sdb1               1  3907029167  1953514583+  ee  GPT

La partition 1 ne commence pas sur une frontière de cylindre physique.

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sda » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Disque /dev/sda : 2000.4 Go, 2000398934016 octets

255 têtes, 63 secteurs/piste, 243201 cylindres, total 3907029168 secteurs

Unités = secteurs de 1 * 512 = 512 octets

Taille de secteur (logique / physique) : 512 octets / 512 octets

taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Identifiant de disque : 0x00000000

Périphérique Amorce  Début        Fin      Blocs     Id  Système

/dev/sda1               1  3907029167  1953514583+  ee  GPT

Disque /dev/md0 : 2000.3 Go, 2000262529024 octets

2 têtes, 4 secteurs/piste, 488345344 cylindres, total 3906762752 secteurs

Unités = secteurs de 1 * 512 = 512 octets

Taille de secteur (logique / physique) : 512 octets / 4096 octets

taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets

Identifiant de disque : 0x00000000

Le disque /dev/md0 ne contient pas une table de partitions valable

Les liens qui m'ont aidés:

http://velenux.wordpress.com/2012/07/12/grub-failing-to-install-on-debianubuntu-with-gpt-partitions/

http://forums.linuxmint.com/viewtopic.php?f=90&t=95928

http://forums.debian.net/viewtopic.php?f=5&t=92810

http://unix.stackexchange.com/questions/28443/does-grub2-support-putting-boot-on-a-raid5-partition

http://askubuntu.com/questions/252795/convert-running-system-to-raid-5

https://wiki.archlinux.org/index.php/Full_System_Backup_with_rsync

https://wiki.archlinux.org/index.php/Change_Root

https://wiki.archlinux.org/index.php/Convert_a_single_drive_system_to_RAID

Partage