Une nouvelle charte a été élaborée pour le Planet-Libre. Tous les membres sont invités à la consulter et à la respecter.

Nous Suivre

    feed feed feed

En Direct de la Galerie

En Direct du Forum

Les Membres

Participer

Filter les articles :     Articles du jour   -   Articles de la semaine   -   Articles du mois   -   Tous
Gravatar de Creasy
Redimensionner une partition avec GNU Parted 
  • 0 vote
    vote oui
Par Creasy, le 20/05/2009 à 13:08.

Contexte

C'est en voulant essayer une nouvelle distribution sur mon laptop que l'idée de redimensionner mes partition m'a pris. C'est une opération que j'ai souvent effectué par le passé mais toujours à partir d'un liveCD. En l'occurence, ce jour là, pour cause de déménagement qui approche, impossible de mettre la main sur un liveCD sans déballer les cartons si durement remplis...

L'idée est donc de quitter la session graphique, de démonter le système de fichier visé, et de lancer la manipulation à la main. Comme la manipulation n'a pas été évidente et m'a même donné quelques sueurs froides, je fais ce billet pour mémoen quelque sorte.

Présentation succinte de GNU Parted

GNU Parted est un outil en ligne de commande qui permet de créer, supprimer, modifier, copier les partitions d'un disque dur. Il est souvent utilisé avec une interface graphique telle que GParted ou QtParted.

Voyons un peu à quoi ressemble l'utilisation de cet outil :

user:/path/$ sudo parted
GNU Parted 1.8.8
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           prints general help, or help on
        COMMAND
  mklabel LABEL-TYPE                       create a new disklabel (partition
        table)
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on
        partititon NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  move NUMBER START END                    move partition NUMBER
  name NUMBER NAME                         name partition NUMBER as NAME
  print [free|NUMBER|all]                  display the partition table, a
        partition, or all devices
  quit                                     exit program
  rescue START END                         rescue a lost partition near START
        and END
  resize NUMBER START END                  resize partition NUMBER and its file
        system
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG] ]                   toggle the state of FLAG on partition
        NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  displays the current version of GNU
        Parted and copyright information
(parted)

Plus d'infos sur :

Les choses sérieuses

Je ne vais parler ici que d'une diminution de l'espace allouée à une partition pour en créer une nouvelle à la suite. Dans le cas inverse, les principes sont les mêmes, mais il faudra commencer les manipulation par un rm et ensuite faire le redimensionnement.

Voir l'état du disque

Rien de plus simple :

(parted) print all

Disk /dev/sda: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      32,3kB  8480MB  8480MB  primary   ext3         boot
 2      8480MB  160GB   152GB   extended
 5      8480MB  9015MB  535MB   logical   linux-swap
 6      9015MB  160GB   151GB   logical   ext3

On obtient plusieurs informations intéressantes :

  • Numéro de la partition
  • Déput et fin de la partition à XMB ou XGB
  • Type de partition et de sytème de fichier
  • Eventuellement la présence d'un flag de boot

C'est parti !

On lance le redimensionnement avec la commande resize de GNU Parted :

(parted) resize 6 9015MB 120GB

Une confirmation OK et le redimensionnement se lance.

Nouvelle partition

Nous avons à présent une partition redimensionnée et donc un espace vide qu'il faut utiliser. Ici nous allon créer une partion en ext3 qui commencera là où s'arrête celle qu'on vient de réduire et s'arrêtera au bout du disque.

mkpartfs logical ext3 120GB 160GB

On vérifie le résultat avec :

(parted) print all
(parted) check 7

Ensuite on s'échappe de parted avec un quit et il ne reste plus qu'à monter la nouvelle partition ou mieux, la vérifier avant avec :

user:/path/$ sudo fsck.ext3 /dev/sdXY
Retourner au sommaire
Gravatar de Creasy
Firefox 3 and protocol handlers - Part 2 - ExtApp 
  • 0 vote
    vote oui
Par Creasy, le 10/05/2009 à 20:16.

Le précédent article s'était arrêté à présenter l'application Web de principe du gestionnaire de protocoles de Firefox 3. L'article que vous êtes en train de lire va lui s'attacher à vous permettre d'utiliser une application externe pour un protocole donné.

Un exemple d'application externe

