freebsd

La gestion des paquets

Ports

Télécharger un snapshot

1
portsnap fetch

Première exécution: population de /usr/ports

1
portsnap extract

Faire une maj

1
portsnap upgrade

Paquets pré compilé

1
pkg_add -r <nom_du_paquet>

Nettoyer la conf

1
make rmconfig

Partitions

Principe freeBSD:
Sur freeBSD: d’abord on crée des partitions (slices type opensolaris), puis on crée des FS dans cette partition.
/dev/ad0 -> 1er disque IDE (/dev/hda)
/dev/ad0s1 -> 1ére slice
/dev/ad0s1a -> 1er partition de la slice ad0s1

ruby-on-rails

Les générateurs

Générer un model:

1
$ rails generate model <Mon_model> [champs]
1
$ rails generate model User name:string email:string

Le modèle commence avec une majuscule

Génerer une migration

Par exemple: ajouter un champ password au model user

1
$ rails generate migration add_password_to_users encrypted_password:string

Générer un contrôleur

1
$ rails generate controller <Moncontroleur> [actions]

Le contrôleur commence avec une majuscule et se termine avec avec un pluriel
ex:

1
$ rails generate controller Pages home contact

Les tests d’intégration

1
$ rails generate integration_test layout_links

Le scaffold

Permet de générer modèle vue, contrôleur et le reste de l’architecture REST pour une ressource spécifiée:

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
$ rails generate scaffold User name:string email:string
invoke active_record
create db/migrate/20100615004000_create_users.rb
create app/models/user.rb
invoke test_unit
create test/unit/user_test.rb
create test/fixtures/users.yml
route resources :users
invoke scaffold_controller
create app/controllers/users_controller.rb
invoke erb
create app/views/users
create app/views/users/index.html.erb
create app/views/users/edit.html.erb
create app/views/users/show.html.erb
create app/views/users/new.html.erb
create app/views/users/_form.html.erb
invoke test_unit
create test/functional/users_controller_test.rb
invoke helper
create app/helpers/users_helper.rb
invoke test_unit
create test/unit/helpers/users_helper_test.rb
invoke stylesheets
create public/stylesheets/scaffold.css

Test

Initialiser rspec

Déclarer les gem de rspec

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
source 'http://rubygems.org'

gem 'rails', '3.0.1'
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'

group :development do
gem 'rspec-rails', '2.0.1'
end

