Comment cropper / rogner / recadrer un film [Vidéo]

[niveau débutant]

J’ai découvert qu’il était très simple d’enlever des bouts du cadrage d’un film grâce à AviDemux !

Il vous suffit d’ouvrir votre film avec AviDemux puis dans la colonne de gauche choisissez un format vidéo de sortie. On prendra par exemple xvid et ensuite cliquez sur “Filtres” :
Copie d'écran des boutons

Parmi les filtres disponibles double cliquez sur “Crop”. A partir de là vous pouvez définir la marge gauche, droite, haute et basse que vous voulez rogner :
Fenêtre de crop

Une fois terminé, cliquez sur “Fermer”, puis dans la fenêtre principale du logiciel, dans la colonne de gauche, sélectionner le format audio voulu (par exemple mp3), et ainsi que le format de sortie (avi).
Si jamais, au moment où vous cliquez sur “Fermer” vous obtenez le message « Width is not a multiple of 8 » :
Message d'erreur
Pour régler ce problème il faut revenir à votre filtre “Crop”. Vous devez regarder la largeur de la vidéo que vous allez produire :
Exemple de largeur de vidéo
Dans cet exemple on a 478, or ce n’est pas un multiple de 8 (car 478/8=59.75). Il suffit donc de modifier légèrement la bordure droite ou gauche afin d’obtenir une taille multiple de huit. Si j’ai 480 alors ça sera bon (480/8=60).

Il ne vous reste plus qu’à enregistrer votre film et le tour est joué.

Un algorithme court et rapide pour Array.unique() [Javascript]

Voici un simple algorithme, et apparemment rapide, trouvé sur http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/ et que j’ai raccourci légèrement :

1
2
3
4
5
6
7
8
Array.prototype.unique=[].unique||function(){var o={},i,l=this.length,r=[];for(i=0;i<l;i++)o[this[i]]=this[i];for(i in o)r.push(o[i]);return r}
 
// or, if you don't want to override the Array prototype:
var ArrayUnique = function(arr){var o={},i,l=arr.length,r=[];for(i=0;i<l;i++)o[arr[i]]=arr[i];for(i in o)r.push(o[i]);return r}
 
// exemple
var tab=[1, 5, 2, 4, 1, 5, 4, 1, 5, 6, 8 ];
var tabUniq=tab.unique(); // [1, 5, 2, 4, 6, 8]

Alternatives à IMNRC() et ProcessImn() pour déterminer la présence d’une personne [Sharepoint]

Avec Sharepoint (2003 & 2007) on peut voir la présence (sur IM/MSN/Microsoft Messenger/Office Messenger/Microsoft Lynk) des utilisateurs directement dans une page Web grâce à des petites bulles de couleur. Quand on place le curseur au-dessus on aperçoit un popup avec diverses informations et possibilités. Cela n’est disponible que pour Internet Explorer puisqu’on utilise ici de l’ActiveX (et en particulier NameCtrl).

Je force le mode standard d’IE dans mon Sharepoint, et j’ai remarqué que les fonctions ProcessImn() et IMNRC() (l’une appelant l’autre) causaient un plantage d’IE avec un CPU qui montait en charge, et cela pour les pages qui contiennent un grand nombre de personnes et donc de bulles de présence (typiquement une liste AllItems avec des colonnes qui montrent cette information).
J’ai donc décidé de créer une alternative à l’affichage de la présence dans Sharepoint en utilisant mes propres fonctions.

Le résultat est le suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* on commence par supprimer les deux fonctions qui posent problèmes */
function IMNRC() {}
function ProcessImn() {}
var nameCtrl; // on s'assure de définir nameCtrl
var presence={}; // on crée un objet presence qui va nous servir à mettre en cache l'état de chaque individu
// Cette fonction fait apparaitre un menu/popup avec les informations de présence de l'utilisateur
function showIMMenu() {
  var el=window.event.srcElement;
  var pos=el.getBoundingClientRect();
  // on place le menu en question à la position pos.left et pos.top
  nameCtrl.ShowOOUI(el.getAttribute("sip"), 0, pos.left, pos.top);
}
 