Je vais présenter ici un petit exemple d'application en Python qui permet d'écrire dans un fichier journal (ou 'log') le contenu de la valeur passée via l'appel du protocole. Dans cet exemple le protocole utilisée est "mycall" (l'idée est de simuler la création d'un softphone appelé par une interface de click-to-call).

#!/usr/bin/python
#-*- coding: utf-8 -*-

# On importe deux bibliothèques utiles pour la suite
import sys
from datetime import datetime

# On met la date dans une variable pour tracer les résultats
date = datetime.now()

# Ici ça se complique un peu. Comme le gestionnaire de protocole
# de firefox donne en argument l'ensemble de la chaine 'href',
# nous allons enlever la chaine 'mycall:' pour ne conserver que
# la valeur décimale de cette chaine
arg = sys.argv[1][7:]

# On ouvre en écriture le fichier journal
# ('a' pour écrire à la suite)
filout = open('/path/to/log/file/calltest.log','a')

# On écrit la valeur envoyée précédée de la date
filout.write('%d/%d/%d %d:%d - Voici l\'argument donné : ' % (date.day, 
                                                              date.month,
                                                              date.year,
                                                              date.hour,
                                                              date.minute))
filout.write(arg + '\n')

# On ferme le fichier
filout.close()

On donne les droits d'exécution à ce script :

chmod +x /path/to/ext/app/call.py

L'application web

Il est maintenant temps de créer l'interface web de 'click-to-call' sur laquelle figurera le lien vers le protocole 'mycall'. Pour ceux qui ont lu l'article précédent, vous remarquerez que c'est encore plus simple.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
  <title>Web Protocol Handler Sample - Register</title>
</head>
<body>
  <h1>External protocol handler sample</h1>
  <p>This web page will install an external protocol handler for the <code>mycall:</code> protocol.</p>

  <p>Hey have you seen <a href="mycall:874781">this</a> before?</p>
</body>
</html>

Configurer firefox

Si l'interface web est encore plus simple, il faut toutefois configurer un peu Mozilla Firefox.

About:config

Pour accéder au registre de configuration de Firefox, il faut entrer l'adresse suivante dans la barre d'adresse.

about:config
  • Ensuite, il faut créer une 'nouvelle' 'valeur booléenne' (via un click droit) qui portera le nom suivant: "network.protocol-handler.expose.mycall" et mettre la valeur à "true". Cette valeur permettra d'autoriser l'utilisation de ce nouveau protocole.
  • Un second couple nom + valeur est à créer afin de pouvoir éviter un avertissement lors de l'utilisation d'une application externe: "network.protocol-handler.warn-external.mycall" qui prendra la valeur "false".

1er essai

Si vous êtes sur un système qui supporte Bash (Linux, Mac OS, BSD...), vous pouvez lancer un 'tail -f' sur le fichier journal afin d'en suivre l'évolution. Cela nécessite tout de même que le fichier existe avant. Si ce n'est pas le cas, il suffit de le créer avec :

touch /path/to/log/file/calltest.log

On lance la surveillance du fichier :

tail -f /path/to/log/file/calltest.log

On charge la page HTML qui contient le lien 'href' et on suit le lien. Une fenêtre s'affiche alors, vous permettant de choisir l'application à utiliser. Il suffit de choisir celle que vous avez créé plus haut et de cocher (si vous le souhaitez) 'se souvenir' afin de ne plus avoir à le faire ensuite.

À chaque clic, vous ajoutez normalement une ligne dans le fichier journal avec la valeur passée suite à 'mycall:'. À vous d'être imaginatif pour utiliser cette astuce au mieux.

Retourner au sommaire
Gravatar de Creasy
Firefox 3 and protocol handlers - Part 1 - WebApp 
  • 0 vote
    vote oui
Par Creasy, le 06/05/2009 à 15:53.

J'initie ici un nouveau couple (ou plus on verra) d'articles concernant la gestion des 'protocol-handlers' avec firefox 3. La première partie présentera cette fonctionnalité ainsi que son application au sein d'une application web. La seconde, conduira à la création d'un petit logiciel externe en python qui utilisera les mêmes astuces pour par exemple proposer à l'utilisateur d'appeler avec son softphone depuis une interface web.

Présentation des protocol handlers

Deux exemples valent mieux qu'une longue explication...

Les liens mail

