RAILS sur PostgreSQL pour léopard

Posted by Fabien Jakimowicz Fri, 09 May 2008 11:57:00 GMT

 Vous avez déjà franchi le pas du système d’exploitation en passant sur un vrai système pleinement utilisable en tant que développeur mais aussi utilisateur final voulant du fonctionnel sans taper 15k commandes, c’est bien.

Vous avez aussi fait l’étape d’arrêter d’essayer de refaire le monde avec votre framework web et utilisez un vrai framework objet comme il se doit, c’est bien.

Il ne reste plus qu’à faire de même avec votre base de données. Seul soucis, mysql (voir sqlite) est agréable par sa simplicité et son zeroconf ou presque. Mais installer postgreSQL n’est pas si difficile que cela … en quelques étapes. De plus, RoR offrant maintenant des rake tasks pour créer et supprimer les base de données, vous n’aurez pas ou presque pas de commande spécifique à mémoriser.

Première étape : mettez à jour votre ports et les logiciels présents.

 

$> sudo port selfupdate
$> sudo port upgrade outdated

 

Seconde étape : installation de postgreSQL serveur et client.

On va se simplifier un poil la tâche en installant le serveur seul, les dépendances installant le client.

$> sudo port install postgresql83-server

--->  Fetching postgresql83
--->  Attempting to fetch postgresql-8.3.1.tar.bz2 from http://ftp8.us.postgresql.org/postgresql/source/v8.3.1/
--->  Verifying checksum(s) for postgresql83
--->  Extracting postgresql83
--->  Configuring postgresql83
--->  Building postgresql83
--->  Staging postgresql83 into destroot
--->  Installing postgresql83 8.3.1_0

To use the postgresql server, install the postgresql83-server port
--->  Activating postgresql83 8.3.1_0
--->  Cleaning postgresql83
--->  Fetching postgresql83-server
--->  Verifying checksum(s) for postgresql83-server
--->  Extracting postgresql83-server
--->  Configuring postgresql83-server
--->  Building postgresql83-server with target all
--->  Staging postgresql83-server into destroot
--->  Creating launchd control script
###########################################################
# A startup item has been generated that will aid in
# starting postgresql83-server with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist
###########################################################
--->  Installing postgresql83-server 8.3.1_0

To create a database instance, after install do
 sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
 sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
 sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'

To tweak your DBMS, consider increasing kern.sysv.shmmax by adding an increased kern.sysv.shmmax .. to /etc/sysctl.conf
--->  Activating postgresql83-server 8.3.1_0
--->  Cleaning postgresql83-server

 

On va se contenter d’écouter ce qu’on nous dis et exécuter les commandes suivantes (vous pouvez aussi copier-coller depuis votre shell pour simplifier):

$> sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
$> sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
$> sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locales
  COLLATE:  C
  CTYPE:    UTF-8
  MESSAGES: C
  MONETARY: C
  NUMERIC:  C
  TIME:     C
The default database encoding has accordingly been set to UTF8.
initdb: could not find suitable text search configuration for locale UTF-8
The default text search configuration will be set to "simple".

fixing permissions on existing directory /opt/local/var/db/postgresql83/defaultdb ... ok
creating subdirectories ... ok
selecting default max_connections ... 20
selecting default shared_buffers/max_fsm_pages ... 2400kB/20000
creating configuration files ... ok
creating template1 database in /opt/local/var/db/postgresql83/defaultdb/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb
or
    /opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/defaultdb -l logfile start

 

Troisième étape : lancement du serveur au démarrage de la machine

 

$> sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist

 

Quatrième étape : modification de l’environnement

Les binaires de postgreSQL ne sont pas accessibles directement, une petite modification de votre variable PATH vous donnera pleinement accès à tous les binaires et les scripts rails de création/suppression de base de données marcheront comme un charme. J’ai effectué cette modification dans le fichier .bash_login de mon utilisateur normal :

