====== Solaris 10 ======
===== Administration Niveau 2 =====
==== Journee 1 ====
=== Partitionnement des disques ===
format
fdisk
partition
print
label
=== Utilisation de disk suit ===
ls /dev/dsk
metadb -c3 -f -a c0d0s6 c0d0s7 c1d0s6 c1d0s7
metadb -i // pour voir les meta db
// Ne pas toucher: c'est garde ici
cat /kernel/drv/md.conf
=== Ajout de disque ===
a chaque ajout de disque, il faut ajouter une slice avec des meta dbs
=== Resultat de partitionnement ===
Resultat de format->partition->print sur le disque externe c1d0
Current partition table (original):
Total disk cylinders available: 2431 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 unassigned wm 3 - 28 203.95MB (26/0/0) 417690
1 unassigned wm 29 - 54 203.95MB (26/0/0) 417690
2 backup wu 0 - 2430 18.62GB (2431/0/0) 39054015
3 unassigned wm 55 - 80 203.95MB (26/0/0) 417690
4 unassigned wm 81 - 106 203.95MB (26/0/0) 417690
5 unassigned wm 107 - 132 203.95MB (26/0/0) 417690
6 unassigned wm 133 - 158 203.95MB (26/0/0) 417690
7 unassigned wm 138 - 142 39.22MB (5/0/0) 80325
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 alternates wm 1 - 2 15.69MB (2/0/0) 32130
=== Cas de / ===
Attention on ne peut pas agrandir /
=== Slice ===
Passage de c1d0s5 en slice
vi /etc/lvm/md.tab
d39 1 1 c1d0s5
metainit d39
metastat
d39: Concat/Stripe
Size: 417690 blocks (203 MB)
Stripe 0:
Device Start Block Dbase Reloc
c1d0s5 0 No Yes
Device Relocation Information:
Device Reloc Device ID
c1d0 Yes id1,cmdk@AST320414A=7EC0G1JQ
six# metastat -p
d39 1 1 c1d0s5
six# metastat -c
d39 s 203MB c1d0s5
=== d39 ===
six# newfs /dev/md/rdsk/d39
/dev/md/rdsk/d39: Unable to find Media type. Proceeding with system determined parameters.
newfs: construct a new file system /dev/md/rdsk/d39: (y/n)? y
Warning: 5670 sector(s) in last cylinder unallocated
/dev/md/rdsk/d39: 417690 sectors in 28 cylinders of 240 tracks, 63 sectors
204.0MB in 6 cyl groups (5 c/g, 36.91MB/g, 17536 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 75696, 151360, 227024, 302688, 378352,
six# mkdir /san.d39
six# mount /dev/md/dsk/d39 /san.d39
six# echo ok > /san.d39/test.txt
six# vi /etc/vfstab // Pour que ce soit accessible apres un reboot
/dev/md/dsk/d39 /dev/md/dsk/d39 /san.d39 ufs 3 yes logging
// On fait le menage
vi /etc/vfstab
umount /san.d39
metaclear d39
vi /etc/lvm/md.tab
=== Passage de c1d0s5 et c1d0s4 en concatenes (3.3) ===
metainit d30 2 1 c1d0s5 1 c1d0s6
six# metainit d30 2 1 c1d0s5 1 c1d0s6
d30: Concat/Stripe is setup
six# metastat -p
d30 2 1 c1d0s5 \
1 c1d0s6
six# metastat -c
d30 s 392MB c1d0s5 c1d0s6
six# metastat
d30: Concat/Stripe
Size: 803250 blocks (392 MB)
Stripe 0:
Device Start Block Dbase Reloc
c1d0s5 0 No Yes
Stripe 1:
Device Start Block Dbase Reloc
c1d0s6 32130 Yes Yes
Device Relocation Information:
Device Reloc Device ID
c1d0 Yes id1,cmdk@AST320414A=7EC0G1JQ
six# newfs /dev/md/rdsk/d30
/dev/md/rdsk/d30: Unable to find Media type. Proceeding with system determined parameters.
newfs: /dev/md/rdsk/d30 last mounted as /san.d39
newfs: construct a new file system /dev/md/rdsk/d30: (y/n)? y
Warning: 13230 sector(s) in last cylinder unallocated
/dev/md/rdsk/d30: 803250 sectors in 54 cylinders of 240 tracks, 63 sectors
392.2MB in 11 cyl groups (5 c/g, 36.91MB/g, 17536 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 75696, 151360, 227024, 302688, 378352, 454016, 529680, 605344, 681008,
756672
six# mkdir /san.d30
six# mount /dev/md/dsk/d30 /san.d30
echo ok > /san.d30/test.txt
umount /san.d30
metaclear d30
=== Creation d'une partition concat/stripe sur 3 disques de donnees c1t1d0 c1t2d0 et c1t3d0 (avec un disque systeme sur c1t0d0) ===
su ou telnet 0
format // pour creer une slice 0 de tout le disque sur chacun des 3 disques
// on a 3 slices c1t1d0s0 c1t2d0s0 et c1t3d0s0 qui representent l'ensemble des 3 disques
// On cree les bases de donnees de disk suite pour qu'il puisse bosser sur les disques
metadb -c3 -f -a c1t1d0 c1t2d0 c1t3d0
// on cree le raid 0 sur 3 disques
metainit d30 3 1 c1t1d0s0 1 c1t2d0s0 1 c1t3d0s0
// on verifie
metastat
metastat -c
metastat -p
// on format la partition
newfs /dev/md/rdsk/d30
// on cree le point de ontage /files
mkdir /files
mount /dev/md/dsk/d30 /files
// et c'est bon
df -h /files
=== dtksh ===
/usr/dt/bin/dtksh
/usr/dt/examples
=== alias sur ksh ===
alias ll="ls -lart"
=== d31 - Raid 0 ===
six# metainit d31 1 2 c1d0s5 c1d0s6 -i 64k
d31: Concat/Stripe is setup
six# metastat
d31: Concat/Stripe
Size: 755055 blocks (368 MB)
Stripe 0: (interlace: 128 blocks)
Device Start Block Dbase Reloc
c1d0s5 0 No Yes
c1d0s6 32130 Yes Yes
Device Relocation Information:
Device Reloc Device ID
c1d0 Yes id1,cmdk@AST320414A=7EC0G1JQ
six# mkdir /stripe.san
six# mount /dev/md/dsk/d31 /stripe.san
six# metattach d31 /dev/dsk/c1d0s4
d31: component is attached
six# growfs -M /stripe.san /dev/md/rdsk/d31
/dev/md/rdsk/d31: Unable to find Media type. Proceeding with system determined parameters.
Warning: 6616 sector(s) in last cylinder unallocated
/dev/md/rdsk/d31: 1172744 sectors in 78 cylinders of 240 tracks, 63 sectors
572.6MB in 16 cyl groups (5 c/g, 36.91MB/g, 17536 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 75696, 151360, 227024, 302688, 378352, 454016, 529680, 605344, 681008,
756672, 832336, 908000, 983664, 1059328, 1134992
six# metastat
d31: Concat/Stripe
Size: 1172745 blocks (572 MB)
Stripe 0: (interlace: 128 blocks)
Device Start Block Dbase Reloc
c1d0s5 0 No Yes
c1d0s6 32130 Yes Yes
Stripe 1:
Device Start Block Dbase Reloc
c1d0s4 0 No Yes
Device Relocation Information:
Device Reloc Device ID
c1d0 Yes id1,cmdk@AST320414A=7EC0G1JQ
six#
=== mirror 4.2 ===
metainit d41 1 1 c1d0s0
metainit d42 1 1 c1d0s1
metainit d40 -m d41
metattach d40 d42
newfs /dev/md/rdsk/d40
mkdir /mirroir
mount /dev/md/dsk/d40 /mirroir
metastat
df
=== d40 ===
six# metadetach d40 d41
d40: submirror d41 is detached
six# metattach d40 d41
d40: submirror d41 is attached
six#
six# metaoffline d40 d41
d40: submirror d41 is offlined
six# metaonline d40 d41
d40: submirror d41 is onlined
six# metattach d41 /dev/dsk/c1d0s4
d41: component is attached
six# metattach d42 /dev/dsk/c1d0s5
d42: component is attached
six# growfs -M /mirroir /dev/md/rdsk/d40
/dev/md/rdsk/d40: Unable to find Media type. Proceeding with system determined parameters.
Warning: inode blocks/cyl group (322) >= data blocks (236) in last
cylinder group. This implies 3780 sector(s) cannot be allocated.
/dev/md/rdsk/d40: 831600 sectors in 55 cylinders of 240 tracks, 63 sectors
406.1MB in 11 cyl groups (5 c/g, 36.91MB/g, 17536 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 75696, 151360, 227024, 302688, 378352, 454016, 529680, 605344, 681008,
756672
six#
=== RAID5 ===
metainit d39 -r c1d0s0 c1d0s1 c1d0s3 -i 128k
metastat
newfs /dev/md/rdsk/d39 //foire car pas ready
metastat
metastat
metastat //suit la progression de creation du raid 5
metastat
newfs /dev/md/rdsk/d39
mkdir /raid5
mount /dev/md/dsk/d39 /raid5
ll /raid5
df -h /raid5
// rdsk pas organise // dsk organise
// commandes sur rdsk: newfs, fsck
// commandes sur dsk: mount
=== Hot Spare ===
metainit hsp050 c1d0s4 c1d0s5
metastat
metaparam d39 -h hsp050
metaparam -h hsp050 d39
metastat
==== Journee 2 ====
=== Soft Partition ===
six# metainit d91 -p d39 -o 1 -b 204800
d91: Soft Partition is setup
six# metastat
d91: Soft Partition
Device: d39
State: Okay
Size: 204800 blocks (100 MB)
Extent Start Block Block count
0 1 204800
d39: RAID
State: Okay
Interlace: 256 blocks
Size: 819315 blocks (400 MB)
Original device:
Size: 833024 blocks (406 MB)
Device Start Block Dbase State Reloc Hot Spare
c1d0s0 1120 No Okay Yes
c1d0s1 1120 No Okay Yes
c1d0s3 1120 No Okay Yes
hsp050: 2 hot spares
Device Status Length Reloc
c1d0s4 Available 417690 blocks Yes
c1d0s5 Available 417690 blocks Yes
Device Relocation Information:
Device Reloc Device ID
c1d0 Yes id1,cmdk@AST320414A=7EC0G1JQ
six#
metahs -d hsp050 c1d0s5
metahs -d hsp050 c1d0s4
=== Gestion du disque systeme ===
OBP ( Open Boot Prom) ( alias bios) ne boote que sur un slice ufs.
Il prend le 1er slice system en read only /.
Meme si c'est un miroir.
Apres dans /etc/system, il monte le mirori du disque systeme avec -o remount rw (read write)
Unix vient de multix.
2 branches Berkeley (/usr/ucb) ou System V
Sun plutot berkeley.
38 ans d'unix en 2008.
Berkeley doit degager un jour.
=== Pour le boot x86/x64 avec SVM ===
installboot (pour Sparc) a faire sur un seul disque
installgrub (pour intel) a faire sur les 2 disques du miroir (histoire de master boot record non mirore)
=== Encapsulation du disque systeme ===
vi /etc/lvm/md.tab
cat /etc/lvm/md.tab
d10 1 1 c0d0s0
d20 1 1 c1d0s0
d0 -m d10
d11 1 1 c0d0s1
d21 1 1 c1d0s1
d1 -m d11
d15 1 1 c0d0s5
d25 1 1 c1d0s5
d5 -m d15
metainit -a -f
metastat
cp /etc/vfstab /etc/vfstab.san
cp /etc/system /etc/system.san
metaroot d0
vi /etc/vfstab
metastat
d5: Mirror
Submirror 0: d15
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 41945715 blocks (20 GB)
d15: Submirror of d5
State: Okay
Size: 41945715 blocks (20 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0d0s5 0 No Okay Yes
d1: Mirror
Submirror 0: d11
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 2104515 blocks (1.0 GB)
d11: Submirror of d1
State: Okay
Size: 2104515 blocks (1.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0d0s1 0 No Okay Yes
d0: Mirror
Submirror 0: d10
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 20980890 blocks (10 GB)
d10: Submirror of d0
State: Okay
Size: 20980890 blocks (10 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0d0s0 0 No Okay Yes
d25: Concat/Stripe
Size: 417690 blocks (203 MB)
Stripe 0:
Device Start Block Dbase Reloc
c1d0s5 0 No Yes
d21: Concat/Stripe
Size: 417690 blocks (203 MB)
Stripe 0:
Device Start Block Dbase Reloc
c1d0s1 0 No Yes
d20: Concat/Stripe
Size: 417690 blocks (203 MB)
Stripe 0:
Device Start Block Dbase Reloc
c1d0s0 0 No Yes
hsp050: is empty
Device Relocation Information:
Device Reloc Device ID
c1d0 Yes id1,cmdk@AST320414A=7EC0G1JQ
c0d0 Yes id1,cmdk@AST380011A=4JV2C9VK
cat /etc/vfstab
six# diff /etc/vfstab /etc/vfstab.san
6,8c6,7
< #/dev/dsk/c0d0s1 - - swap - no -
< /dev/md/dsk/d1 - - swap - no -
< /dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no -
---
> /dev/dsk/c0d0s1 - - swap - no -
> /dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 / ufs 1 no -
10,11c9
< #/dev/dsk/c0d0s5 /dev/rdsk/c0d0s5 /zones ufs 2 yes -
< /dev/md/dsk/d5 /dev/md/rdsk/d5 /zones ufs 2 yes -
---
> /dev/dsk/c0d0s5 /dev/rdsk/c0d0s5 /zones ufs 2 yes -
six#
lockfs -fa
shutdown -y -g0 -i6
=== Raid ===
Le Raid 5 offre un bon compromi pour beaucoup de lecture et moins de 20% d'ecriture.
Le Raid 1+0 est bien mieux que le raid 0+1 (idiot). Bon pour la base de donnees.
Un seul plantage disque maximum en raid 5 peut etre corrige -> Raid 6 mais moins bon ou Raid 5 + Hot Spare.
=== DiskSet ===
Un diskset est visible de 2 machines seulement.
Un disque dans un diskset est partitionne en slice 0 et slice 7 (Le slice 2 est mis a zero au lieu de la taille totale du disque -> probleme dans Veritas)
Disk system est un disk set sans nom.
Toutes les commandes prennent un -s pour diskset.
=== Depasser les 16 teras ===
Veritas ou zfs seulement en 2008
=== Petits mots de Jean-Marc LACOSTE ===
Tout, toujours, jamais sont des mots dangereux.
[[http://sunsolaris.no-ip.info/solaris/]]
=== Sun Cluster ===
. Fault Tolerant: service interrompu < 1 seconde
. Haute disponilite: service interrompu < 6 minutes par an (6 minutes ou plus en realite). Idee: tout redondant x2 (Sun Cluster / Veritas Cluster VCS)
. Distribution de charge (rsh/ssh) DRM:Distributed Ressource Management -> appli morcelable (Sun Grid Engine -> Fortement heterogene Bien/ Globus)
. Cluster de calcul HPC:High Performance Computing. L'executable appelle des librairies qui sont distibuees sur plusieurs machine (norme MPI)
Machine dans un cluster s'appelle un noeud.
. Application A1 qui ne fonctionne que sur un noeud -> fonctionnement en failover
. Application A2 qui fonctionne partout -> fonctionnement scalable (repartition de charges)
. Si possible separer les machines (pas dans le meme rak, pas dans la meme salle)
. Disaster Recovery -> impose des kilometres d'eloignement (Sun Cluster Geographic cluster)
Groupe de ressources:
. adresse ip : ressource reseau
. stockage: ressource disque
. Apllicaatif: ressource applicative (start,stop,probe ) probe check si ca marche regulierement
Test de charges:
. Mercury Load Runner (cher)
Installation de Sun Cluster
. Installation de solaris sur les noeuds (classiquement)
. scinstall sur un noeud puis sur l'autre
. scsetup pour le choix du quorum
. IPMP pour le reseau
. NTP, patches, etc..
. SVM (disque suite) ou VxVM (veritas)
. install de l'agent nfs scinstall sur une machine ?
=== Reseau ===
ifconfig -a plumb
eeprom avec local-mac-address? sur les Sparc: par defaut a false -> mac addresse identique pour toutes les interfaces reseaux
On peut la passer a true -> on change avec ifconfig ether
prtpicl -v -c network | grep local Permet de savoir les adresses mac (=ethernet).
kstat eri:0 | more -> ancienne facon de faire
dladm show-dev
Pas d'underscore dans les hostnames ( caracteres alpha numeriques, tiret au milieu et c'est tout)
hostname dans /etc/hostname.xxx avec xxx= nom de l'interface
/etc/nodename = nom du hostname
/etc/inet/hosts [IP Physique] Attention! Ne pas faire de move sur /etc/hosts car c'est un lien
L'adresse IP sur Solaris 10 est aussi dans /etc/inet/ipnodes (sauf si il y a un lien)
Versions de solaris: 03/05 01/06 06/06 11/06, zones ok a partir de 08/07 05/08
cat /etc/release Pour la version de solaris.
Pour Solaris 8, il faut aussi modifier /etc/net/*/hosts
Plus brutal, il y a aussi: sys-unconfig
=== IPMP ===
Redondance
Une certaine forme d'equilibrage avec IPMP (IP MultiPathing)
Il faut au moins 2 interfaces sur le meme segment internet (local-mac-address? a true obligatoire)
On place les 2 interfaces qfe0 et qfe1 dans le meme groupe IPMP: g1
Le daemon in.mpathd demarre tout seul.
A chaque interface on va associer une adresse de test t0 et t1.
Autre adresse internet avec qfe0:1 par exemple
Les interfaces vont pinger les adresses de test toutes les 2s (failure a 10s).(mode Probe Based)
Parametrage de in.mpathd dans /etc/default/mpathd
Dans le fichier /etc/hostname.qfe0, on va tout ecrire dedans:
AddresseIP t0 netmask + broadcast + group g1 -failover(pas de bascule de cette adresse ip en cas de panne) deprecated(marche que pour le ping) up
addif (addinterface) nomdelamachine netmask + broadcast + up (va chercher l'ip dans /etc/hosts car on a mis le nom de la machine)
Dans le fichier /etc/hostname.qfe1, on va tout ecrire dedans:
AddresseIP t1 netmask + broadcast + group g1 -failover deprecated up (On peut mettre standby, cable inactif tant que le 1er n'est pas tombe)
Sous Solaris 10, on peut travailler sans adresse de test -> On travaille en Link Based
vi /etc/hostname.elxl0
10.14.2.26 netmask 255.0.0.0 broadcast 10.255.255.255 group gsan1 -failover deprecated up
addif six netmask 255.0.0.0 broadcast 10.255.255.255 up
ifconfig elxl0 down unplumb ; ifconfig elxl0 plumb `cat /etc/hostname.elxl0`
Created new logical interface elxl0:1
six# ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
elxl0: flags=9040843 mtu 1500 index 3
inet 10.14.2.26 netmask ff000000 broadcast 10.255.255.255
groupname gsan1
ether 0:a:5e:5a:1b:e2
elxl0:1: flags=1000843 mtu 1500 index 3
inet 10.14.2.6 netmask ff000000 broadcast 10.255.255.255
snoop pour surveiller le reseau
netstat -i 5
Ou recuperer sur [[http://www.sunfreeware.com]] iftop et ses copains libcap et curses
[[http://www.blastwave.org]]
=== Routage ===
routes disponibles: netstat -rn
10.0.0.0 10.14.2.6 (votre adresse)
127.0.0.1 10.14.2.6 loopback (test client/serveur sur la meme machine ca NE PASSE PAS par le reseau)
224.0.0.1 10.14.2.6 (adresse multicast)
default IPDeLaPasserelle(10.0.0.1)
Passerelle dans /etc/defaultrouter (on peut en mettre plusieurs)
Pour faire du routage: On peut payer cisco ou Nortel ou passer par l'Os
OS+Routage+Firewall+NAT
Firewall pour Sun: historiquement FW-1 puis SunScreen(abandonne) puis maintenant IPFilter
Pour indiquer les routes commande route
/var/sadm/install/contents contient les packages installes
Recuperer gated sur gated.org (fichier de conf /etc/gated.conf)
six# routeadm
Configuration Current Current
Option Configuration System State
---------------------------------------------------------------
IPv4 routing disabled disabled
IPv6 routing disabled disabled
IPv4 forwarding disabled disabled
IPv6 forwarding disabled disabled
Routing services "route:default ripng:default"
Routing daemons:
STATE FMRI
disabled svc:/network/routing/legacy-routing:ipv4
disabled svc:/network/routing/legacy-routing:ipv6
disabled svc:/network/routing/ndp:default
disabled svc:/network/routing/rdisc:default
disabled svc:/network/routing/ripng:default
disabled svc:/network/routing/ripng:quagga
disabled svc:/network/routing/route:default
disabled svc:/network/routing/zebra:quagga
disabled svc:/network/routing/rip:quagga
disabled svc:/network/routing/ospf:quagga
disabled svc:/network/routing/ospf6:quagga
disabled svc:/network/routing/bgp:quagga
six#
=== IP Forwarding ===
Signifie que l'on accepte qu'un paquet arrive sur une interface reseau et reparte sur une autre
ndd - set /dev/ip ip_forwarding 0
==== Journee 3 ====
=== SMF ===
Sur Aix, init appelle inittab qui appelle les scripts de /etc/rc
En System V, init appelle inittab qui appelle les scripts de /etc/rc2.d (niveau dse init)
K22toto pour stop
S23titi start
On cree le fichier dans /etc/init.d/tata et on fait
un lien sur le niveau de demarrage /etc/rc2.d/S23tata
un lien sur le niveau d'arret /etc/rc0.d/K01tata
Probleme:
Pas de suivi de processus
Pas de dependance entre service
Dans SMF(solaris 10), init appelle inittab qui demarre le demon smf
smf travaille avec des services qui peuvent etre suivi, ont des dependances et qui peut demarrer des scripts V (appeles legacy)
svcs donne des infos
svcadm qui fait de l'admin
svccfg qui fait la config
svcprop attributs
Les run levels existent toujours 3 multi-user-server, 2 multi-user et 0
On parle maintenant de milestone
fmri = url pour smf
exemple de cron:
svcs -a | grep cron
svcs cron
svcs svc:/system/cron:default (chemin absolu du service cron)
svcs -p cron (donne la liste des processus suivi par cron)
ctfs garde les contrats des services (svcprop cron donne 40 dans l'exemple)
ctwatch 40
six# svcs -p cron
STATE STIME FMRI
online 10:08:03 svc:/system/cron:default
10:08:03 1870 cron
On tue le service cron
six# while true
while> do
while> pkill -9 cron
while> done
^C
six# while true
do
pkill -9 cron
done
six# svcs -p cron
STATE STIME FMRI
maintenance 10:08:47 svc:/system/cron:default
six#
six# svcs -xv cron
svc:/system/cron:default (clock daemon (cron))
State: maintenance since Wed Jun 25 10:08:47 2008
Reason: Start method failed repeatedly, last died on Killed (9).
See: http://sun.com/msg/SMF-8000-KS
See: man -M /usr/share/man -s 1M cron
See: man -M /usr/share/man -s 1 crontab
See: /var/svc/log/system-cron:default.log
Impact: This service is not running.
six#
Pour le remettre en marche:
six# svcadm disable cron
six# svcadm enable cron
six# svcs -p cron
STATE STIME FMRI
online 10:11:58 svc:/system/cron:default
10:11:58 4199 cron
six#
=== Ecriture d'un service avant solaris 10 ===
vi /usr/bin/coucou.sh
#!/bin/sh
echo "Coucou, ici `uname -n`"
ps -eaf
chmod a+x coucou.sh
Declare le servcice coucou
vi /etc/inet/services
coucou 7101/tcp #coucou
Mettre le service coucou sous controle d'inetd
vi /etc/inet/inetd.conf
coucou stream tcp nowait root /usr/bin/coucou.sh coucou.sh (les arguments avec le nom de l'exec style C)
On previent inetd avec:
pkill -1 inetd
On teste le service avec telnet machine coucou
=== Ecriture d'un service en solaris 10 ===
vi /usr/bin/coucou.sh
#!/bin/sh
echo "Coucou, ici `uname -n`"
ps -eaf
chmod a+x coucou.sh
Declare le servcice coucou
vi /etc/inet/services
coucou 7101/tcp #coucou
Mettre le service coucou sous controle d'inetd
vi /etc/inet/inetd.conf
coucou stream tcp nowait root /usr/bin/coucou.sh coucou.sh (les arguments avec le nom de l'exec style C)
On previent inetd avec:
inetconv
On teste le service avec telnet machine coucou
svcadm enable svc:/network/coucou/tcp:default
svcadm disable svc:/network/coucou/tcp:default
svcadm enable coucou/tcp
svcadm disable coucou/tcp
=== Messages d'erreurs ===
/var/adm/messages
/var/svc/log/*
mot-clefs des services de syslog:
local0 a local7
man inetd
/syslog
daemon.notice pour inetd (service/facility)
logger force une entree dans syslog
logger -p local0.notice -t SanAppli "Message de texte pour syslog"
Il existe aussi syslogengine.
vi /etc/syslog.conf
local0.notice /var/log/sanSyslog.log
local1.notice /var/log/sanSyslog.log # Attention inverse sur la machine cinq
local2.notice @cinq
touch /var/log/sanSyslog.log
pkill -1 syslogd
logger -p local0.notice -t Thierry "Message pour cinq"
cat /var/log/sanSyslog.log
vi /etc/syslog.conf
pkill -1 syslogd
logger -p local2.notice -t Thierry "Message pour cinq"
six# cat /var/log/sanSyslog.log
Jun 25 11:21:12 six SanAppli: [ID 702911 local0.notice] Message de texte pour syslog
Jun 25 11:34:13 six Thierry: [ID 702911 local0.notice] Message pour cinq
Jun 25 11:35:40 cinq HP: [ID 702911 local1.notice] ok test
=== vi ===
:set list // Pour voir les tabulations dans vi
:set nolist //pour virer
:set number
cat -etv fichier // pour voir les tabulations
=== tuer les zombies ===
Si zombie a comme id 3700
preap 3700
Autres outils sympas:
lsof
fuser -cu /zones
=== Sun Explorer Data Collector pour le support sun ===
[[http://sunsolve.sun.com]]
Installer avec ./install_stb.sh
to run explorer..
first time run this:
# /opt/SUNWexplo/bin/explorer -g
from then on, run this;
# /opt/SUNWexplo/bin/explorer
there are many options to explorer for certain things, but just by itself should get you most of what you need.
default in /etc/opt/SUNWexplo/default/explorer
=== Tuning ===
Cpu, Memoire, Disque, Reseau
cpu: uptime, mpstat, sar, vmstat,DTrace
mem:sar,ps,vmstat,prstat,stdprocess, pmap, ptree, p* (pmap -x 1), timex,swap -l,truss,DTrace
disk:iostat,sar,DTrace
rezo:iostat,sar,netstat,snoop,nfsstat,DTrace
Adrian Cockroft: SE Toolkit (jusqu'a Sol 8/9)
Langage de tuning: SymbEl se
Dtrace Toolkit : 200 scripts DTrace de Brendon Gregg
mdb -k
>maxusers/D
::dcmds
::ps
quit
uptime ok entre 1 et 2
prstat au lieu de top
sar -d 5 10 (10 mesures de 5 secondes sur les diques)
svcadm enable sar
/usr/lib/sa/sa1 1 5
sar -d
Creer des fichiers dans /var/adm/sa.jourDuMois
sar -A (fait presque toutes les options)
**30% idle c'est bien.**
Temps io = 0 en solaris 10
Temps system+io doit etre 2 fois moins important que le temps user
Un pur serveur nfs n'a que du temps system...
Maintenant mpstat pour les machines multi procs.
On retrouve usr sys waitio et idl a la fin.
La colonne xcal (Cross Call)donne les conflits de ressource en multi thread.
Les xcal ne doivent pas depasses 2000.
Activite disque: sar -d 5 5 (chiant) Temps de reponse a droite
On preferre:
iostat -xn 5
asvc_t = average service time = temps de reponse
La running queue:
sar -q 5 5
La valeur seuil c'est 5.
15 pour un processeur, c'est trop!
15 pour 20 processeurs, c'est bien!
Buffer cache:
sar -b 5 5
rcache > 95% ok
wcache > 65% ok
Pour prendre de la cpu:
find / > /dev/null 2>&1 &
Pour vmstat verifier le scan rate sr.
Au dessus de 200, on achete des barrettes de ram ou on lance moins de process
swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0d0s1 102,1 8 2104504 2104504
Si swap=free, on ne swappe pas.
On peut temporairement enlever le swap avec swap -d et le remettre avec swap -a.
iostat -xPnce 10
Rezo:
rup = uptime reseau
snoop
ping -s x.y.z.255 pour envoyer un ping en broadcast
=== Dump System ===
panic ecrit la memoire dans la zone de swap qui devient la zone de dump
Declencher un truc pire que panic:
mdb -kw
> rootdir/D
> rootdir/W 314
> ::exit
ls
Pour remettre dequerre:
En root:
svcadm clear boot-archive
Arreter le probleme sendmail au demarrage:
vi /etc/hosts
1.2.3.4 truc truc.orsys.com (ou truc.) loghost
==== Journee 4 ====
truss -f pour suivre les fork du programme espionne.
login et init traces dans
/var/adm/wtmp
last
/var/adm/sulog
last sulog
taux de saturation d'un file system:
df -o i -> on voit les inodes used et les inodes free
mount -o remount,rq / Pour remonter / avec de nouvelles options (pas sur tous les unix)
=== DTrace ===
Brendon Gregg
Cadence (cfao) utilise dtrace a fond.
On peut geler un process, envoyer un signal sinon ce n'est que de l'observation.
Langage D de DTrace. Point de controle = probe
dtrace -l | more Donne tous les probes (quadruplets)
quadruplet; Provider:Module:Function:Name
Provider: famille de probes en fonctions des ressource du system io pour le disk/rezo, etc..
famille fbt (famille poubelle = pas classe)
Module: groupes dans les familles
Pour mesurer un temps dans une fonction, on mesure le temps entre l'entry et le return
exemple de script DTrace:
vi /var/tmp/tp1.d
#!/usr/sbin/dtrace -s
/* #!/usr/sbin/dtrace -qs */
/* qs comme quiet, attention, il ne passe plus a la ligne trace remplace par -> printf */
/*debut: ce qui s'execute avant que le traitement ne commence*/
dtrace:::BEGIN
{
trace("coucou");
}
/*milieu: boucle sans fin sur les evenements du systeme*/
syscall::exec*:return
{
trace(execname);
}
/* fin */
dtrace:::END
{
trace("bye");
}
chmod +x /var/tmpl/tp1.d
Je sais (password), Je possede (carte bancaire), Je suis (biometrie)
process privileges:
PATH=$PATH:/usr/sbin
ppriv -e -D cat /Etc/shadow
ppriv -l | grep dtrace
man ppriv
donner les droits dtrace a san:
usermod -K defaultpriv=basic,dtrace_kernel,dtrace_proc,dtrace_user san
cat/etc/user_attr
cat /etc/user_attr
san::::type=normal;defaultpriv=basic,dtrace_kernel,dtrace_proc,dtrace_user
[[http://www.brendangregg.com/dtrace.html]]
=== Shell ===
code de retour
echo $?
=== Securite ===
Pour acceder a son serveur:
cable serie si on est proche.
Serveur de cable serie (Perle) = Terminal concentrateur (liaison TCP/IP)
Desactiver l'envoi du break pour solaris -> Stop A
RSC, SC, LOM, ALOM, ILOM = pleins de jeux de commandes differents
Eviter les kvm pour sun.
sudo -> /etc/sudoers
RBACK (Role Base Access Control)
useradd /etc/user_attr
cd /etc/security
vi exec_attr //
vi auth_attr
Sun a ajoute le Least Privileged Mode
On peut s'ajouter des privileges (dtrace)
cat /etc/shadow
ppriv $$ donne les privileges associes au shell courant
ppriv -l -v donne tous les privileges en mode verbose
ppriv -e -D cat /etc/shadow // On voit qu'il nous manque file_dac_read
Un role est un utilisateur, on fait su - role pour l'utiliser.
=== root a travers le rezo ===
/etc/default/login (joue pour telnet/rlogin)
On commente ou decommente CONSOLE=
Pas de root sur station: CONSOLE=/dev/null
/etc/ftp/ftpusers (inerdit de ftp dont root qui est interdit)
/etc/ssh/sshd_cnfig
PermitRootLogin yes // Pour autoriser root
svcadm disable ssh
svcadm enable ssh
=== Droits unix ===
ls -l /usr/bin/passwd
r-s r-x r-x root
setuid bit = S (interet que pour les fichiers)
S+x=s
ls appartient a root
alice veut faire ls de passwd, le setuid permet a alice d'etre remplace par root pendant l'operation ls.
Attention au backdoor!
vi bidouille
#!/bin/sh -p
/bin/sh -p
chmod 4555 bidouille
ls -al bidouille
Marche pas sur Aix avec un shell
ssh san@0
cat/etc/shadow -> marche pas
/bidouille
cat/etc/shadow -> marche
Recherche des setuid en root
find / -mod -4000 -user root -print
Ne pas mettre . en debut de path (en fin presque ok)
Mauvais user qui cree un ls pour creer bidouille dans /tmp et qui pleure que /tmp est plein.
L'admin fait ls dans /tmp -> backdoor cree.
set gid bit : S sur la seconde partie de la commande
On substitue le groupe a la place du user (set-uid-bit)
Soit un repertoire partage avec les droits: drwx rwx rwx user1 group1
chaque fichier cree appartient a un group different
sticky bit est un grand T: sert pour /tmp /var/tmp T+x=t
/tmp par default est en virtual memory (perdu apres le reboot)
/var/tmp resiste au reboot
Permet d'eviter le rm pour tout detruire dans /tmp par exemple
=== SSH ===
~/.ssh/id_dsa
~/.ssh/id_dsa.pub
1) alice cree ses cles
ssh-keygen -t dsa
passphrase:
2)scp ~/.ssh/id_dsa.pub bob@m2:/tmp
3) bob ajoute la cle a son trousseau
mkdir ~/.ssh
cat /tmp/id_dsa.pub >> ~/.ssh/authorized_keys
=== Sauvegarde system ===
ufsdump only
Sauvegardes croisees entre machine (bonne idee)
=== ZFS ===
Faux disques pour zfs
for i in 0 1 2 3 4 5
do
mkfile 128M /dev/dsk/c3t${i}d0
done
Raid 1 (mirroir):
zpool create hdmirror mirror c0t1d0 c0t2d0
zfs create hdmirror/zones
mkdir /zones
zfs set mountpoint=/zones hdmirror/zones
On parle de pool coupee en SPA (Storage Pool Area equivalent LVM) et la couche DataSet (equivalent FileSystem)
On cree la pool:
zpool create p1 c3t0d0
zpool list
zpool status -v
On cree le fs
zfs create p1/fs1
zfs list
df -h
su
zfs create trmpool/files
mkdir /files
zfs set mountpoint=/files trmpool/files
zfs set quota=200G trmpool/files
zfs set sharenfs=on trmpool/files
zfs get all trmpool/files
p1 91M 25K 91M 1% /p1
p1/fs1 91M 24K 91M 1% /p1/fs1
Attention! C'est de l'espace mutualise! Il ne faut plus additionne les lignes!
/p1/fs1
Histoire de label EFI des disques de plus de 1To
Plus de cylindres en EFI contrairement a l'ancien style SMI
Agrandir le FS:
zpool add p1 c3t1d0
Clone de disques lorque le rpool existe deja:
zpool status
On se debarasse du 2nd disque: zpool detach rpool c0t1d0s0
format -e
selectionner le 2eme disque
fdisk
supprimer toutes les partitions et creer une unique partition solaris 2 (label en SMI)
prtvtoc /dev/rdsk/c0t0d0s2 ~ fmthard -s - /dev/rdsk/c0t1d0s2
zpool attach -f rpool c0t0d0s0 c0t1d0s0
On installe le boot sur le 2nd disque
installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t1d0s0
==== Journee 5 ====
visualiser une fstab zfs:
zfs get all p1/fs1
quotas par filesystem
reservation (minimum garantie)
recordsize taille des blocs d'IO
Changer le mountpoint:
zfs set mountpoint=/sanZfs p1/fs1
Pour les clusters qui n'utilisent que la vfstab:
zfs set mounpoint=legacy
vi /etc/vfstab
p1/fs1 (rien) /sanZfs zfs (rien) yes
Avec sharenfs on ne touche plus la dfstab
Le checksum est active par defaut -> perte legere en performances
atime = access time (change la date a chaque access)
exec off -> pas d'executables dessus
setuid off -> pas de setuid sur le fs
zoned off -> pas dans une zone
snapdir hidden -> snapshot cache
zfs snapshot p1/fs1@nomDuSnapshot (ou date)
zfs set snapdir=visible p1/fs1
cd /p1/fs1/.zfs/snapshot/
heritage entre dataset d'attributs
svcadm enable webconsole
svcs -a | grep conso
https://localhost:6789
zfs rollback p1/fs1@sanZfs
Pour sauvegarder:
zfs send -> man zfs
=== Zones ===
1)Domaines sur les grosses machines 6xxx (decoupage hardware)
cher et avec contraintes
2)Sparc avec hyperviseur hardware Txxxx
LDOM Solaris 10
Os Hote et des Os par dessus
Os Hote sert d'arbitrage.
3)Os Hote + Virtualisation software + Os guests
Para virtualisation
(qemu, xen (citrix), vmware, virtualBox)
couteux en Ram
4)linux kernelThread et VServers
Sun avec les zones (=containers)
Aix avec les WPar
->Partitionnement d'Os
cout de la zone en memoire est faible
contrainte: Patch de l'os plus difficile
zoneadmd va permeabiliser la zone
zconsole = pseudo mode console
boot de zone utilisateur rapide pas la zone globale.
zone pas serveur nfs
Chacun a son root et peut rebooter
Isolation plutot bonne
Mettre les zones sur le san.
Granularite au millieme de cpu
Transparent pas de difference notable avec un solaris 10
On ne peut pas s'attribuer des ressources en dehors de la zone globale
big zone pour les applis qui s'installent dans /usr.
petite zone pour ne pas dupliquer les commandes ls.
=== petite zone ===
1) declarer la zone
zonecfg -z z1
create
set zonepath=/zones/z1
set autoboot=true
add net
set physical=elxl0
set address=10.14.x.y+100/8 8 = netmask 255.0.0.0
end
commit -> Va creer /etc/zones/z1.xml et /etc/zones/index.xml
exit
2) Installer la zone
zoneadm -z z1 install
zoneadm list -cv
3) demarrer la zone
zoneadm -z z1 ready
zoneadm -z z1 boot
-> repondre aux questions
-> reponse dans /zones/z1/root/etc/sysidcfg
zlogin -C z1 (en mode console)
Pour quitter la console: ~.
=== grosse zone ===
1) declarer la zone
zonecfg -z z2
create
remove inherit-pkg_dir dir=/sbin
remove inherit-pkg_dir dir=/usr
remove inherit-pkg_dir dir=/platform
remove inherit-pkg_dir dir=/lib
ou
create -b
set zonepath=/zones/z2
set autoboot=true
add net
set physical=elxl0
set address=10.14.x.y+120/8 8 = netmask 255.0.0.0
end
commit -> Va creer /etc/zones/z2.xml et /etc/zones/index.xml
exit
2) Installer la zone
zoneadm -z z2 install
zoneadm list -cv
3) demarrer la zone
zoneadm -z z2 ready
zoneadm -z z2 boot
-> repondre aux questions
-> reponse dans /zones/z2/root/etc/sysidcfg
zlogin -C z2 (en mode console)
Pour quitter la console: ~.
4) premier boot / test /etc
Changer le terminal de solaris
vi /etc/.sysIDtoolState
Mettre un 0 au lieu de 1 et rebooter
BrandZ : pour faire autre chose que du solaris 10: Linux, Solaris 8
Pour deplacer une zone: tar du zonepath + /etc/zones
Janus = nom du projet zone chez Sun
Controle de ressources:
Controle bourrin: on associe des processor set (1 processeur entier)
Controle fin: on preferre travailler avec des parts ou du cpu caping
ps -cafe
classe RT : Real Timle
classe SYS : Systeme
classe IA
classe TS : Time Sharing (Priorite qui baisse sauf si process en fixed FX)
disadmin, nic, priocntl
Changement d'ordonnancement:
On passe en FSS
zonecfg -z z1
add rctl
add value (priv=privileged, limit=10, action=none)
end
commit
ou
zonecfg -z z1
set cpu-shares=10
zonecfg -z global
changement de priorite en live:
prctl -n zone.cpu-shares -i zone global
prctl -n zone.cpu-shares -v 20 -r -i zone global
prctl -n zone.cpu-shares -i zone global
pour mettre la machine a genoux:
yes >/dev/null 2>&1
top pour les zones:
prstat -Z
=== Jump Start ===
Flash Archive
boot en rarp (broadcast) ne passe pas les routeurs
dhcp tres chiant
deploiement national/international: wanboot-http
Il faut recuperer la commande check du cdrom...(pas cool)