Catégories
Open-source Planet-libre Reseau Systeme

Migrer de Centreon 2.3.x vers 2.4.0

–===–

Ce billet invité a été rédigé par @xhark du très bon Blogmotion.
Je vous invite à consulter son blog qui fourmille d’information sur les systèmes et réseaux informatique.

–===–

Si comme moi vous aviez suivi le tutoriel d’installation de Centreon, vous devriez être en possession de Centreon 2.3.8. Ce guide a également été testé avec la version 2.3.9.

La version 2.4.0 de Centreon apporte de nombreux changements. Merethis, société éditrice de Centreon, a voulu se passer  NDOutil à cause de sa lourdeur et de son manque d’efficacité sur des parcs d’une grande taille. On découvre alors un nouveau module broker maison « Centreon-broker », plus efficace et modulaire.

Dans mon cas j’ai souhaité préserver NDOutil dans un premier temps et faire une migration classique. Si vous souhaitez plus d’information sur Centreon-Broker vous trouverez des informations sur la documentation et je vous conseille ce guide. Si vous installez Centreon from scratch, ce guide (ou la doc officielle).

Mise à jour de votre système

Si vous utilisez une distribution Debian Like comme Ubuntu, vérifiez que vos paquets sont à jour :

# apt-get update && apt-get upgrade

Passons à la suite.

Mise à jour de Centreon

Avant tout, faites un snapshot si vous utilisez VMWare ou une copie de votre système (image) pour revenir en arrière en cas de pépin. Puis faire une sauvegarde du fichier sudoers :

# cp /etc/sudoers /root/etc-sudoers.bak

Si vous utilisez un serveur proxy pour accéder à internet, c’est le moment de le définir pour PEAR qui risque d’aller chercher des modules absents (c’était mon cas avec Archive_7zip) :

# pear config-set http_proxy "http://proxy:8080"
config-set succeeded