// Cette fonction va cacher le menu
function hideIMMenu() { nameCtrl.HideOOUI() }
 
// Cette fonction va permettre de modifier la bulle avec celle qui correspond à l'état de présence de l'utilisateur
function ChangeIMPresence(sip, state, imgID) {
  if (presence[imgID] == state) return;
  presence[imgID]=state;
  var imgIM=document.getElementsByName(imgID);
  for (var i=0; i<imgIM.length; i++) {
    var alt="",src="imnhdr.gif"; // default image (grey)
    switch(state) {
      case 0: alt="Online"; src="imnon.png"; break;
      case 1: alt="Offline"; src="imnoff.png"; break;
      case 2: alt="Away"; src="imnaway.png"; break;
      case 4: alt="Be Right Back"; src="imnaway.png"; break;
      case 3: alt="Busy"; src="imnbusy.png"; break;
      case 5: alt="On the Phone"; src="imnbusy.png"; break;
      case 6: alt="Out to Lunch"; src="imnaway.png"; break;
      default: alt="Unknown"; src="imnhdr.gif";
    }
    imgIM[i].src="http://your_sharepoint/_layouts/images/"+src;
    imgIM[i].alt=alt;
  }
}
 
// Maintenant on initialise l'objet ActiveX
function initIMPresence() {
  if (typeof ActiveXObject == "function") { // seulement pour IE
    if (typeof nameCtrl=="undefined") nameCtrl=new ActiveXObject('Name.NameCtrl.1');
    var imgIM=document.getElementsByName("imnmark"); // toutes les bulles de présence ont le nom "imnmark"
    for (var i=0; i<imgIM.length; i++) {
      var sip=imgIM[i].getAttribute("sip"); // l'attribut "sip" retourne l'information que l'on souhaite
      if (sip!=null) {
        sip=sip.slice(4);
        var state=nameCtrl.GetStatus(sip, "imnmark_"+sip); // retourne la présence basée sur le SIP (adresse email)
        nameCtrl.OnStatusChange=ChangeIMPresence;
        imgIM[i].alt="Unknown";
        imgIM[i].name+="_"+sip;
        imgIM[i].onclick=showIMMenu;
        imgIM[i].onmouseover=showIMMenu; // quand on passe la souris au-dessus d'une bulle on verra le menu
        imgIM[i].onmouseout=hideIMMenu;
      }
    }
  }
}
 
// et on lance tout ça !
initIMPresence();

En ajoutant ce bout de code à ma masterpage j’ai pu conserver les bulles de présence tout en évitant un plantage d’IE 🙂

DOMContentLoaded pour cross browser (multi-navigateurs) [Javascript]

Après avoir parcouru le Net pour un évènement DOMContentLoaded (qui s’enclenche avant window.onload) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j’ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : http://javascript.info/tutorial/onload-ondomcontentloaded

Pour résumer la fonction à utiliser est :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function bindReady(handler){
  var called = false
  function ready() {
    if (called) return
    called = true
    handler()
  }
  if ( document.addEventListener ) { // native event
    document.addEventListener( "DOMContentLoaded", ready, false )
  } else if ( document.attachEvent ) {  // IE
    try { var isFrame = window.frameElement != null } catch(e) {}
 
    // IE, the document is not inside a frame
    if ( document.documentElement.doScroll && !isFrame ) {
      function tryScroll(){
        if (called) return
        try {
          document.documentElement.doScroll("left")
          ready()
        } catch(e) {
          setTimeout(tryScroll, 10)
        }
      }
      tryScroll()
    }
 
    // IE, the document is inside a frame
    document.attachEvent("onreadystatechange", function(){
      if ( document.readyState === "complete" ) {
        ready()
      }
    })
  }
 
  // Old browsers
  if (window.addEventListener)
    window.addEventListener('load', ready, false)
  else if (window.attachEvent)
    window.attachEvent('onload', ready)
  else {
    var fn = window.onload // very old browser, copy old onload
    window.onload = function() { // replace by new onload and call the old one
      fn && fn()
      ready()
    }
  }
}

