Idiomes

linux

Fent servir Kubuntu 9.10, o qualsevol distribució linux, des d'un dispositiu USB

Ara ja fa un any vam comentar com fer servir Kubuntu 8.10 des d'un USB. Ara, un any després, em trobava amb el mateix problema, amb la Kubuntu 9.10. Peró des d'aleshores hem fet alguns avenços.

La pròpia Ubuntu porta un programa per fer que un USB arrenqui amb ella mateixa. Al menu hi ha l'aplicació "K-> Aplicacions -> Sistema -> USB Startup Disk Creator" (o també amb la comanda /usr/bin/usb-creator-kde), que es molt senzilla.

Winexe empaquetat per Ubuntu/Kubuntu i Debian

Acabo de descobrir que a partir de debian lenny, i a Ubuntu/KUbuntu (no sé si a la 8.04 hi era, pero a la 8.10 segur que hi és), l'aplicacio winexe, de la que vam parlar aqui i feiem servir, per exemple, en els nostres scripts per matar processos o aconseguir una shell remota, s'instal·la amb el paquet wmi-client. És a dir, que per instal·lar-ho només haurem de fer:

apt-get install wmi-client

I llestos! Suposo que per SuSE i RedHat tambe deu estar empaquetada... algú m'ho pot confirmar?

Script per fer servir automàticament Kubuntu a un USB, des de windows (actualitzat)

Instruccions: Decarreguem l'arxiu amb les utilitats, el descomprimim en algun directori, i executem el script kubuntu810.bat. Escollim lletra d'unitat, escollim arquitectura, i llestos! No s'ha de fer res mes. El propi script s'encarrega de decarregar la ISO si no la tens.

Recorda que has d'escollir una unitat que sigui la primera partició primària del dispositiu, i que ha de tenir un sistema de fitxers FAT de mes de 750MB...

Em sembla que més fàcil impossible!

I per que publico això, així d'escuet? Doncs es que ahir em van renyar...
"Quin rollo d'entrada, el post de Kubuntu-USB! Per què no fots les comandes i punt? No veus que ningú no s'ho llegirà?"

Ok, ok, ok... no cal posar-se agressius :D Missatge rebut. I m'he posat mans a la obra.

He agafat les instruccions de PenDriveLinux que havien publicat per Ubuntu, USB Ubuntu 8.10 install from Windows, i ho he adaptat a Kubuntu. A més he afegit alguna coseta més, com que puguis escollir entre arquitectura de 32 o 64 bits, i que puguis fer servir un proxy per descarregar la ISO (apart d'afegir una "-f" a la comanda syslinux perquè sense ella em donava l'error "Not a removable drive").

Actualització 5/11
A PenDriveLinux ja ho han fet, amb aquest article, o sigui que ja he perdut l'exclusiva :P

Fent servir Kubuntu 8.10 des d'un dispositiu USB (flash drive, disc dur)

Acaba de sortir la nova fornada de Ubuntu i Kubuntu 8.10. Com cada nova versió, m'agrada fer una ullada a les novetats (sobretot perquè les actualitzacions acostumen a trencar-se de tant en tant). I aquesta vegada tenia més ganes encara de veure les novetats, perquè Kubuntu 8.10 (intrepid ibex) canvia la versió de l'escriptori KDE, i posa per defecte les KDE 4.1.

Sempre he pensat que gastar un CD per copiar la distribució i fer-la servir una sola vegada és un desperdici. Tots tenim un pendrive de 1GB que ens han regalat en alguna reunió, o que ens hem comprat (fins i tot el meu pare en té, que li'n vaig comprar un de 8GB per 10€ al MediaMarkt l'altre dia), i una unitat així, que és de ràpid accés i reutilitzable, sembla el millor lloc on fer les proves de la nostra distribució.

Instal·lar la Ubuntu en un pendrive és molt senzill, està documentat a molts llocs, com per exemple a PenDriveLinux, on tenen un article per instal·lar Ubuntu, amb uns scripts que ho fan tot. Per Kubuntu no he trobat enlloc que ho deixin tan senzill, però només s'han de fer unes petites modificacions.