group :test do
gem 'rspec', '2.0.1'
gem 'webrat', '0.7.1'
end
``
Puis on initialise les fichiers
```bash
rails generate rspec:install

EN plus de rspec et rspec-rails, voir pour autotest, spork et les [http://automate-everything.com/2009/08/gnome-and-autospec-notifications/|notifications]

Ne pas oublier d’initialiser la base de test:

1
rake db:test:prepare

Utiliser faker

Le gem faker permet de générer une database de test

1
2
3
group :development do
gem 'faker', '0.3.1'
end

Mettre à jour lib/tasks/sample_data.rake
Remplir la DB:

1
rake db:populate

jquery

Sélecteurs

Liste des sélecteurs

Sélecteur CSS jQuery Description
Nom de balise p $(‘p’) Sélectionne tous les paragraphes
Identifiant #mon_id $(‘#mon_id’) Sélectionne l’unique élement avec l’id mon_id
Classe .une_classe $(‘.une_classe’) Sélectionne tous les élements ayant la classe une_classe
Attribut $(‘img[alt]’) Sélectionne toutes les balises img ayant un attribut alt
Attribut $(‘a[href^=mailto:]’) Sélectionne toutes les balises a ayant un attribut href commencant par mailto:
Attribut $(‘a[href$=.pdf]’) Sélectionne toutes les balises a ayant un attribut href se terminant par .pdf
Attribut $(‘a[href*=toto]’) Sélectionne toutes les balises a ayant un attribut href contenant toto
Pseudo classe $(‘div.horiz:eq(1)’) Sélectionne le second élement div ayant la classe horiz
Pseudo classe $(‘div:first-child’) Sélectionne le premiers enfants de chaque div
Pseudo classe $(‘div:odd’) Sélectionne les élements impaires enfants de chaque div

Fonctions de sélection

  • .filter() -> ajoute un filtre sur une sélection. Ce filtre peut être une classe, une regex, ou une fonction.
  • .next() -> Sélectionne le frêre suivant
  • .nextAll() -> Sélectionne tous les frêres
  • .andSelf() -> Utilisé aprés next ou nextall, permet d’inclure l’élément d’origine
  • .parent() -> parent de l’élément
  • .children() -> tous les enfants de l’élément
  • .end()
  • .find()

Evénements

  • méthodes abrégées:
blur error keyup mouseout scroll
change focus load mouseover select
click keydown mousedown mouseup submit
dblclick keypress mousemove resize unload
  • Méthodes d’association des événements:

    • .bind()
    • .toggle() -> permet de définir deux fonctions: une lors éxécutée lors du premier click sur un élément. L’autre lors du second click
    • .hover() -> similaire à toggle, mais pour les survol
    • .unbind()
    • .trigger()
  • L’objet ‘event’
    On peut utiliser l’objet ‘event’ directement dans une fonction. Cela permet notamment:

Effets CSS

  • .css(): récupére une propriété CSS. ex: $elmt.css(‘fontSize’)
  • .hide() / .show() :cache/affiche l’élément. Cette méthode peut prendre en argument ‘slow’, ‘normal’, ‘fast’
  • .fadeIn() / .fadeOut() : idem hide/show, mais change l’opacité
  • .toggle(): hide/show
  • .slideToggle(): fadeIn/fadeOut
  • .animate(): permet de définir une animation personnalisée

Manipulation du DOM

  • Modifier les attributs:
    • Ajouter une classe
      1
      2
      3
      $(document).ready(function(){
      $('#mon_id > li').addClass('new_class');
      });
    • Switcher une classe:
      1
      $('#monID').toggleClass('maclasse')
    • Supprimer une classe: removeClass()
    • Ajouter/supprimer un attribut: .attr()/removeAttr()

git

Présentation

Pourquoi GIT?

Pourquoi pas? Git est un logiciel de gestion de versions décentralisé (DVCS). Il permet d’historiser les versions de fichiers, en permettant comparaison, retour arrière, … Plus besoin de faire des copier-coller de son projet lorsque que l’on commence des tests, pour sauvegarder une ancienne version, … Git est la pour ca

Différence avec Subversion

La différence principale avec subversion, est que GIT est décentralisé. C’est à dire qu’il n’y as pas de dépôt central. Conséquence: il est possible d’avoir plusieurs dépôt de référence, et il n’est pas nécessaire d’avoir un accès au dépôt central pour historiser ses révisions. Il est également nécessaire de communiquer avec les autres membres du projet, chacun pouvant travailler avec son propre dépôt ….

Gestion des dépôts

En “local”

Initialiser un nouveau dépôt (création du .git)

1
git init

A distance

  • Ajouter un dépot
1
git remote add <mondepot> <user>@<host>:<chemin>.git
  • Cloner un dépot
1
git clone <user>@<host>:<mondepot>.git
  • Rafraichir le dépot local
1
git fetch <mondepot>
  • Récupèrer toutes les modif d’une branche:
1
git pull <depot distant> <branche distante>
  • Écrire ses modifications sur le dépot
1
git push <mondepot> <la branche a push>

Gestion des fichiers

  • Supprimer un fichier/répertoire
1
git rm -r spec/views
  • Ajouter les fichiers du répertoire courant
1
git add .
  • Voir les différences avec la version du dépot:
1
git status
  • Enregistrer ses modifications
    le “commit” est la sauvegarde dans le dépôt des différents fichiers modifiés. C’est cette opération qui crée la nouvelle révision.
1
git commit -m "commit inital"
  • Modifier un commit
1
2
3
git commit -m 'validation initiale'
git add fichier_oublie
git commit --amend

Revenir en arrière

  • Voir les différences entre deux versions:
1
git diff <commit hash> <filename>
  • Modifier un commit
1
git commit --ammend HEAD
  • restaurer un ancien fichier
1
git revert <commit hash> <filename>
  • Annuler les modifications non commité:
1
git reset --hard HEAD
  • Retourner à l’état d’un commit donné:
1
git reset --hard <tag/branch/commit id>

Cette methode détruit les commit “plus récents”

  • Annuler un commit
1
git revert <HEAD/tag/branch/commit id>

Crée un patch faisant l’inverse de celui du commit spécifié

  • “Voyager dans le temps”

A slightly less scary way to do this than the git reset –hard method is to create a new branch. Let’s assume that you’re on the master branch and the commit you want to go back to is c2e7af2b51.

Rename your current master branch:

git branch -m crazyexperiment

Check out your good commit:

git checkout c2e7af2b51

Make your new master branch here:

git checkout -b master

Now you still have your crazy experiment around if you want to look at it later, but your master branch is back at your last known good point, ready to be added to. If you really want to throw away your experiment, you can use:

git branch -D crazyexperiment

Gestion des branches et tags

Les branches

Les branches permettent de sauvegarder des modifications “ailleurs” que dans les fichiers principaux. Cela signifie par exemple, que nous pouvons avoir une branche principale qui n’évolue que pour des patch de sécurité, et une branche de dev ou se font l’ajout des nouvel les fonctions. Ces nouvelles fonctions n’entreront dans la branche principale que l’ors du “merge”.

  • Liste des branches:
1
git branch
  • Créer une branche
1
git branch dev

ou pour créer et switcher:

1
git checkout -b dev
  • Changer de branche
1
git checkout dev
  • Insérer les modif d’une branche dans une autre

La commande “merge” permet d’insérer les modifications dans branche dans une autre branche

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
\#git checkout main
\#git merge dev
Updating a2fffda..9102b8d
Fast-forward
.rspec | 1 +
app/controllers/pages_controller.rb | 6 ++++++
app/views/layouts/application.html.erb | 19 ++++++++-----------
app/views/pages/about.html.erb | 7 +++++++
app/views/pages/contact.html.erb | 7 +++++--
app/views/pages/home.html.erb | 8 ++++++--
autotest/discover.rb | 2 ++
config/routes.rb | 2 ++
spec/controllers/pages_controller_spec.rb | 22 ++++++++++++++++++++++
spec/helpers/pages_helper_spec.rb | 15 ---------------
spec/spec_helper.rb | 27 +++++++++++++++++++++++++++
spec/views/pages/contact.html.erb_spec.rb | 5 -----
spec/views/pages/home.html.erb_spec.rb | 5 -----
13 files changed, 86 insertions(+), 40 deletions(-)
create mode 100644 .rspec
create mode 100644 app/views/pages/about.html.erb
create mode 100644 autotest/discover.rb
delete mode 100644 spec/helpers/pages_helper_spec.rb
create mode 100644 spec/spec_helper.rb
delete mode 100644 spec/views/pages/contact.html.erb_spec.rb
delete mode 100644 spec/views/pages/home.html.erb_spec.rb
  • Supprimer une branche:

Quant une branche a terminée son cycle, il peut être necessaire de la supprimer

1
git branch -d <branche>

Les tags

Les tags doivent être vu comme un “point dans temps”, c’est à dire, une révision déclarée plus importante que les autres et que l’on nommerat v1.0, v1.1, 2010.09, …

##Configuration

Mettre en cache les credentials

1
git config --global credential.helper 'cache --timeout 36000'

Tools

*Git prompt

1
2
source /usr/share/git-core/contrib/completion/git-prompt.sh
export PS1='\u@\h:\w$(__git_ps1) \$ '
  • Activer la coloration auto
1
git config --global color.ui auto

Liens

http://gitref.org/index.html: très complet. Présente et explique les différentes commandes
http://railstutorial.org/book: un tuto sur Rails en fait, mais la gestion d’un projet perso via Git y est bien expliqué.
https://git.wiki.kernel.org/index.php/Main_Page

AIX

Network

Infos sur la carte réseau en1

entstat -d en1

Donne entre autre le mode de fonctionnement de la carte (100Mbp, autoneg, …) et l”état du lien.
Pour modifier les infos retournés par cette commande il faut utiliser smit devices -> communication

lsattr -El ent0
lsattr -Rl ent0 -a media_speed
chdev -l ent0 -a media_speed=100_Full_Duplex
entstat -d ent0
chdev -l ent0 -a media_speed=1000_Full_Duplex
entstat -d ent0
lscfg -vl ent0
ps -eaf|grep -i nim
df -k
lsattr -Rl ent0 -a media_speed
chdev -l ent0 -a media_speed=Auto_Negotiation
entstat -d ent0

LVMAIX

Créer un FS

mklv -t jfs2 -y $MONLV applivg 1
crfs -v jfs2 -d $MONLV -m $MONFS -A yes -p rw
mkdir -p $MONFS
mount $MONFS
chlv -x 1200 $MONLV
chfs -a size=$MATAILLE $MONFS

Création/suppression d’un VG:

Création
Mettre en place le mirroring
1 mirroir pour rootvg:

root@localhost:/home/secadm # mirrorvg -s -c 2 rootvg
0516-1804 chvg: The quorum change takes effect immediately.
0516-1126 mirrorvg: rootvg successfully mirrored, user should perform
bosboot of system to initialize boot records. Then, user must modify
bootlist to include: hdisk2 hdisk0.
root@localhost:/home/secadm # syncvg -v rootvg

modification de la bootlist

root@localhost:/home/secadm # bootlist -m normal hdisk0 hdisk5
root@localhost:/home/secadm # bootlist -om normal
hdisk0 blv=hd5
hdisk5

Rendre le second disque bootable

root@localhost:/legato #bosboot -ad /dev/hdisk2

bosboot: Boot image is 38944 512 byte blocks.
root@localhost:/legato #bootlist -om normal
hdisk0 blv=hd5
hdisk2 blv=hd5

Création un FS

Création du LV
    Sur rootVG: création avec 2 copies

    [localhost]/root#mklv -t jfs2 -y lvctmagt621 -c 2 rootvg 1 hdisk0 hdisk2
    lvctmagt621

    Sur disque de baie

    mklv -t jfs2 –y lv_name monvg 1

Création du FS

crfs –v jfs2 –d lvname –m /mountpoint –A yes –p rw 

Mise à la bonne taille du FS

Supprimer un FS

Supprimer un FS

rmfs monfs

*supprimer un lv

rmlv monlv

le rmfs fait le rmlv
Agrandissement d’un FS

Recherche du LV:

df -k
/dev/monlv ……. monfs

infos sur le lv

lslv monlv

donne des infos sur le nombre de PP allouables, taille des PP, et VG associé

infos sur le VG

lsvg monvg

rajouter des PP allouables

chlv -x nv_nb_total_de_PP monlv

** Le nombre de PP rajouté doit être inférieur au nombre de PP libres dans le VG
** Les PP alouables de sont pas alloué (c’est juste un nombre max)

ajout d'espace disque à un FS:

chfs -a size=+20G monFS

chfs -a size=+$(( 2048*10000 )) monFS

Pour AIX<5, la notation G/M n’existe pas -> il faut indiquer le nombre de bloc de 512ko

Diminution d’un FS

Vérifier la version d'AIX:

5300-05

Ne pas le faire si version < à 5.3TL5 -> bug

Defragmenter le FS

div class=”code”>#defragfs /monfs

Réduction du FS

chfs -a size=-400M /monfs

Cette opération se fait à chaud! (pas d’arrêt des applications, pas de umount

Changer un disque dans un VG

Ajouter un disque au VG

extendvg rootvg hdisk6

rootvg: vg à etendre
hdisk6: disques à rajouter au VG

Rajouter 1 miroir au VG

mirorvg -s -c 3 rootvg hdisk6

3: nombre de copie (par def rootvg a 2 copies)

Synchroniser les copies

syncvg -v rootvg

Enlever un disque

unmirrorvg -c 2 rootvg hdisk1

hdisk 1: disque miroir à supprimer

Enlever le disque du VG
reducevg rootvg hdisk1
Migration d’un LV
Démontage du FS
umount /users/notes01

Copie du LV
cplv -y notes01tp -v z04uvg_not01 notes01lv

Modification du FS
chfs -a dev=/dev/notes01tp /users/notes01
chfs -a log=/dev/logdata01 /users/notes01

Suppression de l’ancien LV (ne pas supprimer le FS!)
rmlv -f notes01lv

On renome ls nouveau LV
chlv -n notes01lv notes01tp

On remonte le FS
mount /users/notes01

Packages

voir infos sur un paquet
lslpp -l

Supprimer un package:
installp -u “nom du package”

Voir les incohérences/problèmes de dépendances:
lppchk -mv3

Hardware

Disques dur

lsdev -Ccdisk

CPU

lsdev -C -c processor

Cartes fibres:

lsdev -Cc adapter|grep fics
lsdev -Cctape
lscfg -vl fcs2
fcstat fcs0

lister la HMC

lsrsrc IBM.ManagementServer