TiPS : tips and tricks ...

Linux Kernel cross compilation recipe on amd64 for i386 on Debian

  • Article Currently 2.31/5
  • 1
  • 2
  • 3
  • 4
  • 5

 Rating : 2.3/5 (32 votes cast)

Following my Linux Kernel compilation recipe on Debian here is another tip on how to cross compil a kernel on an amd64 machine for an i386 one.
 ##install necessary packages 
iman@debian:~$ sudo apt-get install libncurses5 libncurses5-dev libssl-dev kernel-package fakeroot build-essential util-linux
##get kernel 3.19.3
iman@debian:~$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.3.tar.xz

iman@debian:~$ tar -xvf linux-3.19.3.tar.xz
iman@debian:~$ cd linux-3.19.3

##config-3.16.0-4-686-pae is Debian config file from its current kernel (available in the distribution linux-image .deb)
iman@debian:~/linux-3.19.3$ cp ~/config-3.16.0-4-686-pae .config && yes "" | linux32 make oldconfig

##optional : configure kernel
#iman@debian:~/linux-3.19.3$ make menuconfig
##if not first compilation
#iman@debian:~/linux-3.19.3$ make-kpkg clean

##set compil at full speed
iman@debian:~/linux-3.19.3$ export CONCURRENCY_LEVEL=`grep "cpu cores" /proc/cpuinfo | head -1 | cut -d":" -f2 | cut -c2-`
##compil kernel image and kernel headers (headers are optional)
iman@debian:~/linux-3.19.3$ fakeroot linux32 make-kpkg --cross-compile - --arch=i386 --initrd --revision=1+i --append-to-version=-`date +%Y%m%d` kernel-image kernel-headers

##at this point you have a 32bit kernel inside a linux-image-3.19.3-20150326_1+i_amd64.deb package and headers in linux-headers-3.19.3-20150326_1+i_amd64.deb but both labeled for 64bit arch

##let's label it i386
iman@debian:~/linux-3.19.3$ cd ..
iman@debian:~$ mkdir linux-image-3.19.3-20150326_1+i_i386 && cd linux-image-3.19.3-20150326_1+i_i386
##extract .deb
iman@debian:~/linux-image-3.19.3-20150326_1+i_i386$ ar x ../linux-image-3.19.3-20150326_1+i_amd64.deb
##extract control.tar.gz & data.tar.xz
iman@debian:~/linux-image-3.19.3-20150326_1+i_i386$ mkdir DEBIAN && tar xf control.tar.gz -C DEBIAN && rm control.tar.gz
iman@debian:~/linux-image-3.19.3-20150326_1+i_i386$ tar xf data.tar.xz && rm data.tar.xz
iman@debian:~/linux-image-3.19.3-20150326_1+i_i386$ rm debian-binary

##edit DEBIAN/control and replace "Architecture: amd64" by "Architecture: i386"
iman@debian:~/linux-image-3.19.3-20150326_1+i_i386$ sed -i 's/Architecture: amd64/Architecture: i386/g' DEBIAN/control
cd ..

##repackage the modified .deb
iman@debian:~$ dpkg-deb -b linux-image-3.19.3-20150326_1+i_i386
##now you've got your linux-image-3.19.3-20150326_1+i_i386.deb
##same method applies for linux-headers-3.19.3-20150326_1+i_amd64.deb

##copy .deb to your 32bit machine and install :
iman@msiwind:~$ sudo dpkg -i linux-image-3.19.3-20150326_1+i_i386.deb linux-headers-3.19.3-20150326_1+i_i386.deb

##reboot then :
iman@msiwind:~$ uname -a
Linux msiwind 3.19.3-20150326 #1 SMP Thu Mar 26 20:10:01 CET 2015 i686 GNU/Linux


ThnxX :
sukhanov.net
linuxfr.org

Linux Kernel compilation recipe on Debian

  • Article Currently 2.55/5
  • 1
  • 2
  • 3
  • 4
  • 5

 Rating : 2.5/5 (42 votes cast)

 ##install necessary packages 
iman@debian:~$ sudo apt-get install libncurses5 libncurses5-dev libssl-dev kernel-package fakeroot build-essential
##get kernel 3.10
iman@debian:~$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.xz

iman@debian:~$ tar -xvf linux-3.10.tar.xz
iman@debian:~$ cd linux-3.10

iman@debian:~/linux-3.10$ cp /boot/config-`uname -r` .config && yes "" | make oldconfig

##optional : configure kernel
#iman@debian:~/linux-3.10$ make menuconfig
##if not first compilation
#iman@debian:~/linux-3.10$ make-kpkg clean

##set compil at full speed
iman@debian:~/linux-3.10$ export CONCURRENCY_LEVEL=`grep "cpu cores" /proc/cpuinfo | head -1 | cut -d":" -f2 | cut -c2-`
##compil kernel image and kernel headers
iman@debian:~/linux-3.10$ fakeroot make-kpkg --initrd --revision=1+i --append-to-version=-`date +%Y%m%d` kernel-image kernel-headers

iman@debian:~/linux-3.10$ cd ..
iman@debian:~$ sudo dpkg -i linux-image-3.10.0-20130701_1+i_amd64.deb linux-headers-3.10.0-20130701_1+i_amd64.deb

##reboot then :
iman@debian:~$ uname -a
Linux debian 3.10.0-20130701 #1 SMP Mon Jul 1 09:55:44 CEST 2013 x86_64 GNU/Linux

Tips SQL

  • Article Currently 2.38/5
  • 1
  • 2
  • 3
  • 4
  • 5

 Rating : 2.4/5 (29 votes cast)

#doublons mysql