A partir de là vous pouvez appeler votre fonction avec :

1
2
3
bindReady(function() {
  /* quelque chose qui doit se lancer après le chargement du DOM */
});

Dans le cas où vous voudriez appeler plusieurs fonctions, alors vous pouvez simplement faire quelque chose comme :

1
2
3
4
5
6
7
8
9
10
11
12
var fonctionsACharger=[];
bindReady(function() {
  for (var i=0; i<functionsACharger.length;i++) functionsACharger[i]();
});
 
/* on ajoute les fonctions à charger dans notre tableau */
fonctionsACharger.push(function() {
  /* première chose à faire */
});
fonctionsACharger.push(function() {
  alert("Toutes les fonctions sont maintenant chargées !");
});

IE9 en mode standard et Sharepoint… bug du bouton OK [Sharepoint]

[niveau expert]

Si vous passez IE9 en mode standard avec Sharepoint vous risquez d’avoir le bouton OK des formulaires qui ne fonctionne plus… Après avoir debuggué le bazar j’ai découvert qu’un des fichiers (“/_layouts/1033/form.js”) Javascript utilise document.frames() au lieu de document.frames[]. Si cela fonctionne sur les anciens navigateurs, ce n’est plus le cas pour IE9 en mode standard, du coup il retourne un “Function expected”.

Il y a deux fonctions incriminées RTE_GetEditorIFrame() et RTE_DD_GetMenuFrame(). Il suffit d’utiliser les commentaires conditionnels pour indiquer que lorsqu’on utilise IE9 alors on remplace ces deux fonctions par :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function RTE_GetEditorIFrame(strBaseElementID)
{
  var ifmEditor=null;
  var doc=document;
  if ((null !=doc.frames) && (doc.frames.length==0) && (doc.parentWindow.parent !=null))
  {
    doc=doc.parentWindow.parent.document;
  }
  if ((null !=doc.frames) && (doc.frames.length > 0))
  {
    var ifmContainer=doc.getElementById(RTE_GetEditorIFrameID(strBaseElementID));
    if (ifmContainer !=null)
    {
      ifmEditor=doc.frames[RTE_GetEditorIFrameID(strBaseElementID)];
    }
  }
  return ifmEditor;
}
function RTE_DD_GetMenuFrame()
{
  var ifmMenu=null;
  var elemMenu=RTE_DD_GetMenuElement();
  if (null !=elemMenu)
  {
    if (document.frames.length > 0)
    {
      ifmMenu=document.frames[g_strRTETextEditorPullDownMenuID];
    }
    else
    {
      if ((document.parentWindow !=null) && (document.parentWindow.frames !=null))
      {
        ifmMenu=document.parentWindow.parent.document.frames[g_strRTETextEditorPullDownMenuID];
      }
    }
  }
  if (null==ifmMenu)
  {
    if (g_fRTEFirstCallToGetMenu)
    {
      g_fRTEFirstCallToGetMenu=false;
      return null;
    }
  }
  return ifmMenu;
}

Ainsi document.frames est bien appelé comme un objet et non comme une fonction !

A noter cependant qu’il existe des tonnes de bugs avec IE9 et Sharepoint 2003/2007. Il est donc conseillé d’utiliser le mode de compatibilité en IE8 si vous ne voulez pas passer des heures à trouver l’origine des problèmes et à les corriger :

1
<meta http-equiv="X-UA-Compatible" content="IE=8"/>

Appeler un lien relatif dans une masterpage [Sharepoint]