export PATH=~/bin:/opt/local/bin:/opt/local/sbin:/opt/local/apache2/bin:/opt/local/lib/postgresql83/bin:$PATH

 

Détail ayant son importance, il vous faut soit relancer un shell, soit lancer la commande dans le shell courant pour pouvoir espérer poursuivre l’installation.

Cinquième étape : installation pour rails

Il y a 3 gems ruby différents pour postgreSQL. Ca fait un peu beaucoup. Quelques recherches nous orientent rapidement vers postgres :

  • officiellement maintenu par la communauté postgreSQL
  • support natif et rapide comme le gem mysql
  • dernières releases datent de cette année, alors que pour d’autres on remonte à 2006

On tente donc une installation qui va échouer vu que le postgres à été compilé avec le seul support de l’architecture i386. Il nous faut donc lancer la commande suivante :

$> sudo env ARCHFLAGS="-arch i386" gem install postgres
Building native extensions.  This could take a while...
Successfully installed postgres-0.7.9.2008.01.28
1 gem installed
Installing ri documentation for postgres-0.7.9.2008.01.28...
Installing RDoc documentation for postgres-0.7.9.2008.01.28...

 

Sixième étape : gérer les droits et accès sur une machine de développement

Vous développez sur votre machine personnelle et voulez donc éviter la complexité d’avoir un serveur SQL avec une authentification … comme votre setup actuel sur MySQL. Pour cela, il vous faudrait vous connecter en user postgres avec le role postgres mais ca semble compliqué. Soit, créons donc un autre super-utilisateur pour votre login. Je vous laisse faire la substitution vous même :

$> createuser --superuser rider -U postgres

 

On me signale qu’il est bon de rappeler que cette configuration est  à proscrire en environnement de production ;)

Dernière étape : tester dans une application existante utilisant l’antique MySQL

On substitue l’adapter et l’user dans le fichier database.yml :

  adapter: postgresql
  username: postgres

 

Et on lance les petites commandes pour tester que tout va bien :

$> rake db:create:all
$> rake db:migrate
$> rake db:fixtures:load
$> rake test:units

 

Sources :

Posted in | no comments |

timemachine & samba sous linux

Posted by Fabien Jakimowicz Fri, 28 Mar 2008 17:00:00 GMT

Timemachine est un outil très pratique mais un peu contraignant : il faut brancher son disque externe pour profiter des sauvegardes. Ce qui amène le risque d’oublier de le brancher surtout sur un ordinateur portable. Cependant, la beta de léopard avait offert la possibilité de sauvegarder sur un serveur de fichiers type samba, mais cette fonctionnalité fut rapidement bloquée lors du lancement officiel pour des raisons de soit disante sécurité (les sauvegardes seraient non fiables).

Après plusieurs mois d’utilisation de timemachine sur un serveur linux fournissant du samba le tout via wifi (en 802.11n pour un minimum de performances), je n’ai constaté aucun problème de fiabilité des données. Il suffit de lancer une commande simple dans le terminal pour que timemachine voit de nouveau les montages réseau, de plus, cette commande résiste aux reboots :

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

 

A noter que cette commande n’est actuellement plus nécessaire suite à la sortie de timecapsule et des mises à jour qui ont suivi. Petit bémol cependant : elle ne semble fonctionner qu’avec des serveurs samba, exit donc les serveurs NFS plus performants et moins gourmands en mémoire que leurs homologues samba. Ceci dis, cela permet d’obtenir un timemachine utilisant un nas dans un environnement relativement standard.

Voulant maintenant utiliser timemachine sur une de mes machine de bureau et donc vierge de tout disque timemachine, il me faut créer le volume. J’ai donc monté le volume souhaité via le Finder, choisi celui-ci dans la configuration de timemachine et lancé la première opération de backup. Mais il semble qu’il y ait une limite qu’apple a décidé d’imposer aux disques réseaux pour vendre sa timecapsule : la création de l’image disque échoue. Un petit tour dans les logs et sur le filer pour se rendre compte qu’il y a bien une étape de création d’une image disque, qu’elle est correctement écrite mais au moment d’en faire le montage cela échoue ‘magiquement’ :