Nous allons commencer par récupérer la dernière version de Centreon sur le site officiel. Pensez à remplacer le lien de téléchargement de Centreon (http://download.centreon.com/index.php?id=4264) ainsi que la version (centreon-2.4.0  au moment de la rédaction de ce billet) par la dernière version disponible.

Toutes les commandes sont effectuées avec le compte root (« su -« ) sur une distribution Ubuntu 12.04.2 LTS 32 bits.

cd /tmp/
wget http://download.centreon.com/centreon/centreon-2.4.0.tar.gz
cd centreon-2.4.0
./install.sh -u /etc/centreon

La trace complète est disponible ici, voyons les étapes importantes :

Do you want to use the last Centreon install parameters ?
[y/n], default to [y]:
> y

Using:  /etc/centreon/instCentCore.conf
/etc/centreon/instCentPlugins.conf
/etc/centreon/instCentStorage.conf
/etc/centreon/instCentWeb.conf

Do you want to install : Centreon Web Front
[y/n], default to [n]:
> y

Do you want to install : Centreon CentCore
[y/n], default to [n]:
> y

Do you want to install : Centreon Nagios Plugins
[y/n], default to [n]:
> y

Do you want to install : Centreon Snmp Traps process
[y/n], default to [n]:
> y

Where is your Centreon binaries directory
default to [/usr/local/centreon/bin]
>

Where is your Centreon data informations directory
default to [/usr/local/centreon/data]
>

Do you want me to create this directory ? [/usr/local/centreon/data]
[y/n], default to [n]:
> y

What is the Centreon group ? [centreon]
default to [centreon]
>

Do you want me to create this group ? [centreon]
[y/n], default to [n]:
> y

What is the Centreon user ? [centreon]
default to [centreon]
>

Do you want me to create this user ? [centreon]
[y/n], default to [n]:
> y

What is the Broker user ? (optional)
>

What is the Monitoring engine log directory ?
> /usr/local/nagios/var 

Where is your monitoring plugins (libexec) directory ?
default to [/usr/lib/nagios/plugins]
> /usr/local/nagios/libexec/

------------------------------------------------------------------------
        Configure Sudo
------------------------------------------------------------------------

What is the Monitoring engine init.d script ?
> /etc/init.d/nagios

Where is the configuration directory for broker module ?
> /usr/local/nagios/etc ou /etc/nagios3

Where is the init script for broker module daemon ?
> /etc/init.d/ndo2db
Your sudo has been configured previously

Do you want me to reconfigure your sudo ? (WARNING)
[y/n], default to [n]:
> y

Do you want to reload your Apache ?
[y/n], default to [n]:
> y

Do you want me to install CentCore init script ?
[y/n], default to [n]:
> y

Do you want me to install CentStorage run level ?
[y/n], default to [n]:
> y

------------------------------------------------------------------------
        Start CentCore Installation
------------------------------------------------------------------------

Do you want me to install CentCore init script ?
[y/n], default to [n]:
> y

Do you want me to install CentCore run level ?
[y/n], default to [n]:
> y

On peut maintenant ce rendre à l’URL suivante pour finaliser la mise à jour par l’interface Web:

http://<adresseIPserveur>/centreon/

REMARQUE: ne pas oublier le / à la fin…

centreon1

centreon3

centreon4

Vérification du fonctionnement

Si vous le pouvez, redémarrez votre serveur pour être sûr que les services démarrent correctement.

Pour vérifier que Centreon fonctionne correctement, exportez la configuration vers Nagios : Configuration > Monitoring Engines (anciennement appelé « nagios »). Cocher (en plus de celles déjà cochées) : Move Export Files et Restart Monitoring Engine.

centreon5

Si comme moi vous obtenez le message d’erreur :

Preparing environment… OK
Generating files… OK
Moving files…NOK

Il s’agit d’un problème de droit, bien que l’erreur ne soit pas très parlante… après de nombreuses prises de tête pas mal de caféine, voici la solution :

# chown www-data:nagios /usr/local/nagios/ -R

centreon6

A titre d’information, voici le contenu de mon fichier /etc/group :

nagios:x:1001:nagios,www-data,centreon
centreon:x:999:www-data,nagios
www-data:x:33:nagios

Vous verrez aussi que la page d’accueil de Centreon a pas mal évolué, avec des widgets mais c’est loin d’être intuitif car il faut tout configurer en dur. Pour l’instant, on s’en passera.

Si vous avez besoin d’aide je vous conseiller de lire ce billet sur l’utilisation de Centreon.

Enfin, je vous conseille d’installer Centreon Entreprise Server (CES) sur un serveur de test, il permet de tester toutes les configurations possibles (avec ou sans broker, NDO, poller standard, central, etc.). Le produit est libre en version Standard et il est basé sur CentOs 5.9 x64, des services supplémentaires payants sont disponibles pour les autres versions.

Catégories
Hardware Open-source Planet-libre raspberry

Raspberry Pi 512, déballage et installation

Certains buzz démarrent avec pas grand chose, d’autre sont issus de vraies bonnes idées. Le Raspberry Pi B 512 est de cette catégorie là. Proposer une carte mère pour moins de 30€ avec un CPU ARM à 700 Mhz, un GPU bi-core pour un affichage « full HD » et 512 Mo de RAM. J’ai donc décidé d’acheter le modèle Raspberry PI B 512 avec un jolie boitier transparent. Ce kit est en vente chez Kubii au prix de 50€ (au passage je tiens à signaler le très bon service client de Kubii. Service rapide et personnalisé. C’est suffisamment rare pour le signaler).

Passons au vis du sujet avec le déballage et l’installation de la bête.

Pour quoi faire ?

L’avantage d’un prix aussi bas est de pouvoir se lancer dans son achat sans avoir vraiment d’idée précise d’utilisation en tête. Après quelques jours, voici une liste de choses que l’on peut ou ne peut pas faire avec un Raspberry.

Le Raspberry Pi B 512 est parfaitement adapté pour:

  • Lire des fichiers audio et vidéo en haute définition (en utilisant OMXplayer le player spécifique du Raspberry Pi)
  • auto-héberger son site personnel (avec les limites d’usages au niveau du débit de la liaison montante de votre ligne Internet) avec une configuration basée sur LightHTTPd ou sur Nginx
  • héberger son serveur VPN pour accèder à son réseau personnel depuis l’exterieur
  • superviser votre réseau (jusqu’à une centaine de machines avec 10 services/machine sans aucun problème) avec une installation de Shinken et de Munin
  • créer une borne Airplay à moindre prix (autre article en Anglais sur le même sujet)
  • développer des applications de domotique (quelques exemples ici et encore )
  • … pleins d’autres idées qui peuvent vous passer par la tête (en voir 50 chez l’ami Korben)

Il peut être utilisé occasionnellement pour:

  • surfer sur Internet (mais il est vrai que l’on est habitué à un affichage rapide des pages, ce que l’on obtient pas avec le Raspberry Pi)
  • lire ces mails et faire un peu de bureautique simpliste

Passez votre chemin si vous voulez:

  • remplacer votre PC fixe ou mobile par un Raspberry Pi B 512…

Déballage

Commençons par la fin en montrant le résultat: mon Raspberry PI B 512 en action avec un écran, un clavier et une souris.

Raspberry PI 512

Regardons de plus prêt le coeur du système:

 

Installation

Choisir son système d’exploitation

Le Raspberry Pi est compatible avec les systèmes d’exploitations GNU/Linux. Certaines distributions se sont spécialisées pour ce matériel spécifique. La liste des systèmes d’exploitations compatibles se trouve sur cette page du site officiel. Mon choix c’est porté vers la Raspbian « Wheezy » qui est une distribution dérivée de Debian que je manipule tous les jours. Il existe également une autre distribution basée sur Arch Linux qui offre des performances équivalentes (voir l’article de P3ter sur le sujet).

Le système d’exploitation doit être stocké sur une carte SD à insérer dans le lecteur du Raspberry PI. Pour mettre le système Raspbian sur la carte SD j’ai utilisé mon PC portable sous Ubuntu 12.10 qui dispose d’un lecteur intégré de carte SD. La procédure suivante est donc à adapter selon votre matériel.

On commence donc par télécharger l’image de la dernière version de Raspbian puis de vérifier avec le logiciel sha1sum que l’archive est complète.

$ wget http://files.velocix.com/c1410/images/raspbian/2013-02-09-wheezy-raspbian/2013-02-09-wheezy-raspbian.zip

$ sha1sum 2013-02-09-wheezy-raspbian.zip 
b4375dc9d140e6e48e0406f96dead3601fac6c81  2013-02-09-wheezy-raspbian.zip

La valeur barbare donnée par la commande sha1sum est à comparer avec celle de référence disponible sur la page de téléchargement. Si elles différent alors il ne vous reste plus qu’à recommencer le téléchargement.

On peut ensuite décompresser le fichier pour obtenir l’image disque (2013-02-09-wheezy-raspbian.img dans mon cas):

$ unzip 2013-02-09-wheezy-raspbian.zip
inflating: 2013-02-09-wheezy-raspbian.img

Graver son système sur la carte SD (source: eLinux)

On commence par insérer la carte dans son lecteur (celui de mon PC portable dans mon cas), puis on utilise la commande df -h pour obtenir le point de montage (/dev/sdb1 dans mon cas) correspondant à la carte SD. Attention de bien utiliser le point de montage pour éviter de formater votre disque système !!!:

capture_036

Une fois le point de montage identifié, il faut saisir les commande suivante (en remplaçant /dev/sdb1 par votre point de montage):

sudo dd bs=4M if=./2013-02-09-wheezy-raspbian.img of=/dev/sdb

Quelques explications sur cette dernière commande:

  • elle doit être lancée avec les droits root (d’ou l’utilisation de sudo)
  • if donne l’emplacement de l’image de Raspbian « Wheezy »
  • of donne le point de montage racine (égal à votre point de montage sans le nombre finale soir /dev/sdb dans mon cas)
  • l’exécution va prendre un peu de temps…

Très bien, votre carte contenant l’OS Raspbian « Wheezy » est prête à être utilisée !

Insérer votre carte dans le lecteur SD du Raspberry PI, brancher un clavier et l’alimentation micro USB et c’est parti !

capture_048

Configuration initiale du système

Au premier démarrage, vous allez avoir droit au lancement automatique de l’utilitaire de configuration « raspi-config » qu’il est possible de rappeler par la suite en saisissant la commande suivante dans un terminal:

sudo raspi-config

Raspi-config se présente sous la forme suivante:

capture_040

Les différentes fonctions permettent de:

  • expand_rootfs: étendre la partition principale à la taille maximale de la carte SD (par exemple si vous avez une carte SD de 16 Go et que vous n’utilisez pas cette fonction, alors vous resterez avec une partition principale de 2 Go)
  • overscan: force l’affichage de marge pour s’adapter à des écrans 16/9 ou supérieur.
  • configurer: le clavier (configure_keyboard), le mot de passe par défaut (raspberry) de l’utilisateur par défaut (pi) (change_pass) , votre lieu géographique (change_locale) et le temps (change_timezone)
  • overclocking: comme Raspberry est une société intelligente, elle autorise l’overclocking de son matériel sans perte de la garantie (mais avec une durée de votre matériel qui risque de diminuer). Fonction à activer si vous voulez utilisez le Raspberry en mode graphique (comme client léger) ou tout autre besoin consommateur de CPU. On a le choix d’overcloking suivant:

capture_041

  • memory-split: pour définir la quantité de mémoire vive dédiée au GPU (64 Mo par défaut).
  • ssh: permet de définir si le serveur SSH doit être lancé par défaut.
  • boot_behavor: choisir si on veut démarrer le boitier en mode texte (utilisation serveur) ou graphique (client léger avec l’environnement OpenBoxLXDE).
  • update: qui est en fait un raccourci vers la commande « apt-get update && apt-get upgrade » et ainsi mettre à jour votre système (qui doit être connecté à Internet).

Premières impressions

Comme lors de  mon test du Linutop 4,  la première impression quand on utilise le Raspberry Pi avec son interface graphique LXDE, est un retour en arrière de quelques années ou il fallait attendre quelques secondes avant l’affichage des fenêtres. La lecture vidéo HD est par contre bleufante (voir le paragraphe en de billet), on voit que le GPU est parfaitement exploité.

Une fois dans un terminal, la machine réagi bien. Dans un très appréciable silence total, on utilise un système GNU/Linux minimaliste mais réactif.

Quelques tests

CPU, GPU et RAM

Sur ces aspects là, rien de notable, on est dans la norme avec ce type de matériel. Si vous voulez des chiffres pour comparer avec d’autres machines, je vous conseille la lecture de cette page Wiki chez eLinux.

Interface réseau

L’interface Ethernet est à la norme FastEthernet (soit un débit théorique maximum de 100 Mbps). Comme le Raspberry Pi n’a pas une capacité de stockage importante, cette vitesse pourra être pénalisante lors de l’accès à vos données stockées sur un NAS ou une autre machine.

Un rapide test avec Iperf montre un débit maximum en TCP de 90 Mbps en entrée et 65 Mbps en sortie. On a donc de bonnes performances pour une interface FastEthernet, en espérant une évolution en Giga pour la prochaine version de Raspberry Pi.

Multimédia

Là ou le Raspberry Pi est bluffant c’est sur les lectures audio et vidéo. En effet, avec les efforts pour adapter XBMC sur ce matériel on dispose de logiciel permettant sans aucun problème de lire des vidéos H.264 full HD.

Si vous ne souhaitez pas passer par XBMC, vous pouvez utiliser OMXPlayer de la manière suivante:

omxplayer -o hdmi <nondufichiervideo>

Il est même possible, pour certains besoins spécifiques d’acheter, pour des sommes assez modiques, des licences pour des codecs MPEG-2 ou VC-1.

Il lui manque quoi ?

Personnellement, je serais assez intéressé par une version luxe (à 60€ max faut pas déconner non plus) intégrant les choses suivantes:

  • une interface Gigabit Ethernet, pour avoir un connectivité haut débit vers mon NAS
  • une sortie audio numérique pour connecter le Raspberry Pi à mon DAC (iPhone + Airplay + Shairport + Raspberry Pi + DAC + Ampli = Bonheur)
  • une troisième interface USB, car les deux premières sont occupées par mon clavier et ma souris et je ne sais pas ou mettre ma clés USB 🙂

Conclusion

Nous voici arrivé au bout de ce premier article sur le Raspberry Pi, d’autres viendront vites, plus spécialisés. Je dois avoué avoir été agréablement surpris pas les capacités et le potentiel de cette petite machine. Le futur est là, devant nos yeux.

Et vous ? Avez vous craqués ? Si oui pour quelle utilisation ?

Retrouvez mes articles sur l’écosystème Raspberry Pi en cliquant ici.

Catégories
Developpement Open-source Planet-libre Systeme

Package d’installation pour Glances sous Windows

Grâce au travail de Nicolas Bourges, Glances dispose désormais d’un installeur pour sa version Windows. Vous pouvez donc installer Glances 1.6.1 en version 32 ou 64 bits sans avoir à installer les pré-requis (Python, librairie PsUtil…) puisque tout est « packagé » dans le binaire.

On commence par télécharger le programme d’installation:

download
Télécharger Glances 1.6.1 en version 64 bits
(ou en version 32 bits)

MD5sum

glances-1.6.0-x64.exe                         a347ec5097d6d4d5039c7233872757a8

glances-1.6.0-x86.exe                         13d5be664599f80152f8f1ae47400576

Puis on se laisse guider dans le wizard d’installation qui va mettre, par défaut, le binaire Glances.exe dans le répertoire C:\Program Files\Glances puis créer un raccourci sur votre bureau.

En cliquant sur ce raccourci, Glances va se lancer automatiquement en mode serveur. Pour ajouter d’autres paramètres (comme le mot de passe) il suffit de modifier ce raccourci pour y ajouter les options voulues (par exemple -P <motdepasse>).

Il ne vous reste plus qu’à revenir sur un vrai OS (ndlr: Nicolargo, tu me copieras 100 fois « Je ne trollerai plus. ») puis à lancer la commande:

glances -c <addresse IP machine Windows>

glancesonwin7

Et hop, vous pouvez maintenant surveiller vos machines Windows en une ligne de commande !

Catégories
Blog Developpement Open-source Planet-libre Web Webdesign

Bootstrap pas à pas

7/10/2013 Update: billet mis à jour pour la version 3.0 de Bootstrap

Avec la généralisation des technologies JS, CSS3 et HTML5, il est aujourd’hui possible de faire des sites Web qui n’ont rien à envier aux interfaces des logiciels que l’on peut trouver sur nos machines. Le revers de la médaille est une complexité croissante qui nécessite de faire appel à des professionnels . Quand vous devez faire un site personnel ou pour une association, il est difficile, à moins de s’appeler Cresus, de passer par un Web designer.

Heureusement des frameworks libres permettent avec un minimum d’investissement et de connaissances de bâtir des sites Web dans les règles de l’art. Nous allons dans ce billet parler du plus médiatique d’entre eux: Bootstrap. L’idée n’est pas de traduire la documentation officielle qui est par ailleurs très bien faite, mais de partager avec-vous mes méthodes que je suis en train d’utiliser pour développer le prochain thème du Blog de Nicolargo qui sera, vous l’avez compris largement basé sur Bootstrap.

capture_037

footprint Créer l’arborescence de son projet

Nous allons commencer par créer l’arborescence générale de notre site qui sera stocké, pour illustrer ce billet, dans le répertoire ~/projet de notre disque dur. On y télécharge&&décompresse la dernière version stable de Bootstrap.

mkdir ~/projet
cd ~/projet

wget https://github.com/twbs/bootstrap/releases/download/v3.0.0/bootstrap-3.0.0-dist.zip
unzip bootstrap-3.0.0-dist.zip
rm bootstrap-3.0.0-dist.zip
rm -rf bootstrap 
mv dist bootstrap

Note: Contrairement à la plupart des tutos que l’on peut trouver sur le net, je préfère conserver le répertoire bootstrap intact et utiliser d’autres répertoires pour stocker mes configurations spécifiques. Ainsi, la mise à jour de Bootstrap n’aura aucun impact sur mon site.

En plus de Bootstrap, j’ajoute également la dernière version du projet Font Awesome qui met à notre disposition un nombre important et varié d’icônes jusqu’à une résolution de 280 pixels.

capture_032

cd ~/projet
git clone git://github.com/FortAwesome/Font-Awesome.git

Les données spécifiques à notre site seront stockées dans l’arborescence suivante (à adapter à vos besoins)

cd ~/projet
mkdir css img js
touch index.html css/style.css

 

On peut ensuite commencer à éditer la premier page de son site en utilisant son éditeur de texte de prédilection (par exemple avec Geany):

geany index.html

Voici le template que j’utilise:

<!DOCTYPE html>
<html>
    <head>
        <title>Bootstrap arena</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!-- Bootstrap -->
        <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
        <!-- Font-Awesome -->
        <link href="Font-Awesome/css/font-awesome.min.css" rel="stylesheet">
        <!-- My style -->
        <link href="css/style.css" rel="stylesheet" media="screen">
    </head>
    <body>
        <h1>Hello Bootstrap !</h1>
    </body>
    <footer>
        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="bootstrap/js/bootstrap.min.js"></script>
    </footer>
</html>

Jusque là rien d’exceptionnel… Vous devriez voir s’afficher « Hello Bootstrap » en chargeant votre page dans un navigateur HTML. C’est à partir de maintenant que l’on va profiter de la puissance de Bootstrap !

footprint Définir vos grilles

Par défaut, Bootstrap utilise un système avec une grille de 12 colonnes (voir le site 960.gs pour une explication de cette dernière phrase). Votre fenêtre de navigateur est ainsi divisée en 12 sections de tailles équivalentes.  Vous pouvez l’adapter à votre besoin en gardant ce chiffre à l’esprit. Par exemple pour créer une page Web avec 2 colonnes, il suffit d’ajouter les lignes suivantes entre les balises <body> … </body> de votre fichier HTML.

<div class="container">
        <div class="row">
            <div class="col-md-8">Article</div>
            <div class="col-md-4">Sidebar</div> 
        </div> 
</div>

Ce qui donne une première colonne de taille 8/12 de la taille de votre fenêtre et une autre de 4/12:

capture_026

On utilise ici une disposition fluide (classe row) qui permet d’adapter dynamique la largeur de vos deux colonnes en fonctions de la taille de votre écran.

Bootstrap génère par défaut des espaces entre deux colonnes (environ 20 pixels pour une dic container). Il est  possible de générer des espaces supplémentaire avant ou entre vos colonnes en utilisant le paramètre de classe offset. Par exemple pour créer un espace de taille 1/12 d’écran entre vos deux colonnes, il suffit de modifier votre code de la manière suivante:

    <div class="container">
       <div class="row">
            <div class="col-md-8">Article</div>
            <div class="col-md-offset-1 col-md-3">Sidebar</div>
       </div>
    </div>

On obtient:

capture_027

Noter bien que la somme des col-md-8 + col-md-offset-1 + col-md-3 est toujours égale à 12. Pour être tout à fait précis, la somme doit être égale à la taille de votre grille dans lequel votre balise row est imbriquée. Comme nous l’avons vu la grille par défaut à une valeur de 12. Mais il est possible d’utiliser une autre valeur en définissant une div chapeau.  Par exemple pour définir une grille de 6 et y créer deux colonnes de 4 et de 2, on doit utiliser le code suivant:

        <div class="row">
            <div class="col-md-6"> 
                <div class="col-md-4">Article</div>
                <div class="col-md-2">Sidebar</div>
            </div>
        </div>

On obtient alors:

capture_028

footprint « Responsive design » en une ligne

Comme vous pouvez le voir il est possible d’imbriquer des grilles dans d’autres et ainsi découper facilement sa page sans se soucier des redimensionnements de fenêtres. En effet, tout le « responsive design » est géré par Bootstrap. Votre site sera donc automatiquement compatible avec les tablettes et les smartphones !

Le tableau suivant donne la liste des tags que l’on peut utiliser pour rendre son site compatible avec les différents supports:

 

capture_132

Comment lire ce tableau ? C’est relativement simple. Prenons un exemple. Nous voulons dans notre premier exemple avec deux colonnes (article et sidebar) cacher automatiquement la sidebar quand notre site est consulté depuis un smartphone. Nous allons pour cela afficher les classes .hidden-sm et .hidden-xs de la manière suivante:

    <div class="container">
        <div class="row">
            <div class="col-md-8">Article</div>
            <div class="col-md-4 hidden-sm hidden-xs">Sidebar</div>
        </div>
    </div>

Affichage sur un PC ou une tablette (ou un écran > à 767 pixels):

capture_030

Affichage sur un smartphone (ou un écran de largeur <= à 767 pixels):

capture_031

Magique non ?

footprint Passons aux contenus de vos pages

Nous avons maintenant une belle grille « responsive » qu’il va falloir remplir.

En plus des éléments de bases (texte, images, icônes, formulaire), Bootstrap propose des composants avancées (barre de navigation, menu, aperçu d’image, pagination, barre de progression) mais également un système de plugins avec des composants dynamiques en JavaScript (carrousel, popup, menu en accordéon, formulaire dynamique…). Je vous invite à consulter les liens données dans ce chapitre. Des idées pour votre prochain site viendront d’elles même.

Sources utilisées pour rédiger ce billet: