Ton problème peut se voir de 2 façons (je n'ai pas très bien compris celle que tu cherches à réaliser) :
A) détecter le code mort et le supprimer des sources
B) avoir le binaire le plus petit possible.
Pour B, essaye d'utiliser les options de gcc adéquates, puis un coup de strip(1) devrait faire l'affaire. Sauf si tu charge ton code dynamiquement (dlopen,...).
Pour A, tu pourrais peut-être comparer la liste des symboles entre le binaire complet et allègé.
Cette méthode n'est pas fiable. Alors oui, on peut commencer par tester si $0 est absolut où relatif, rechercher le $PATH, résoudre les éventuels liens symboliques parents (../../bin/binary), les races entre le chargement du programme et le test de $0, le fait qu'on passe l'argv (avec argv[0]) en plus du nom du binaires au syscall excve ("The first argument, by convention, should point to the filename associated with the file being executed", pas obligatoire),... Bref c'est pas top.
La meilleure solution sous linux est de regarder la cible du lien /prod/[mypid]/self.
Ceci dit, je ne vois pas comment connaître le répertoire du binaire résoud totalement le problème mentionné. J'opterais perso pour un mode de compilation en devel/release, plus une surcharge par variable d'environement (export PROG_DATA=~/devel/data).
Posté par benja .
En réponse au message swap.
Évalué à 2.
Qui restent inactives ou qui n'accèdent tout simplement plus à toutes les pages de mémoire qui leurs ont été allouées... Évidemment c'est moins chouette avec les garbage collectors qui parcourent inconditionnellement l'ensemble du tas :^)
[ Btw, il me semble avoir entendu parler (d'un projet/recherche) d'une implémentation de gc qui s'appuyerait sur des indications du kernel justement : le problème étant qu'un processus n'a pas les informations d'accès et de pagination que le kernel a, rendant certaines optimisations impossibles pour les gc, aussi il ne sait pas tirer partie de la mmu matérielle. ]
Il n'y a pas que linux vs MS dans la vie :p
«OpenBSD 3.3 shipped May 1, 2003, and was the first operating system to include W^X.»
«W^X makes use of the NX bit on Alpha, AMD64, HPPA, and SPARC processors.»
Avec en prime une émulation utilisant aussi les registres de segmentation pour les IA-32 n'ayant pas de bit NX; ce que Windows ne fait pas (ce n'est pas encore clair pour moi de savoir si linux sans PaX le fait). [source wikipedia]
Il est tout à fait possible de faire un mapping du genre:
- root_vg/alpha_root_lv -> /dev/sda
- root_vg/alpha_swap_lv -> /dev/sdb
- root_vg/alpha_usr_local_lv -> /dev/sdc
- root_vg/alpha_home_lv -> /dev/sdd
- ...
fstab:
- /dev/sda -> /
- /dev/sdb -> swap
- /dev/sdc -> /usr/local
- /dev/sdd -> /home
- ...
ou éventuellement utiliser un LABEL pour plus de facilité...
Ou bien, il est possible de carrément faire un volume-group avec devices que tu passe à kvm, mais cela risque d'être un peu plus complexe à administrer.
Oui en effet, il doit y avoir moyen de bidouiller avec un fichier à part. Mais le cas de changer les LD_FLAGS doit arriver si souvent que lancer une target à la main n'est pas la mer à boire amha.
N'y a-t-il pas moyen de dire à lighttpd de faire proxy quand il n'y a pas de vhost. Tu mets ce que tu veux derrière ensuite (un tarpit, un netcat dans un inetd (ça marche ça??)).
> OMake, ce dernier, écrit en OCaml
Je penses que tu confonds avec ocamlbuild, inclus au language ocaml depuis la version 3.10. C'est du très bon effectivement, mais il faut pouvoir aussi mettre les mains dans le cambouis pour faire des trucs exotiques et la documentation n'est pas, comment dire, abondante...
OMake est encore un exemple de template-Makefile (à la GNUStep-make, kbuild, ...).
> Ou qui ne refasse que la phase d'édition de liens quand on change LDFLAGS.
un truc du genre ?
unlink:
find . -name \*.a -o -name $(EXE) | xargs rm -f
> Et d'ailleurs il n'y a pas de solution de template makefile générique. La plus évolué étant le système du kernel Linux.
GNUStep, L4/fiasco (inspirée de kbuild), Kbuild ça fait dejà 3. Viennent ensuite les ports (pkgsrc, FreeBSD, OpenBSD), les chaines de compilations emarquées, ...
s/n'y a pas/y a plein/g. Je vois mal comment cela pourrait être générique, cela démontre plustôt la souplesse de make; il y moyen de faire de trucs propre, aussi ;) .
Pas nécessairement, si l'on proscrit le make récursif. Et qu'on accepte de devoir lancer make 2 fois pour avoir les dépendance correctes : l'idée c'est de générer les .depends en même temps que la compilation, et comme ça ne change pas souvent, la plupart du temps c'est suffisant (pas besoin de cible spéciale "depend"). http://mad-scientist.net/make/autodep.html pour les curieux.
http://varnish-cache.org est aussi pas mal aussi... Dans le genre performant mais avec une configuration basique assez simple. Il faut dire qu'à l'instar de squid il ne fait que cela, mais il le fait bien ! (pour couper l'herbe sous le pied du troll, il est vrai que squid fait bien plus de choses).
Ne serait-il-pas plus simple (et plus sûr cf. le point sur USE adb; update anotherdb.table qui ne marche pas) d'installer 2 instances de mysql sur chaque machine ? Vu que dans le setup actuel les 2 services sont déja sur des instances séparées.
Il y a http://www.tarsnap.com qui propose un service avec une emphase sur la crypto. En bonnus, les profits sont reversés au projet FreeBSD. À essayer (en tout cas l'utilisation à l'air hyper simple http://www.tarsnap.com/usage.html ).
# cd /opt/R-2.11.0/
# ./configure --prefix=/opt/R-2.11.0/
# make
# make install
Miam ! :-) De la bonne install bien crade....
PS: le préfix indique généralement la racine dans laquelle il va s'installer le programme (en respectant une certaine convention: binaires dans bin/, librairies dans lib/, etc...). De même, l'os doit être paramètré pour utiliser ces répertoire. Si tu n'utilise pas un prefix standard (càd préconfiguré sur ton système, /usr et généralement /usr/local, le premier étant "réservé" aux paquets officiels), tu dois changer deux paramètres:
1) les chemins de recherche des librairies partagées : soit d'une manière globale au moyen du fichier /etc/ld.so.conf (ou ajouter un fichier dans /etc/ld.so.d) suivit d'une exécution de 'ldconfig' pour regénérer le cache; soit au moyen de la variable d'environement LD_LIBRARY_PATH.
2) les chemins de recherche d'exécutables par le shell: avec la variable d'environement PATH (+ commande rehash pour les c-shells).
Dans ton cas (installation de version en //), je pense que tu peux oublier de modifier ld.so pour éviter tout risque de conflit de version ou éviter que le loader mélanger les librairies des différentes installations. Comme le suggère Anglade, fait un script qui modife l'environement avant de lancer le bon binaire.
[^] # Re: J'oubliais...
Posté par benja . En réponse au message Forcer le verrouillage de l'écran de veille sous Gnome. Évalué à 1.
Il sont bien pénibles les moinsseurs, ils cachent la solution :-/
En tout cas, merci pour ta recherche.
[^] # Re: Template programming
Posté par benja . En réponse au message Faire une réduction de code en supprimant les fonctions non utilisées. Évalué à 1.
Ton problème peut se voir de 2 façons (je n'ai pas très bien compris celle que tu cherches à réaliser) :
A) détecter le code mort et le supprimer des sources
B) avoir le binaire le plus petit possible.
Pour B, essaye d'utiliser les options de gcc adéquates, puis un coup de strip(1) devrait faire l'affaire. Sauf si tu charge ton code dynamiquement (dlopen,...).
Pour A, tu pourrais peut-être comparer la liste des symboles entre le binaire complet et allègé.
[^] # Re: fichier de configuration ?
Posté par benja . En réponse au message Savoir où chercher les données utilisées après un make install. Évalué à 0.
Cette méthode n'est pas fiable. Alors oui, on peut commencer par tester si $0 est absolut où relatif, rechercher le $PATH, résoudre les éventuels liens symboliques parents (../../bin/binary), les races entre le chargement du programme et le test de $0, le fait qu'on passe l'argv (avec argv[0]) en plus du nom du binaires au syscall excve ("The first argument, by convention, should point to the filename associated with the file being executed", pas obligatoire),... Bref c'est pas top.
La meilleure solution sous linux est de regarder la cible du lien /prod/[mypid]/self.
Ceci dit, je ne vois pas comment connaître le répertoire du binaire résoud totalement le problème mentionné. J'opterais perso pour un mode de compilation en devel/release, plus une surcharge par variable d'environement (export PROG_DATA=~/devel/data).
[^] # Re: J'oubliais...
Posté par benja . En réponse au message Forcer le verrouillage de l'écran de veille sous Gnome. Évalué à 1.
Oui mais pour cela il faut avoir un gnome/gconf-editor sous la main... Vertebrées où pas ? Telle est la question !
[^] # J'oubliais...
Posté par benja . En réponse au message Forcer le verrouillage de l'écran de veille sous Gnome. Évalué à -1.
Une fois que tu as trouvé de quelle clef gconf il s'agit, merci de nous en faire part :-)
# * Le titre est obligatoire
Posté par benja . En réponse au message Forcer le verrouillage de l'écran de veille sous Gnome. Évalué à 2.
http://library.gnome.org/admin/system-admin-guide/stable/gconf-7.html.en
[^] # Re: Explication possible
Posté par benja . En réponse au message swap. Évalué à 2.
Qui restent inactives ou qui n'accèdent tout simplement plus à toutes les pages de mémoire qui leurs ont été allouées... Évidemment c'est moins chouette avec les garbage collectors qui parcourent inconditionnellement l'ensemble du tas :^)
[ Btw, il me semble avoir entendu parler (d'un projet/recherche) d'une implémentation de gc qui s'appuyerait sur des indications du kernel justement : le problème étant qu'un processus n'a pas les informations d'accès et de pagination que le kernel a, rendant certaines optimisations impossibles pour les gc, aussi il ne sait pas tirer partie de la mmu matérielle. ]
[^] # Re: Encore un journal imbitable
Posté par benja . En réponse au journal Supervisor Mode Execution Protection. Évalué à 7.
Il n'y a pas que linux vs MS dans la vie :p
«OpenBSD 3.3 shipped May 1, 2003, and was the first operating system to include W^X.»
«W^X makes use of the NX bit on Alpha, AMD64, HPPA, and SPARC processors.»
Avec en prime une émulation utilisant aussi les registres de segmentation pour les IA-32 n'ayant pas de bit NX; ce que Windows ne fait pas (ce n'est pas encore clair pour moi de savoir si linux sans PaX le fait). [source wikipedia]
[^] # Re: Experience personnelle.
Posté par benja . En réponse au message LVM et KVM, le mariage impossible ?. Évalué à 2.
- root_vg/alpha_root_lv -> /dev/sda
- root_vg/alpha_swap_lv -> /dev/sdb
- root_vg/alpha_usr_local_lv -> /dev/sdc
- root_vg/alpha_home_lv -> /dev/sdd
- ...
fstab:
- /dev/sda -> /
- /dev/sdb -> swap
- /dev/sdc -> /usr/local
- /dev/sdd -> /home
- ...
ou éventuellement utiliser un LABEL pour plus de facilité...
Ou bien, il est possible de carrément faire un volume-group avec devices que tu passe à kvm, mais cela risque d'être un peu plus complexe à administrer.
[^] # Re: J'attends désespérément un moteur de production potable...
Posté par benja . En réponse à la dépêche Redo, un remplaçant de choix pour Make. Évalué à 1.
[^] # Re: J'attends désespérément un moteur de production potable...
Posté par benja . En réponse à la dépêche Redo, un remplaçant de choix pour Make. Évalué à 1.
[^] # Re: make ?
Posté par benja . En réponse à la dépêche Redo, un remplaçant de choix pour Make. Évalué à 2.
# proxy
Posté par benja . En réponse au message lighttpd, ne répondre que pour les vhosts. Évalué à 2.
[^] # Re: J'attends désespérément un moteur de production potable...
Posté par benja . En réponse à la dépêche Redo, un remplaçant de choix pour Make. Évalué à 0.
Je penses que tu confonds avec ocamlbuild, inclus au language ocaml depuis la version 3.10. C'est du très bon effectivement, mais il faut pouvoir aussi mettre les mains dans le cambouis pour faire des trucs exotiques et la documentation n'est pas, comment dire, abondante...
OMake est encore un exemple de template-Makefile (à la GNUStep-make, kbuild, ...).
[^] # Re: make ?
Posté par benja . En réponse à la dépêche Redo, un remplaçant de choix pour Make. Évalué à 1.
un truc du genre ?
unlink:
find . -name \*.a -o -name $(EXE) | xargs rm -f
[^] # Re: make ?
Posté par benja . En réponse à la dépêche Redo, un remplaçant de choix pour Make. Évalué à 2.
GNUStep, L4/fiasco (inspirée de kbuild), Kbuild ça fait dejà 3. Viennent ensuite les ports (pkgsrc, FreeBSD, OpenBSD), les chaines de compilations emarquées, ...
s/n'y a pas/y a plein/g. Je vois mal comment cela pourrait être générique, cela démontre plustôt la souplesse de make; il y moyen de faire de trucs propre, aussi ;) .
[^] # Re: make ?
Posté par benja . En réponse à la dépêche Redo, un remplaçant de choix pour Make. Évalué à 1.
http://mad-scientist.net/make/autodep.html pour les curieux.
[^] # Re: Retour sur Utilisation
Posté par benja . En réponse à la dépêche (Oracle VM) VirtualBox 4.0. Évalué à 5.
Il n'y a que moi qui trouve que c'est énorme pour les tâches demandées ? Le load average doit être assez proche de 0, non ?
> Un Poste sous Windows 2000 Pro
Ah ceci explique cela... (même si c'est étrange tout de même de mélanger serveur et workstation)
# plop
Posté par benja . En réponse au message Comment concaténer des chemins de façon plus simple sous Bash ?. Évalué à 4.
2 rien
[^] # Re: C'est un problème indécidable
Posté par benja . En réponse au message Lister les commandes appelées par un script. Évalué à 4.
[^] # Re: reverse proxy... that's it !
Posté par benja . En réponse au message Problématique changement Firewall. Évalué à 1.
[^] # Re: RTFM ?
Posté par benja . En réponse au message Réplication de base MySQL. Évalué à 2.
Just my 2€c.
[^] # Re: Opera, Qt, ...
Posté par benja . En réponse au journal Mon bon vieux Nokia E71.. Évalué à 1.
[^] # Re: bah euh
Posté par benja . En réponse au message chiffrer un email après réception en clair. Évalué à 1.
[^] # Re: répertoire d'installation. Pourquoi pas le répertoire personnel ?
Posté par benja . En réponse au message Installer et appeler plusieurs versions d'un programme. (exple : R). Évalué à 2.
# ./configure --prefix=/opt/R-2.11.0/
# make
# make install
Miam ! :-) De la bonne install bien crade....
PS: le préfix indique généralement la racine dans laquelle il va s'installer le programme (en respectant une certaine convention: binaires dans bin/, librairies dans lib/, etc...). De même, l'os doit être paramètré pour utiliser ces répertoire. Si tu n'utilise pas un prefix standard (càd préconfiguré sur ton système, /usr et généralement /usr/local, le premier étant "réservé" aux paquets officiels), tu dois changer deux paramètres:
1) les chemins de recherche des librairies partagées : soit d'une manière globale au moyen du fichier /etc/ld.so.conf (ou ajouter un fichier dans /etc/ld.so.d) suivit d'une exécution de 'ldconfig' pour regénérer le cache; soit au moyen de la variable d'environement LD_LIBRARY_PATH.
2) les chemins de recherche d'exécutables par le shell: avec la variable d'environement PATH (+ commande rehash pour les c-shells).
Dans ton cas (installation de version en //), je pense que tu peux oublier de modifier ld.so pour éviter tout risque de conflit de version ou éviter que le loader mélanger les librairies des différentes installations. Comme le suggère Anglade, fait un script qui modife l'environement avant de lancer le bon binaire.