J’ai eu le cas où j’avais besoin d’appeler un fichier Javascript à la racine de tous mes sites Sharepoint (et donc avec un lien relatif au site consulté). Pour cela j’ai modifié la masterpage en y ajoutant la ligne suivante :

1
<script type="text/javascript" src='<asp:Literal runat="server" Text="<% $SPUrl:~Site/customized.js %>"></asp:Literal>'>

C’est donc <asp:Literal runat="server" Text="<% $SPUrl:~Site/customized.js %>"></asp:Literal> qui fait tout le boulot. Et bien sûr vous pouvez utiliser asp:Literal pour d’autres appels de fichiers !

Define the preview image for your masterpage [Sharepoint]

You can easily define the preview image for your masterpage : just go to the Master Page Gallery (e.g. : http://your.server.com/your/root/dir/_catalogs/masterpage/) and find your masterpage in the collection. Then move your mouse hover to have the downward arrow that appears to open its context menu. Choose “Edit Properties”, and you’ll see a Preview Image section 🙂

For your information, the image should 216px × 160px

Convertir un MKV en AVI [vidéo]

[niveau débutant]

Après avoir essayé un tas de logiciels différents, je viens enfin de découvrir celui qui fonctionne et qui est simple : AviDemux

Pour se faire, ouvrez simplement votre fichier mkv dans AviDemux. Vous aurez certainement un message qui indique « H.264 détecté : Si le fichier utilise des images-B comme référence, cela peut conduire à un plantage ou à des saccades. Avidemux peut utiliser un autre mode qui est plus stable mais vous perdrez la précision de l’image. Voulez-vous utiliser ce mode ? » :
Message d'alerte

Je réponds “Non” sans voir aucun soucis par la suite.
Maintenant il va sûrement vous demander de reconstruire l’index : acceptez.

Ensuite, dans la colonne de gauche, pour vidéo choisissez le format souhaité (ici on prendra Xvid), puis pour l’audio l’encodage voulu (ici on prendra MP3) :
Les boites de dialogue pour les encodages

Il faut alors cliquer sur “Filtres” dans la section audio pour choisir le mixer “Stéréo” :

Sans ça vous aurez l’erreur « Codec Error : The number of channels is greater than what the selected audio codec can do. Either change codec or use the mixer filter to have less channels. » :

Et il ne vous reste plus qu’à faire “Fichier -> Enregistrer une vidéo” et le tour est joué !

Réduire la taille d’une photo JPG sans perdre en qualité [HOWTO]

[niveau débutant]

Il existe un moyen de compresser encore plus les photos JPG (et PNG, et GIF) grâce à une technique avancée de compression. Il va d’abord falloir installer quelques programmes, après quoi vous verrez que c’est extrêmement simple et utile au quotidien !

Pour faire cela nous allons utiliser le logiciel IrfanView (cliquez sur “Download” dans la colonne de gauche puis sur le bouton “Download Now – Get it from CNET Download.com!”).
Une fois téléchargé vous pouvez lancer l’installation : vous pouvez laisser les options par défaut, attention cependant parce qu’Irfan View va vous proposer d’installer la toolbar de Google, et je vous déconseille de le faire :
Fenêtre qui apparait durant l'installation et qui propose l'ajout de Google Toolbar, et il est surveillé en jaune le fait de décocher la case

Maintenant il va s’agir d’ajouter le plugin RIOT (RIOT signifie Radical Image Optimization Tool). Pour cela télécharger l’ensemble des plugins disponibles sur cette page : http://www.irfanview.com/plugins.htm (cliquez sur “Brothersoft.com – download IrfanView plugins” puis sur le bouton “Download now”).

Une fois le fichier téléchargé, double cliquez dessus pour lancer l’installation.

Il apparait qu’IrfanView ne fournit pas la dernière version du plugin RIOT, on va donc devoir la télécharger via http://download.criosweb.ro/download.php?sid=R-dll&type=installer (attention de bien cliquer sur le bouton gris qui est tout en haut et qui se nomme “Download RIOT DLL version”) :
Illustration du bouton de téléchargement

Cela a pour effet de télécharger un fichier .zip : faites un clic droit sur ce fichier nouvellement téléchargé puis choisissez “Extraire ici”, ou “Extraire tout”, ou “Dézipper ici” (cela peut varier selon la configuration de votre ordinateur).
Une fois décompressé, vous allez trouver un fichier qui se nomme “Riot-plugin.exe”. Double cliquez dessus. Durant l’installation il devrait vous proposer d’installer le plugin pour IrfanView :
Fenêtre qui apparait durant l'installation
Il va vous demander si vous souhaitez installer « DriveScanner 2011 »; choisissez Ne pas installer DriveScanner 2011

C’est bon ! Toute l’installation est effectuée, on peut passer à la suite…

Il va falloir ouvrir IrfanView qui se trouve dans votre menu Démarrer :
Visualisation de IrfanView dans le menu Démarrer

Deux possibilités….

1. Si vous souhaitez modifier un ensemble de photos d’un coup

Ouvrez une image au hasard (ça n’a pas d’importance ici) dans IrfanView, puis faites File > Save for web... (plugin). Si vous avez une alerte avec le message suivant, alors cliquez sur “No” :
This file contains a high resolution image. RIOT can handle such images, but processing can be quite slow in this situation. Do you want to resize it first ? (recommanded) The original image won't be modified

Cliquez sur “Batch” dans la barre :
Barre d'outil du plugin où il faut cliquer sur Batch

Répondez “Yes” au message d’alerte qui apparait et dit “To use the Batch Optimizer I need to unload the current image. Proceed ?”.
Cliquez sur le bouton “Add images” puis sélectionnez toutes les photos dont vous voulez réduire la taille.
Ensuite choisissez où les photos compressés seront enregistrées en cliquant en bas à droite sur le bouton avec trois petits points :
Fenêtre du Batch avec les boutons à cliquer
Vous pouvez éventuellement cliquer sur le bouton “Settings” et cocher les cases qui vous intéressent (dans mon cas, toutes !)
Il ne reste plus qu’à cliquer sur “Start” et la magie opère…

Les nouvelles photos auront une taille entre 30% et 90% plus petite que les photos d’origine, sans perdre en qualité et en résolution 🙂

2. Si vous souhaitez modifier une seule image

Ouvrez l’image que vous souhaitez optimiser dans IrfanView. Puis faites File > Save for web... (plugin). Si vous avez une alerte qui dit « This file contains a high resolution image. RIOT can handle such images, but processing can be quite slow in this situation. Do you want to resize it first ? (recommanded) The original image won't be modified », alors cliquez sur “No”.

Vous verrez ensuite un comparatif de votre image, avec en haut à droite la taille de la version optimisée : assurez vous que vous avez toujours un chiffre inférieur à la version d’origine !
Selon le format de votre image (JPEG, GIF, PNG), vous avez plusieurs options en bas de la fenêtre.
Prenons l’exemple d’une image PNG : pour la couleur je choisis “Optimal 256 colors”, puis dans “External optimizer” je choisis « OptiPNG o3 » (et je clique sur le check vert pour que OptiPNG soit utilisé), et enfin je coche “Best compression”.
Les différentes options choisies dans la Fenêtre d'optimisation
(cliquez sur l’image ci-dessus pour l’agrandir)

Jouez sur les options pour faire varier la taille.

Il ne reste plus qu’à sauver votre travail, et voilà !

Mettre à jour Debian Lenny vers Squeeze [retour d’expérience]

J’ai un serveur dédié chez OVH (un “Kimsufi”) et j’ai voulu faire la mise à jour de Debian Lenny vers Squeeze.

Vous trouverez toutes les informations nécessaires sur cette page : http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.fr.html. Je vous conseille de suivre chaque étape très attentivement.

Attention car chez OVH on peut se retrouver avec une modification, que j’explique un peu plus bas, à faire dans /etc/init.d/fixudev sur les headers manquants (détails sur les headers des fichiers de init.d)…. vous devrez aussi vérifier les autres scripts que vous avez pu mettre vous-même dans /etc/init.d pour vous assurer qu’ils possèdent tous un en-tête sinon vous aurez un message d’erreur durant la mise à jour.

Voici un bref résumé des étapes à suivre (tout ce qui commence par # est une commande à taper) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# apt-get update && apt-get upgrade
' une fois que votre système est à jour, vérifier que vous avez bien la dernière version du noyau mise à disposition par OVH
' pour cela visitez http://guide.ovh.com/KernelInstall qui explique ce qu'il faut faire (deux fichiers à télécharger puis un update-grub et un reboot!)
' je vous conseille les versions avec grsec pour plus de sécurité (elles sont notées "-grs-")
' si vous n'êtes pas sûr du noyau que vous avez actuellement, vous pouvez le savoir en tapant:
# uname -a
' maintenant il va falloir faire une sauvegarde de votre machine, et en particulier :
' le répertoire /etc/
' le répertoire /home/
' le répertoire qui contient vos sites web
' vos bases SQL
' ensuite, comme indiqué dans le tutoriel, vous devez sauvegarder certains éléments qui pourraient nous servir en cas de problème :
# mkdir svg_special; cp -R /var/lib/dpkg svg_special/; cp /var/lib/apt/extended_states svg_special/; dpkg --get-selections "*" > svg_special/dpkg_get_selection
' avant de continuer, il va falloir bidouiller le fichier /etc/init.d/fixudev puisqu'il n'est pas conforme et va vous créer une erreur dans la suite
' voici par quoi vous devez le remplacer :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#! /bin/sh
### BEGIN INIT INFO
# Provides:          fixudev
# Required-Start:
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: remove fixed relation between MAC address and name of network device (00:15:f2:90:3e:a0 -> eth0)
# Description:       remove fixed relation between MAC address and name of network device (00:15:f2:90:3e:a0 -> eth0)
### END INIT INFO
 
case "$1" in
  start)
    # example:
    # # PCI device 0x1106:0x3065 (via-rhine)
    # SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:15:f2:90:3e:a0", NAME="eth0"
 
    for interface in `ifconfig -a | grep -e "^eth"|cut -d' ' -f1`; do
            MAC=`ifconfig $interface | grep -e "^$interface"|cut -d' ' -f11 | sed s/\:/\\\\\\\\:/g`
    # removes actual mac
    #       for file in `grep -i "$MAC" /etc/udev/rules.d/*|sort|uniq|cut -d':' -f1`; do
    #               perl -ni -e "print unless /$MAC/" ${file} && \
    #                       echo "removed HW address ${MAC} from ${file} (${interface})"
    #       done
 
    # removes *ANY* mac
            for file in `grep -re "^SUBSYSTEM==\"net\".*NAME=\"${interface}\"$" /etc/udev/|sort|uniq|cut -d':' -f1`; do
                    sed -i -e "/^SUBSYSTEM==\"net\".*NAME=\"${interface}\"$/d" ${file} && \
                            echo "removed HW address from ${file} (${interface})"
            done
    done
    ;;
  stop)
    ;;
 
  status)
    echo "Nothing here";
    ;;
 
  restart|reload)
    $0 start
    ;;
  *)
    echo "Usage: fixudev start"
    exit 1