Il est assez courant sur le web de croiser des sites qui proposent des liens pour envoyer un email au webmaster ou à n'importe quelle autre personne. Ces liens si vous regardez le code source de la page sont de type :

mailto:mabelle.adresse@mail.com

Si vous cliquez sur un de ces liens, normalement, votre logiciel de mail favori va s'ouvrir et vous proposer de rédiger un mail pour la personne indiquée (dont le nom est automatiquement placé dans le champ "à :". Vous avez ici une application des protocol handlers.

Les liens apt:// d'Ubuntu

La documentation d'Ubuntu propose de nombreux liens de la forme suivante :

apt://un-logiciel

Les utilisateurs de cette distribution (comme moi) savent que ce type de lien permet d'installer des paquets (librairies ou logiciels) via un simple clic. Une fois le lien cliqué, une application de votre ordinateur recherche l'application dans les dépôts disponible et l'installe si il est disponible. Vous l'aurez compris par vous même, c'est une autre application de l'utilisation des protocol handlers.

Utiliser une application web

L'exemple suivant vise à proposer au sein d'une page web A un lien de type :

test:CeciEstUnTest

Ce lien redirigera l'utilisateur sur une page B qui utilisera la valeur donnée.

Cet exemple ne vous parle peut être pas trop, mais vous pouvez très bien imaginer qu'il s'agit de liens mail qui pointent vers une application web de lecture/écriture de mail.

Firefox propose depuis sa version 3 une fonction de l'objet "navigator" qui permet à une application web d'enregistrer son propre gestionnaire de protocole :

window.navigator.registerProtocolHandler(protocole, uri, titre);
  • protocole : chaine de caractère pour le protocole à gérer (ex: test)
  • uri : chaine de caractère représentant l'URL à appeler au clic. %s peut être utiliser pour passer la valeur en paramètre de cette url. (ex: http://monexemple.com/application?value=%s)
  • titre : Titre du gestionnaire (indication utilisateur). (ex: Mon gestionnaire de Test)

Limitations

  • Un gestionnaire de protocole ne peut être enregistré que pour le même domaine que l'application qui l'enregistre. Ceci afin d'éviter les problème de sécurité ou de cross scripting.
  • La valeur transmise à l'aide de '%s' est l'ensemble du contenu de l'attribut 'href' de la balise 'a'. Il faut donc que le gestionnaire de protocole fasse le tri dans cette valeur afin d'utiliser la valeur qui suis le protocole.

Enregistrer un nouveau gestionnaire de protocole

Voici un exemple concert que vous pouvez essayer chez vous :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Protocol Handler - test:</title>
    <script type="text/javascript">
    	navigator.registerProtocolHandler("test", 
                                                              "http://monexemple.com/application.php?value=%s",
                                                              "Mon gestionnaire de Test");
  </script>
</head>
<body>
	<h1>Protocol Handler - test:</h1>
  	<p>Dans la partie 'script', cette page va enregistrer un nouveau gestionnaire de code pour les liens en 
<code>test:</code>.</p>
  	<p>Il sera ensuite possible d'utiliser ce lien : <a href="test:Pouf pastèque">Lien exemple</a>.</p>
</body>
</html>

Un gestionnaire très simplifié

Il ne reste plus qu'à créer un handler associé (ici en php pour simplifier) qui utilisera la valeur passée en paramètre :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Protocol Handler - test: - Handler</title>
</head>
<body>
	<h1>Protocol Handler - test: - Handler</h1>
	<h1>Cette page est affichée lorsque vous utilisez un lien de type : <pre>test:</pre></h1>
  	<blockquote>
  		<pre><?php if ( isset ( $_GET["value"] ) ) {
                       echo(urldecode($_GET["value"]));
                   } else {
                   	   echo("nothing");
                   }
             ?></pre>
  	</blockquote>
</body>
</html>

Des liens qui peuvent être utiles

Retourner au sommaire
Gravatar de Creasy
Mise en place d'un miroir Apt - Part 2 - Installation 
  • 0 vote
    vote oui
Par Creasy, le 20/04/2009 à 16:54.

Ce billet fait suite à celui-ci: Mise en place d'un miroir Apt - Part 1 - Contexte