Mar 27 22:46:44 cola /System/Library/CoreServices/backupd[36785]: Backup requested by user
Mar 27 22:46:44 cola /System/Library/CoreServices/backupd[36785]: Starting standard backup
Mar 27 22:46:44 cola /System/Library/CoreServices/backupd[36785]: Creating disk image /Volumes/timemachine-cola/cola_001a92566c28.sparsebundle
Mar 27 22:46:52 cola kernel[0]: hfs: Initializing the journal (joffset 0x322000 sz 0x800000)...
Mar 27 22:46:55 cola com.apple.KernelEventAgent[63]: KernelEventAgent: sysctl_queryfs: No such file or directory
Mar 27 22:46:55 cola /System/Library/CoreServices/backupd[36785]: Backup requested due to disk attach
Mar 27 22:46:55 cola /System/Library/CoreServices/backupd[36785]: Error 45 creating backup disk image
Mar 27 22:46:55 cola /System/Library/CoreServices/backupd[36785]: Failed to create disk image
Mar 27 22:46:55 cola /System/Library/CoreServices/backupd[36785]: Backup failed with error: 20

 

L’ensemble des fichier de l’image est effacé après échec de la création. Mais une soixantaine de mega-octets ont tout de même été copiés. Apprenant qu’il faut copier les fichiers avant leur effacement pour les remettre juste après afin d’obtenir un timemachine fonctionnel, on ne peut penser qu’il ne s’agit que d’un hack de dernière minute de la part d’Apple pour bloquer les disques réseaux n’affichant pas de pomme. Un petit watch exécuté sur le serveur de fichiers pour copier constamment les données de l’image disque lors de sa création et le tour est joué :

watch -n 0.1 cp -Rvpd . /tmp/timemachine

 

On remet les fichier en place et … timemachine peut maintenant utiliser le nas pour sauvegarder.

Posted in | no comments |

afficher ses filers dans le finder

Posted by Fabien Jakimowicz Sun, 16 Mar 2008 23:33:00 GMT

Je possède quelques serveurs de fichiers sous linux diffusant en samba et nfs. J’ai recemment découvert que sous léopard la vitesse était x10 en utilisant nfs plutôt que samba.

Afin d’obtenir un montage systématique de mes serveurs sur mes workstations léopard, j’ai fouillé un peu sur le google pour trouver qu’il existait un service d’annonce de service sous linux que léopard peut comprendre : avahi.

Testons donc cette solution, on installe le paquet (avahi-daemon dans mon cas sur debian) et on configure un service. C’est un fichier xml indiquant au daemon quel service il doit annoncer. Pour un exemple simple d’annonce d’un serveur samba, ca donne ca :

?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
    <name replace-wildcards="yes">%h filer</name>
    <service>
        <type>_smb._tcp</type>
        <port>139</port>
        <host-name>cortex.storage.geekspirit.net</host-name>
    </service>
</service-group>

 

On attend … encore … et rien sur la workstation. Je pense à ma topologie réseau un peu spéciale : mes serveurs ne sont pas sur le même réseau que mes workstations. Exit donc les possibilité de broadcast qui pourraient faire correctement marcher un service tel que celui-ci. Mais pas grave, fouillons les options de configuration pour voir si un moyen de transmettre les données d’un avahi à l’autre. Et ca paie : l’attribut enable-reflector permet cette petite fonctionnalité. On installe donc un petit avahi sur le firewall qui est situé entre les 2 réseaux et qui fait le pont, on mets l’option à yes et … ca marche !

Mais ca ne me convient qu’à moitié : je préfère du nfs. On tente donc le coup avec cette fois ci ce service :