D'entrada necessitem una unitat USB, ja sigui un disc dur, ja sigui un pendrive, un telefon mòbil... el que sigui.

Farem servir la primera partició física de la unitat. És a dir, que si només tenim particions lògiques, haurem de eliminar-les i crear-ne com a mínim una de física. Això és així perquè les particions lògiques se'ls assigna un valor a partir del 5 (els 4 primers estan reservats per les físiques), i necessitem que sigui la primera partició de totes, la que té el valor 1. Si només tenim una partició, aleshores cap problema, endavant!

També necessitem que aquesta partició tingui un sistema de fitxers FAT, ja sigui FAT16 o FAT32, i que sigui prou gran com perquè hi càpiga el CD de KUbuntu (750MB).

Un cop tenim el dispositiu amb la partició preparada, necessitem decarregar la ISO de KUbuntu 8.10. Quan l'haguem descarregat, haurem d'accedir al sistema de fitxers de la ISO. Això ho podrem fer des de windows amb el 7zip per exemple, i amb un simple mount des de linux:

mkdir /tmp/live-cd
mount -t iso9660 -o loop kubuntu-8.10-desktop-amd64.iso /tmp/live-cd

Ara hem de copiar a l'arrel de la unitat els directoris "casper dists install pics pool preseed .disk", el contingut del directori "isolinux" i els arxius "md5sum.txt README.diskdefines install/mt86plus". En la consola de linux, seria aquesta línia:

cp -r casper dists install pics pool preseed .disk isolinux/* md5sum.txt README.diskdefines install/mt86plus /tmp/live-cd

En l'entorn gràfic de linux i de windows, s'haurien d'arrossegar aquestes carpetes al directori corresponent. També haurem de canviar-li el nom a "isolinux.cfg" per "syslinux.cfg" i sobreescriure l'arxiu "text.cfg" amb aquestes dades:
text.cfg
default persist
label persist
  menu label ^Run KUbuntu Persistently saving changes back to USB
  kernel /casper/vmlinuz
  append  file=/preseed/kubuntu.seed boot=casper persistent initrd=/casper/initrd.gz quiet splash --
label live
  menu label ^Try KUbuntu without saving any changes to USB
  kernel /casper/vmlinuz
  append  file=/preseed/kubuntu.seed boot=casper initrd=/casper/initrd.gz quiet splash --
label live-install
  menu label ^Install KUbuntu
  kernel /casper/vmlinuz
  append  file=/preseed/kubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.gz quiet splash --
label check
  menu label ^Check CD for defects
  kernel /casper/vmlinuz
  append  boot=casper integrity-check initrd=/casper/initrd.gz quiet splash --
label memtest
  menu label Test ^memory
  kernel /install/mt86plus
label hd
  menu label ^Boot from first hard disk
  localboot 0x80

Finalment s'ha de fer que es pugui engengar l'ordinador amb aquest disc (és a dir, fer-lo bootable). Per fer-ho necessitem la utilitat syslinux, que podem trobar a la web de kernel.org en les seves versions tant windows com linux (tot i que un apt-get install syslinux ja t'ho instal·la). Un cop el tinguem haurem d'executar:

syslinux -maf UNITAT

On haurem de substituir "UNITAT" per /dev/sX1 en cas de linux y "X:" en cas de linux (canvia la X per la teva lletra).

I ja ho tenim. Només hem d'assegurar-nos que l'ordinador farà servir el disc USB en engegar, i llestos!

Com que és tan senzill (potser més senzill de fer que d'explicar), potser faig un script per fer-ho des de linux i un altre des de windows... Però això un altre dia!

Mirant remotament el "registre d'events" (event log) de windows: winloglist

Si volem comprovar des de la nostra consola linux el registre d'un servidor windows (sense haver de connectar-nos-hi per terminal server, podent fer un grep dels resultats, etc, etc, etc), aqui tenim la eina!

Els paràmetres que passem al psloglist son:
-d 1 perquè només tregui els logs de l'últim dia (no volem que ens matxaqui a logs)
-f we perquè només apareguin warnings i errors (normalment son els únics que interessen)
$2 aquest es el segon parametre que li passem. Si volem veure nomes el registre "application", o "system" (que son habitualment els que interessen) només ho has d'indicar

#!/bin/bash

[ $# -lt 1 ] && echo "Error, I need at least one argument" && echo "Use: $0 server [system|security|application]" && exit 1
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
$PROGPATH/winpsexec.sh $1 "pstools\\psloglist -d 1 -f we $2"

Més utilitats per administrar windows remotament: winkill, winshell, wininfo

En la linia en la que estavem en posts anteriors , si hem plantat la llavor amb el psexec, ara fer utilitats es senzillissim. Tres exemples:

winshell.sh
Amb aquesta utilitat aconseguim un shell al servidor windows que volguem. No fa servir el psexec perque no li cal, el cmd esta al path.

#!/bin/bash

[ $# -ne 1 ] && echo "Error, I need one argument" && echo "Use: $0 server" && exit 1
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
. $PROGPATH/winvars.sh

winexe //$1 "cmd" $PSCREDENTIALS

wininfo.sh
Amb aquesta utilitat podem aconseguir informació sobre el servidor. Memòria RAM física, versio de SO, uptime, numero de processadors, freqüència dels mateixos, i el driver de la tarja de video. Aquest últim detall sembla de poca importància, serveix per saber si una màquina es virtual o física. Si el driver es quelcom com "VMware SVGA II", aleshores es una màquina virtual. Si el driver es quelcom com "ATI Technologies Inc. 3D RAGE IIC PCI", aleshores es una màquina física.

#!/bin/bash

[ $# -ne 1 ] && echo "Error, I need one and only one argument" && exit 1
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
$PROGPATH/winpsexec.sh $1 pstools\\psinfo

winkill.sh
Com el seu nom indica, serveix per matar algun procés de windows (prèviament podem haver sabut el pid fent servir el winps.sh).

#!/bin/bash

[ $# -ne 2 ] && echo "Error, I need two arguments" && echo "Use: $0 server pid" && exit 1
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
$PROGPATH/winpsexec.sh $1 "pstools\\pskill $2"

Canviant-li la cara al nagios: nagios nuvola style

Siguem sincers. Nagios té moltes moltes coses bones. Però també en té de dolentes: guarda l'històric en fitxers de text no indexats, executa un CGI compilat, el sistema d'arxius de configuració es força farragós per fer altes i baixes de màquines (sobretot baixes)... i sobretot: es lleig. Potser lleig no és la paraula... és auster, simple, poc atractiu.

A mi (i suposo que no sóc l'únic) m'importa ben poc, perquè és una eina i fa la seva feina. No estic per gaudir de mirar-la, sinò perquè m'avisi quan les coses van malament, i m'expliqui per què van malament. Però en aquest món, els que prenen les decisions i compren coses, acostumen donar-li importància a l'aparença, moltes vegades més enllà de les funcionalitats. Aleshores si vols convèncer algú perquè faci servir nagios tindries moltes més possibiltats si fos maco.

Aquí es on entra el nagios nuvola style, per donar-li un altre aspecte molt diferent al nagios i fer-lo més agradable (a la pàgina completa d'aquest article podreu veure dues captures de pantall per comparar). Està fet pels mateixos que van desenvolupar el nagiosql, i tot i que té una pàgina a nagiosexchange, l'arxiu descarregable d'allà esta corrupte (falla un css, el status.css, i es veu tot molt diferent). Jo el vaig treure d'aquesta web, i el podeu descarregar d'aquí també.

Instal·lar-ho es senzillíssim. Només cal copiar els arxius dintre del directori "html" de la teva instal·lació. En una debian, per exemple, es tan senzill com:

wget http://tomas.cat/blog/sites/default/files/nagios-nuvola-1.0.3.tar_.gz
mkdir nuvola
cd nuvola
tar zxvf ../nagios-nuvola-1.0.3.tar_.gz
cp -a html/* /usr/share/nagios3/htdocs/
cp -a html/stylesheets/* /etc/nagios3/stylesheets/.

I llestos, ja hem millorat l'aspecte del nostre nagios!

Primer exemple d'execució remota de pstools: winps.sh

La següent missió era fer scripts que executessin les diferents pstools remotament. Vaig començar fent-ne un per cada, pero vaig trobar que tots compartien molta part de codi, així que vaig decidir crear un script generic, psexec.sh (en "honor" al psexec de les pstools), al que li poguessim passar el nom del servidor i la eina que voliem executar, amb els seus parametres. I després l'unic que ens quedaria seria crear un wrapper per cada comanda que ens fes la feina mes còmoda.

El script ha de comprovar si les credencials del fitxer són bones, i demanar-ne d'altres si no ho són. Un cop autenticat, ha de comprovar si existeixen les pstools o no, i copiar-les en cas que no.

En la historia completa podreu veure el codi del psexec.sh i d'un wrapper d'exemple, el winps.sh. Recordeu que per funcionar, necessiten dels fitxers winvars.sh i cp_pstools.sh, que apareixien en l'entrada anterior.

Copiant automàticament les pstools al servidor windows des del teu linux

En la línia en la que anàvem... Què passa si volem fer servir les pstools en 50 servidors? Una idea és crear una unitat compartida i que tots les executin des d'allà. Pero si tenim alguns en unes xarxes, unes en unes altres (fins i tot en DMZ), amb dominis i sense... No podria haver alguna forma còmoda de copiar-los?

Doncs per aquest motiu he creat aquest petit script, que fa exactament això: copiar les pstools al servidor que volguem. Primer munta la unitat cifs (amb smbmount), després copia els fitxers i després la desmunta.

Està pensat per ser cridat des d'altres scripts. Per exemple, si fem un "winps", primer que comprovi si estan les pstools instal·lades, i si no ho estan, que les copii. Per això, posarem un fitxer de variables que puguin fer servir tots els scripts, de forma que si volem canviar algun parametre no haguem de modificar-los tots. A aquest fitxer li direm "winvars.sh".

En l'article complet podeu mirar el codi i descarregar el fitxer.

Desconnectant usuaris de l'escriptori remot (terminal server) de windows

Intentes connectar-te via remote desktop (terminal server) al servidor, però et trobes que ja hi ha gent connectada. El maleït missatge:

You can't connect!

Què fer en aquest cas? Doncs molt senzill. Donat que tenim la nostra flamant eina winexe , podem fer un petit script que ens faciliti la vida:

#!/bin/bash

[ $# -lt 1 ] && echo "Error: Missing argument" && echo "Use: $0 server [disc #session]" && exit

[ ! -z "$2" ] && [ $2 != disc ] && echo "Error: Can't understand second argument" && echo "Use: $0 server [disc #session]" && exit
[ "$2" == "disc" ] && echo "Disconnecting session $3 from server $1..." && winexe //$1 "logoff $3" -A secretfile && exit
echo "Listing server $1 sessions:"
winexe //$1 "query session" -A secretfile

L'arxiu "secretfile" és opcional, és per no haver de posar usuari i contrassenya. El seu contingut és aquest:

domain=YOURDOMAIN
username=user
password=pass

Es un script sense gaire control d'errors, pero et permet veure qui hi ha connectat:

user@server:~/$ ts.sh server2
Listing server server2 sessions:
SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
>                            user1                          0    Disc    rdpwd
rdp-tcp                                 65536  Listen  rdpwd
                   Administrator             3  Disc    rdpwd
                   user2                     1  Disc    rdpwd
console                                     5  Conn    wdcon
user@server:~/$

En aquest servidor ja no s'hi pot entrar. Veiem que tothom esta en estat "disconnected", amb la qual cosa no hi ha ningú treballant. Escollim l'usuari que ens caigui pitjor, i el fem fora:

user@server:~/$ ts.sh server2 disc 1
Disconnecting session 1 from server server2...
user@server:~/$ ts.sh server2
Listing server server2 sessions:
SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
>                  user1                  0  Disc    rdpwd
rdp-tcp                                 65536  Listen  rdpwd
                   Administrator             3  Disc    rdpwd
console                                     5  Conn    wdcon

Et voilà! ja tenim una sessió lliure per connectar-nos a administrar aquest servidor.

Evidentment és molt millor que tothom tanqui el terminal server quan acabi de treballar. Però si has de compartir servidors amb despistats, t'has de buscar la vida...

Contingut sindicat