esac
exit 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
' maintenant il est conseillé d'utiliser screen pour pouvoir se reconnecter (avec screen -r) à en cas de déconnexion
# screen
' il existe un bug avec splashy c'est pourquoi il est dit de le purger
# apt-get purge splashy
' si la commande ci-dessous ne retourne rien, alors c'est bon, mais dans tous les cas consultez http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.fr.html#package-status
# dpkg --audit
' maintenant il faut remplacer tous les "lenny" de /etc/apt/sources.list par des "squeeze"
' voici ce que ça donne chez moi :
' deb http://ftp.fr.debian.org/debian squeeze main non-free
' deb ftp://mir1.ovh.net/debian/ squeeze main contrib non-free
' deb-src ftp://mir1.ovh.net/debian/ squeeze main contrib non-free
' deb http://security.debian.org/ squeeze/updates main contrib non-free
' deb-src http://security.debian.org/ squeeze/updates main contrib non-free
 
' il est recommandé d'utiliser script qui permettra de sauvegarder ce qu'on va faire maintenant (qui pourra être utile en cas de problème)
# script -t 2>/root/upgrade-squeeze1.time -a /root/upgrade-squeeze1.script
' on commence par mettre à jour les listes des paquets
# apt-get update
' on va vérifier qu'on a la place suffisante (un message explicite apparait sinon)
# apt-get -o APT::Get::Trivial-Only=true dist-upgrade
' on va maintenant d'abord faire une mise à jour minimale
# apt-get upgrade
' là il va vous questionner... en général choisissez l'option par défaut si vous ne savez pas quoi répondre
' à noter qu'un nouveau php.ini va être créer, et il est conseillé d'y jeter un oeil pour voir les nouvelles options
 