<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
<name replace-wildcards="yes">pics</name>
<service>
    <type>_nfs._tcp</type>
    <port>2049</port>
    <txt-record>path=/exports/pics</txt-record>
    <host-name>cortex.storage.geekspirit.net</host-name>
</service>
</service-group>

 

Et déception, rien ne s’affiche. Après quelques recherches, j’apprends que sous léopard ca ne marche pas avec nfs. Mais un script permet de rechercher les services nfs puis s’occupe de monter tout seul chaque point de montage. Ca serait presque parfait si on pouvait même le lancer au login. Le seul hic, c’est qu’en mettant le script dans les startup items, ca ne fait qu’ouvrir xcode avec le script en question. Une petite astuce pour lancer des scripts : retirer l’extension. Ca n’est pas très beau, mais léopard croit voir un script unix et lance un terminal pour l’exécuter.

Et voila, à l’invite on se retrouve avec un beau montage tout fait tout propre, remis à jour dynamiquement grace à bonjour et toutes les personnes squattant ici avec un mac pourront maintenant voir directement les serveurs sur lesquels se servir ou m’offrir.

Posted in | no comments |

Installation de léopard sur pc x86, 2e round

Posted by Fabien Jakimowicz Fri, 14 Mar 2008 11:55:00 GMT

Après avoir testé avec succès l’installation de la version iATKOS sur ma configuration :

  • Asus P5B Deluxe
  • Intel Core 2 Duo 6300
  • 4Go 800Mhz
  • GeForce 7600GT
  • 300Go sata

J’ai décidé de tenter une autre version de l’installer et ce pour plusieurs raisons. La première est un problème qui devient gênant dès lors qu’on possède plus d’une machine à démarrer : il faut démarrer à l’aide du CD. Certes, des méthodes permettant de s’affranchir de cette méthode existe, mais pourquoi ne pas les avoir incluses au DVD d’installation ? Mes autres problèmes sont plus d’ordre de performance :  je sens qu’il doit traîner encore quelques phases d’émulation dans la machine, ce qui serait normal vu que je n’ai pu choisir le kernel vanilla. Enfin, après quelques tests et prises de renseignements sur divers forums, les drivers du dvd kalyway sont plus récents que ceux fournis sur l’iATKOS. J’ai pu constater que le driver vidéo détecte la bonne quantité de mémoire vidéo sur le système kalyway, alors que du coté iATKOS cela n’était pas le cas. Bien sur, cela est uniquement dû au driver et non à la méthode d’installation (NVInject dans les 2 cas, version 0.1.3 contre 0.1.5). Pour en finir, j’ai aussi testé le multi carte graphiques sans succès avec l’iATKOS et j’aimerai bien savoir si il est possible de faire fonctionner plusieurs cartes pour un même système, je pense que cela pourrait intéresser certaines personnes qui me lise ici.

DISCLAIMER: Cet article est disponible dans le seul but informatif. Je vous conseille fortement de vous tourner directement vers du matériel apple pour vous éviter bien des problèmes voir des pertes de données. Je ne suis en aucun cas responsable de la destruction de vos données ni des abus que vous pourriez faire en utilisant les méthodes décrites ici.

Quoi qu’il en soit, après avoir un peu galéré pour les drivers réseau et son, voici un petit tutoriel fonctionnant sur la configuration cité plus haut avec les limites suivantes :

  • driver JMicron non testé
  • carte son en AC97 stéréo seulement, pas d’entrée
  • une seule des deux cartes réseaux interne fonctionnelle

Comme pour la précédente installation, il vous faudra vous assurer que vous ayez bien mis à jour votre bios et que vous l’ayez configuré de la facon la plus standard. Je ne parle même pas de l’overclocking ici vu comment je considère cette pratique comme contre-productive.

