parent
e038d2feda
commit
9a9d3108ba
@ -0,0 +1,50 @@ |
||||
\chapter{GIT} |
||||
\index{GIT} \label{GIT} |
||||
|
||||
Git est un système de gestion de version, très bien expliqué |
||||
aux quatre coins des interwebs. Je ne vais donc pas m'étendre |
||||
plus que ça, pour passer tout de suite à un cas particulier |
||||
\footnote{que je n'arrive pas encore à vraiment maitriser}. |
||||
|
||||
\section{Démarrage} |
||||
|
||||
\begin{verbatim} |
||||
$ mkdir Foo |
||||
$ cd Foo/ |
||||
$ git init |
||||
$ > README.txt |
||||
$ git add README.txt |
||||
\end{verbatim} |
||||
|
||||
|
||||
\section{Setup du serveur} |
||||
|
||||
Sur le serveur distant, dans un endroit accessible par |
||||
le protocole \texttt{HTTP}, il faut créer le dépot. |
||||
|
||||
\begin{verbatim} |
||||
$ mkdir Foo |
||||
$ cd Foo/ |
||||
$ git init --bare |
||||
\end{verbatim} |
||||
|
||||
Et ensuite : |
||||
\begin{verbatim} |
||||
$ git update-server-info |
||||
\end{verbatim} |
||||
|
||||
\section{Pousser le code} |
||||
|
||||
Notre commit\index{commit} local semble pertinent, |
||||
il est temps de le faire connaitre au monde. |
||||
|
||||
|
||||
\begin{verbatim} |
||||
$ git push yuser@serveur:/chemin/vers/le/depot/Foo |
||||
\end{verbatim} |
||||
|
||||
\section{Krkrkr...} |
||||
|
||||
Tout cela semble bien compliqué. |
||||
|
||||
|
@ -0,0 +1,75 @@ |
||||
\chapter{WiFi} |
||||
\label{WiFi} |
||||
|
||||
WIreless FIdelity. |
||||
|
||||
% ============================================================== |
||||
\section{wicd} |
||||
\index{wicd} |
||||
|
||||
\textsl{Wired and Wireless Network Connection Manager}. |
||||
|
||||
Wicd est constitué de deux éléments : un \textsl{daemon} |
||||
qui est responsable de gérer les connections, et plusieurs |
||||
interfaces utilisateurs. Ces deux parties communiquent |
||||
par D-Bus\index{D-Bus}. |
||||
|
||||
\begin{verbatim} |
||||
root@plop:~# wicd-cli -S -y |
||||
root@plop:~# wicd-cli -l -y |
||||
# BSSID Channel ESSID |
||||
0 00:25:15:A6:2A:D0 1 NEUF_2ACC |
||||
1 CA:25:15:A6:2A:D3 1 SFR WiFi Mobile |
||||
2 CA:25:15:A6:2A:D1 1 SFR WiFi Public |
||||
3 A0:21:B7:D5:BA:DB 6 NUMERICABLE-35E0 |
||||
4 00:17:33:D4:39:B8 11 NEUF_39B4 |
||||
5 F4:CA:E5:95:DA:1E 10 FreeWifi_secure |
||||
6 F4:CA:E5:95:DA:1D 10 FreeWifi |
||||
7 16:10:18:47:F2:4C 11 <hidden> |
||||
8 00:24:D4:CE:4F:A1 1 FreeWifi |
||||
9 00:24:D4:CE:4F:A2 1 FreeWifi_secure |
||||
10 16:10:18:47:F2:4E 11 FreeWifi_secure |
||||
11 00:24:D4:CE:4F:A0 1 freeboxwifi |
||||
12 00:0E:9B:24:F5:2B 7 poisson_bulle |
||||
\end{verbatim} |
||||
|
||||
La première ligne demande au \textsl{daemon} de scanner |
||||
(option \texttt{-S} ou \texttt{--scan}) |
||||
les réseaux disponibles en wireless. Puis la seconde |
||||
commande demande l'affichage de la liste. |
||||
|
||||
% ============================================================== |
||||
|
||||
\section{Un coup de NAT} |
||||
\index{NAT}\label{NAT} |
||||
|
||||
Une machine connectée en wifi sur une friboite\footnote{ou le |
||||
Cisco sauvage de la salle d'AG, hein, mais ça ne sera |
||||
pas le même nameserver.} peut facilement |
||||
faire translateur d'adresse pour un réseau branché sur |
||||
son eth, à condition de connaitre les |
||||
incantations magiques |
||||
(qui sont ici très linuxisantes) : |
||||
|
||||
\begin{verbatim} |
||||
ifconfig eth0 10.9.9.200/24 |
||||
echo 1 > /proc/sys/net/ipv4/ip_forward |
||||
modprobe iptable_nat |
||||
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE |
||||
\end{verbatim} |
||||
|
||||
Ensuite sur les machines du lan, donc le coté ethernet, |
||||
il faut incanter ce genre de trucs : |
||||
|
||||
\begin{verbatim} |
||||
ifconfig eth0 10.9.9.199/24 |
||||
route add default gw 10.9.9.200 |
||||
echo "nameserver 192.168.0.254" >> /etc/resolv.conf |
||||
\end{verbatim} |
||||
|
||||
Normalement, ça devrait marcher. D'un autre coté, ce texte |
||||
date de 2011, et l'arrivée de \texttt{systemd}\index{systemd} |
||||
a peut-être cassée des choses. |
||||
|
||||
% ============================================================== |
||||
|
@ -0,0 +1,38 @@ |
||||
\chapter{Trucs divers} |
||||
\label{divers} |
||||
|
||||
\section{Permissions} |
||||
|
||||
Suite à un accident d'origine indéterminé, Captain \textsc{root} a crée |
||||
un fichier dans le \$HOME d'un pauvre péone. Et celui-ci découvre avec |
||||
effroi qu'il ne peut ni lire ni modifier ce fichier. Ce que peut |
||||
confirmer un \texttt{ls -l} qui montre bien que seul root a des droits |
||||
sur ce fichier : |
||||
|
||||
|
||||
\begin{verbatim} |
||||
-rwx------ 1 root root 70 2012-03-15 12:16 coin.pan |
||||
\end{verbatim} |
||||
|
||||
Question : qui tombe à l'eau ? |
||||
|
||||
% ============================================================== |
||||
|
||||
|
||||
\section{Prompt} |
||||
\index{prompt} |
||||
|
||||
\begin{verbatim} |
||||
printf '\033]11;lemonchiffon2\a' |
||||
\end{verbatim} |
||||
|
||||
% ============================================================== |
||||
\section{fdupes} |
||||
\index{fdupes}\label{fdupes} |
||||
|
||||
Un utilitaire pour découvrir les fichiers dupliqués dans |
||||
votre disque dur qui se remplit trop vite à votre gout. |
||||
|
||||
% ============================================================== |
||||
|
||||
|
@ -0,0 +1,50 @@ |
||||
\chapter{threads} |
||||
\index{threads} |
||||
|
||||
% ---------------------------------------------------------------- |
||||
|
||||
Ahemmm, par quoi commencer\footnote{Par de l'aspirine ?} ? Par un |
||||
extrait de la page \texttt{pthreads(6)} ? Voilà, ça c'est bien : |
||||
|
||||
\begin{quote} |
||||
POSIX.1 specifies a set of interfaces (functions, header files) for |
||||
threaded programming commonly known as Pthreads. |
||||
A single process can contain multiple threads, all of which are |
||||
executing the same program. These threads share the same global |
||||
memory (data and heap segments), but each thread has its own stack |
||||
(automatic variables). |
||||
\end{quote} |
||||
|
||||
Et c'est là que les ennuis potentiels débarquent : |
||||
\textit{share the same global memory}, ce qui veut dire en gros |
||||
«~se partagent la même mémoire globale~». |
||||
|
||||
% ---------------------------------------------------------------- |
||||
|
||||
\section{ITC} |
||||
\index{ITC} |
||||
|
||||
\textit{Inter Thread Communication} |
||||
|
||||
Imaginons une application avec un thread qui fait le travail effectif |
||||
(nous le nommerons \textsl{worker}), et plusieurs autres threads |
||||
qui attendent des ordres de l'extérieur (telnet, MIDI\index{MIDI}, |
||||
joystick\index{joystick}\dots) et qui doivent passer ces commandes |
||||
au \textsl{worker}. |
||||
|
||||
Comment allons-nous procéder\footnote{Et c'est une vraie question !} ? |
||||
|
||||
Une première piste : http://tools.ietf.org/html/rfc3117 |
||||
|
||||
% ---------------------------------------------------------------- |
||||
\section{Un exemple} |
||||
|
||||
XXX\index{XXX} |
||||
|
||||
% ---------------------------------------------------------------- |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in new issue