' une fois cette étape un peu longue terminée, il faut installer udev :
# apt-get install udev
' maintenant on teste pour voir si tout s'est bien passé
# reboot
 
' [...]
 
' normalement le serveur redémarre sans problème
' on recommence à lancer screen et on sauvegarde les étapes suivantes avec script
# screen
# script -t 2>/root/upgrade-squeeze2.time -a /root/upgrade-squeeze2.script
' maintenant on peut faire une mise à jour complète !
# apt-get dist-upgrade
 
' chez moi il a supprimé mysql et j'ai été obligé de le réinstaller :
# apt-get install mysql-server mysql-client php5-mysql
' un dernier reboot pour s'assurer que tout fonctionne normalement
# reboot
' et enfin on va nettoyer tous les paquets
# apt-get autoremove

Si vous tombez sur ce genre de message :

Impossible de migrer vers le nouveau système de démarrage
Des tests ont montré que des problèmes existent dans le système de démarrage qui empêchent la migration vers la nouvelle séquence de démarrage :
insserv: warning: script ‘XXXX’ missing LSB tags and overrides, insserv: warning: script ‘YYYY’ missing LSB tags and overrides,
Si le problème indiqué concerne une modification locale, vous devrez le réparer vous-même. Si c’est un bogue dans un paquet, il devrait être signalé dans le système de suivi des bogues (BTS) et corrigé dans le paquet. Veuillez lire
« http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot » pour plus d’informations sur les méthodes de résolution des problèmes empêchant la transition.
Une fois que les problèmes ont été corrigés, vous pouvez réessayer la migration avec la commande « dpkg-reconfigure sysv-rc ».

C’est que vous devez aller modifier manuellement les fichiers correspondant à XXXX et YYYY qui se trouvent dans /etc/init.d/. L’origine est que l’en-tête spécial est manquante, ainsi que les fonctions start/stop.
Le squelette de votre fichier devrait être :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#! /bin/sh
### BEGIN INIT INFO
# Provides:          nom de votre script
# Required-Start:
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: Une description du script
# Description:       Une description du script
### END INIT INFO
 
case "$1" in
  start)
    # votre code
    echo "XXXX started!"
    ;;
  stop)
    echo "XXXX stopped..."
    ;;
 
  status)
    echo "Nothing here";
    ;;
 
  restart|reload)
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage: XXXX {start|stop|restart|status}"
    exit 1
esac
exit 1