Ayant 2 installations différentes, j’ai pu constater quelques différences au niveau des drivers : ceux de kalyway sont plus frais, mais certains sont manquants dans mon cas (réseau et son). De plus, l’installation kalyway à la mauvaise idée de vouloir personnaliser le bureau avec un thème orange du plus mauvais effet. J’ai pu m’en sortir dans un premier temps avec une carte réseau gigabit 3com reconnue comme une 3c905 assez standard. Je vous conseille de récupérer ces fichiers :

  • driver réseau skge (pour puces marvell) : skge.kext.zip
  • driver son AC97 : AppleAzaliaAudio.kext.zip
  • nettoyeur de thème (vous pouvez le trouver sur le forum de kalyway, voir lien en bas du billet)

Pour ce qui est des fichiers à télécharger ailleurs, voici ce qu’il vous faut :

  • KALYWAY_LEO_10.5.1intel_SSE2_SSE3.zip : il contient une iso dont le sha1sum est fa572e8704cbb26779c4f497f8b949872b26362d
  • KalywayIntelCombo10.5.2.zip dont le checksum SHA1 est ab10d0f3b9331e6affce64b11ced1aa1759461cb

Il vous fait maintenant démarrer sur le dvd, j’ai utilisé le kernel ‘vanilla’ qui est le kernel fourni directement par apple sur son système. Si votre machine n’est pas très proche du matériel apple, passez votre chemin. Sinon, une pression sur F8 suivi de ‘vanilla’ peut vous faire gagner un peu en performances. Lors du chargement du noyau, le lecteur DVD est très sollicité faisant de nombreux aller-retours, cela semble normal et votre machine n’est pas plantée pour autant.

Le chargement de l’installeur s’en suit et un message vous indique la marche à suivre. Vous pouvez configurez votre disque en utilisant l’utilitaire de disque fourni dans le menu des utilitaires. J’ai opté pour un fs journalisé et case-sensitive pour me rapprocher le plus possible d’unix. Le boot choisi ici est GUID, mais vous pouvez utiliser MBR qui est censé marcher de la même façon.

Une fois le partionnement effectué, on peut rentrer dans le vif du sujet avec la configuration des options. Pour ma configuration j’ai opté pour la suivante :

  • Vanilla kernel + ACPI
  • NVInject gfnvidia
  • BOOT EFI guid

Il ne reste plus qu’a lancer l’installation et attendre. Il est possible que vous ayez l’impression que la progression soit freezée, c’est possiblement le cas si jamais le système à mis en veille la vidéo.

Au redémarrage, vous pouvez apprécier le boot sur disque dur directement. Mais les choses deviennent un peu plus complexes dès à présent. Il faut maintenant installer le support réseau et son, tout en migrant vers la version 10.5.2. Ayant eu des problèmes en voulant installer les drivers skge sur la 10.5.4 (écran de plantage habituel), je vous conseille de ne le faire qu’après la mise à jour 10.5.2. Cette dernière est d’ailleurs très simple à effectuer, vous dézippez le fichier KalywayIntelCombo10.5.2.zip , puis lancez l’installation. L’installation passe par un redémarrage, puis un autre sans avoir grand chose à l’écran.

Une fois redémarré, il ne reste plus que les 2 drivers pour apprécier léopard sur votre pc. Il vous faut donc les extensions noyaux téléchargées plus haut ainsi que le programme déjà installé pour vous par kalyway : kext helper. Cette application permet d’installer des extensions sans broyer la totalité du système. Vous devez juste glisser vos extensions dans la fenetre, renseignez votre mot de passe et validez. Vous devriez avoir un message vous indiquant alors qu’une nouvelle carte réseau à été détectée et il est même possible que ca fasse du son en l’affichant ;).

La dernière phase, nettoyer le beau thème par défaut orange. On décompresse l’archive Restore_Factory_Desktop_settings et on exécute.

Vous devriez avoir un léopard 10.5.2 avec un noyau standard ;)

PS : la distribution kalyway intègre de nombreux outils comme VLC ou Transmission. De plus, elle intègre quelques plugins sympathiques pour utiliser quicktime et d’autres formats que le mov de base.

Liens, sources :

Posted in | no comments |