"Bon super il a installé un mirroir pour ses serveurs et desktop et tout ça planqué derrière sa connexion ADSL. Pas super pratique pour les autres..." Mais c'est maintenant que ça devient intéressant ;-) : Comment installer son propre mirroir pour APT !

Premier point, ce n'est ni long (à configurer) ni compliqué. L'étape la plus longue étant la première synchronisation avec les dépôts externes selon leur taille. Mais pendant ce temps vous pourrez être loin de votre PC.

1. Installation d'apt-mirror

Rien de plus simple

sudo apt-get install apt-mirror

2. Configuration d'apt-mirror

Tout se passe dans "/etc/apt/mirror.list"

############# config ##################
#

set base_path    /path/to/apt/data

set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
set cleanscript $var_path/clean.sh
set defaultarch  i386
set nthreads     2
set _tilde 0

#
############# end config ##############

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
## Debian SQUEEZE alias TESTING - not used -
#deb    http://ftp.fr.debian.org/debian         testing         main contrib non-free

## Debian SID alias UNSTABLE
deb     http://ftp.fr.debian.org/debian         sid             main contrib non-free

## Debian LENNY current STABLE
deb     http://ftp.fr.debian.org/debian         stable          main contrib non-free

## Debian Security
deb     http://security.debian.org              lenny/updates   main contrib non-free

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
## Debian SQUEEZE alias TESTING - not used -
#deb-src        http://ftp.fr.debian.org/debian testing         main contrib non-free

## Debian SID alias UNSTABLE
#deb-src        http://ftp.fr.debian.org/debian sid             main contrib non-free

## Debian LENNY current STABLE
#deb-src        http://ftp.fr.debian.org/debian stable          main contrib non-free

## Debian Security
#deb-src        http://security.debian.org      lenny/updates   main contrib non-free


#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
## Last stable Ubuntu main, security and updates
deb http://fr.archive.ubuntu.com/ubuntu                 intrepid                main
deb http://fr.archive.ubuntu.com/ubuntu                 intrepid-security       main
deb http://fr.archive.ubuntu.com/ubuntu                 intrepid-updates        main

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
## Cleaning data
clean http://security.debian.org/
clean http://ftp.fr.debian.org/
clean http://fr.archive.ubuntu.com/ubuntu

3. Lancement de la synchronisation

Créer le dossier pour les données si ce n'est pas déjà fait :

sudo mkdir -p /path/to/apt/data

Et lancer la synchro :

sudo apt-mirror	

4. Configuration d'apache2

Cette partie est à adapter selon vos besoins et la configuration apache2 existante. Mais si vous êtes arrivé là, vous savez ce que vous faites non? Donc dans le fichier de configuration d'apache2 ajouter :

Alias /apt-debian-security /path/to/apt/data/mirror/security.debian.org
<Directory /path/to/apt/data/mirror/security.debian.org>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
</Directory>

Alias /apt-debian-fr /path/to/apt/data/mirror/ftp.fr.debian.org/debian
<Directory /path/to/apt/data/mirror/ftp.fr.debian.org/debian>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
</Directory>

Alias /apt-ubuntu-fr /path/to/apt/data/mirror/fr.archive.ubuntu.com/ubuntu
<Directory /path/to/apt/data/mirror/fr.archive.ubuntu.com/ubuntu>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
</Directory>

Et recharger la configuration d'apache2 :

sudo /etc/init.d/apache2 force-reload

5. Configuration des postes clients

Selon la distribution, il faut prendre ce qui vous intéresse dans ce qui suit et l'ajouter à "/etc/apt/sources.list" :

Pour Debian Lenny (stable) :
		deb http://host.domain.tld/apt-debian-fr lenny main contrib non-free
		deb http://host.domain.tld/apt-debian-security lenny/updates main contrib non-free
	
Pour Debian Sid (unstable) :
		deb http://host.domain.tld/apt-debian-fr sid main contrib non-free
		deb http://host.domain.tld/apt-debian-security lenny/updates main contrib non-free
	
Pour Ubuntu (dernière version stable) :
		deb http://host.domain.tld/apt-ubuntu-fr intrepid main
		deb http://host.domain.tld/apt-ubuntu-fr intrepid-security main
		deb http://host.domain.tld/apt-ubuntu-fr intrepid-updates main
	

Et enfin de faire une petite mise à jour de la liste des paquets disponibles :

sudo apt-get update
Retourner au sommaire