SELECT id FROM table GROUP BY id HAVING COUNT(*) >1

#insert if no exists, update if exists

Attention : nécessite de créer un index sur le champ DUPLiCATE à tester

ALTER TABLE table ADD UNIQUE nom_index ('champ')
INSERT INTO table VALUES('','truc','machin','bidule') ON DUPLICATE KEY UPDATE truc='truc',machin='machin',bidule='bidule'

ou encore :

IF EXISTS (SELECT truc,machin FROM table WHERE colonne='valeur') UPDATE table SET (...) WHERE colonne='valeur' ELSE INSERT INTO table VALUES (...)
INSERT INTO table (cle,vote) VALUES (1337,10) ON DUPLICATE KEY UPDATE vote=vote+10;
UPDATE table SET (...) WHERE colonne='valeur' IF @@ ROWCOUNT=0 INSERT INTO table VALUES (...)

Tips Bash

  • Article Currently 2.14/5
  • 1
  • 2
  • 3
  • 4
  • 5

 Rating : 2.1/5 (21 votes cast)

#droits

Droitsrwx
Propriétaire400200100
Groupe402010
Autres421

#find jpg mv

find . -name "*.jpg" -exec mv{}. \;

#Search &Replace dans des fichiers en ligne de commande (-name facultatif)

find . -name *.php -exec sed -i s@require_once@//require_once@g{}\;

#applying a patch

Place the .diff file in the same directory as the source tarball. Ungzip/untar the source, and run

patch -p0 <some-patch-file.diff

The -p0 indicates the paths in the file are relative to the current directory, if you place the .diff file in the some-soft-source dir you need -p1.

#purge des fichiers de conf orphelins

# aptitude purge $(dpkg --get-selections | grep deinstall | awk '{print $1}')

#liste les fichiers avec un md5 différent

find . -maxdepth 1 -type f -print0 | xargs -0 md5sum | sort | uniq -w 32 | awk '{print $2}' >./distinct.txt

#pdf to jpg

chaque page en image

convert fichier.pdf image%d.jpg

#grep

dpkg -l | grep '(15|16)' | grep linux

#egrep multiple

cat fichier.txt | egrep -i '(motif1|motif2)'

#optimiser sqlite firefox

find ~/.mozilla/firefox/ -type f -name "*.sqlite" -exec sqlite3{}VACUUM \;

#cp dir1 >dir2

cp -ruv /dir1/ /dir2/

les options permettent d'afficher les fichiers copiés, de copier l'intégralité des repertoires, de mettre à jour les fichiers deja copiés.

#list dir

find . -type d

#cpu load en %

top -b -n 1 | grep Cpu | awk '{print $2}' | cut -c1-4

#capture tty

fbgrab capture.png

#ajouter un mot au début de chaque ligne

for i in `cat fichier.txt` ;do mot_a_ajouter $i ;done

#cat sans doublon

cat fichier1.txt fichier2.txt| sort -n | uniq -u

#extraire que les trucs "lisibles" avec strings

strings fichier.doc | less

et

strings -e b fichier.doc | less

#iso to utf

iconv -f ISO-8859-1 -t UTF-8 -o output.txt input.txt
iconv -f UTF-8 -t ISO-8859-1 -o output.txt input.txt
recode ISO-8859-15..UTF-8 input.txt

#somme avec awk

Par exemple, pour connaître la place utilisée en mémoire par le processus apache2 :

ps -ely | grep '\<apache2\>' | awk '{SUM += $8}END{print SUM}'

ou pour connaître la place en Ko prise par tous les fichiers PNG du répertoire :

ls -l *.png | awk '{SUM += $5}END{print SUM/1024}'

#affiche le dernier fichier .txt

ls -t1 *.txt | head -1

#affiche tous les fichiers .txt sauf fichier.txt

ls *.txt | grep -v fichier.txt | xargs ls

#affiche tous les fichiers .txt sauf le dernier fichier .txt

ls *.txt | grep -v `ls -t1 *.txt | head -1`

#syntaxe sed pour afficher le texte compris entre "motif1" et "motif2" :

sed -n '/motif1/,/motif2/p' /chemin/vers/fichier

#Raccourcis clavier pour Bash

Certaines de ces commandes fonctionnent également sous des éditeurs de fichiers en ligne de commandes. On pourra prendre l'exemple de Emacs et les commandes de déplacement ou de copier / coller.

1. Déplacement

Ctrl + a : aller au début de la ligne

Ctrl + e : aller à la fin de la ligne

Alt + b : se déplacer mot par mot dans la ligne de commande en arrière (b pour backward)

Alt + f : se déplacer mot par mot dans la ligne de commande en avant (f pour forward)

ctrl + xx : positionner le curseur au début du mot ou à la fin

2. Couper / Coller

Ctrl + k : couper la chaîne du curseur jusqu'à la fin de la ligne

Ctrl + u : couper la chaîne du curseur jusqu'au début de la ligne

Ctrl + w : couper le mot avant le curseur

Ctrl + y : coller une chaîne

3. Modification

Ctrl + t : inverser la position des deux caractères avant le curseur (pratique quand on tape par exemple, sl au lieu de ls)

Alt + t : inverser la position des deux mots avant le curseur

Alt + c : mettre une lettre en majuscule

Alt + l : mettre un mot en en minuscule (l pour lowercase)

Alt + u : mettre un mot en majuscule (u pour uppercase)

Alt + . : réécrire le paramètre de la dernière commande

4. Divers

Ctrl + l : effacer le contenu de l'écran

Ctrl + r : rechercher une commande déjà tapée

Ctrl + _ : annuler la dernière modification

Ctrl + c : arrêter la commande en court

Ctrl + d : quitter le shell en court