Affichage des articles dont le libellé est Apple. Afficher tous les articles
Affichage des articles dont le libellé est Apple. Afficher tous les articles

lundi 1 juin 2009

Mac OS X 10.5: 64 ou 32 bits ?

A note époque les systèmes d'exploitations existent en 32-bit ou en 64-bit. Comme j'en ai déjà parlé précédemment, Mac OS X 10.5 ("Léopard") est une version combinée qui est à la fois 32-bit et 64-bit. De plus, comme Apple est occupé à passer de l'architecture PowerPC à l'architecture Intel, les exécutables Mac OS X sont (ou en tous cas, peuvent être) multi-architectures. Il s'agit des "Universal Binaries" dont je vous ai déjà parlé.

Sur mon iMac Intel sous Mac OS X 10.5 ("Léopard"), lorsque j'essaye de voir si un exécutable est 32-bit ou 64-bit, PowerPC ou Intel, j'utilise (par exemple) la commande file:
[pbn@albert] /Users/pbn>file /bin/ls
/bin/ls: Mach-O universal binary with 2 architectures
/bin/ls (for architecture i386): Mach-O executable i386
/bin/ls (for architecture ppc7400): Mach-O executable ppc
[pbn@albert] /Users/pbn>

... ceci est un "Universal Binary". Il contient des binaires pour deux architectures: i386, c'est à dire x86 32-bit, et ppc c'est à dire PowerPC 32-bit. C'est un peu décevant: où sont les binaires 64-bit ?

En fait, Mac OS X 10.5 ("Léopard"), peut faire tourner les exécutables 32-bit et 64-bit, mais la majorité des exécutables sont toujours 32-bit.

Sous, Mac OS X 10.5 ("Léopard"), même le kernel est 32-bit:
[pbn@albert] /Users/pbn>uname -a
Darwin albert 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; root:xnu-1228.12.14~1/RELEASE_I386 i386
[pbn@albert] /Users/pbn>file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386): Mach-O executable i386
/mach_kernel (for architecture ppc): Mach-O executable ppc


Cependant Cocoa, et donc les librairies (ou en bon français les bibliothèques) sont en 32-bit et 64-bit. Un exemple:
[pbn@albert] /Users/pbn>file /usr/lib/libSystem.dylib
/usr/lib/libSystem.dylib: Mach-O universal binary with 4 architectures
/usr/lib/libSystem.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc
/usr/lib/libSystem.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
/usr/lib/libSystem.dylib (for architecture i386): Mach-O dynamically linked shared library i386
/usr/lib/libSystem.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
[pbn@albert] /Users/pbn>

... voilà qui est plus intéressant. On constate ici que cette librairie est un "Universal Binary" qui contient quatre binaires différents:


32-bit
64-bit
PowerPC
ppc7400
ppc64
Intel
i386
x86_64


En fait la librairie /usr/lib/libSystem.dylib est particulièrement importante sous Mac OS X puisqu'elle contient entre autres toute la librairie glibc.

Il est logique que les librairies existent en 32-bit et 64-bit. En effet, pour pouvoir exécuter des exécutables 32-bit et 64-bit (compilés dynamiquement, en tous cas), il faut avoir quelque part les librairies à la fois en 32-bit et 64-bit.

vendredi 8 août 2008

version preliminaire 0.0.7 de munin node pour Mac OS X

En ce 08/08/2008, voici une nouvelle version de ma version préliminaire de munin-node pour Mac OS X.

Il y a maintenant six plugins:
cpu, df, load, processes, uptime, users

Bien entendu vous êtes libres d'écrire des plugins supplémentaires :)

Pour l'utiliser, téléchargez ce fichier et allez dans /usr/local et décompressez le fichier (créez /usr/local s'il n'existe pas déjà)
$ sudo mkdir /usr/local
$ cd /usr/local
$ sudo tar --preserve -zxvf munin-1.2.5-pbn-macosx-experimental-0.0.7.tar.gz

Un répertoire /usr/local/munin-1.2.5-pbn-experimental a été créé

Lisez ensuite la suite des instructions dans le fichier readme.txt

vendredi 18 juillet 2008

photo de mon site sur un des premiers iPhone 3G de Belgique

Un petit événement: cet après-midi, j'ai pu naviguer sur mon site à l'aide d'un des premiers iPhone 3G de Belgique. Voyez la photo:



Voici les entrées du log d'Apache:
194.78.xx.xx - - [18/Jul/2008:11:17:49 +0000] "GET / HTTP/1.1" 200 5995 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; fr-fr) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A345 Safari/525.20"
194.78.xx.xx - - [18/Jul/2008:11:17:49 +0000] "GET /images/powered_by_debian.png HTTP/1.1" 200 2761 "http://pierre.baudu.in/" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; fr-fr) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A345 Safari/525.20"
194.78.xx.xx - - [18/Jul/2008:11:17:49 +0000] "GET /images/64711.png HTTP/1.1" 200 3626 "http://pierre.baudu.in/" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; fr-fr) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A345 Safari/525.20"
194.78.xx.xx - - [18/Jul/2008:11:17:49 +0000] "GET /images/pbn_egypte.png HTTP/1.1" 200 265094 "http://pierre.baudu.in/" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; fr-fr) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A345 Safari/525.20"

samedi 12 juillet 2008

version préliminaire 0.0.5 de munin node pour Mac OS X

Voici une nouvelle version de ma version préliminaire de munin-node pour Mac OS X.

Cette version corrige quelques petits bugs par rapport à la précedente. En particulier le fichier
/var/run/munin/munin-node.pid n'est plus créé par Net::Server

Il y a toujours cinq plugins:
cpu, load, processes, uptime, users

Bien entendu vous êtes libres d'écrire des plugins supplémentaires :)

Pour l'utiliser, téléchargez ce fichier et allez dans /usr/local et décompressez le fichier (créez /usr/local s'il n'existe pas déjà)
$ sudo mkdir /usr/local
$ cd /usr/local
$ sudo tar --preserve -zxvf munin-1.2.5-pbn-macosx-experimental-0.0.5.tar.gz

Un répertoire /usr/local/munin-1.2.5-pbn-experimental a été créé

Lisez ensuite la suite des instructions dans le fichier readme.txt

mercredi 9 juillet 2008

version préliminaire 0.0.4 de munin-node pour Mac OS X

Voici une nouvelle version de ma version préliminaire de munin-node pour Mac OS X.

Cette version corrige quelques bugs par rapport à la précedente.
Il y a maintenant cinq plugins:
cpu, load, processes, uptime, users

Bien entendu vous êtes libres d'écrire des plugins supplémentaires :)

Pour l'utiliser, téléchargez ce fichier et allez dans /usr/local et décompressez le fichier (créez /usr/local s'il n'existe pas déjà)
$ sudo mkdir /usr/local
$ cd /usr/local
$ sudo tar --preserve -zxvf munin-1.2.5-pbn-macosx-experimental-0.0.4.tar.gz

Un répertoire /usr/local/munin-1.2.5-pbn-experimental a été créé

Lisez ensuite la suite des instructions dans le fichier readme.txt

samedi 5 juillet 2008

version préliminaire 0.0.3 de munin-node pour Mac OS X

Voici (enfin) une version préliminaire de munin-node pour Mac OS X

Comment l'installer ?

D'abord je télécharge le fichier
munin-1.2.5-pbn-macosx-experimental-0.0.3.tar.gz


Attention vous allez travailler en ligne de commande avec sudo. Soyez attentif...




Je vais dans dans /usr/local et je décompresse le fichier (je crée /usr/local s'il n'existe pas déjà)
$ sudo mkdir /usr/local
$ cd /usr/local
$ sudo tar --preserve -zxvf munin-1.2.5-pbn-macosx-experimental-0.0.3.tar.gz
Un répertoire /usr/local/munin-1.2.5-pbn-experimental a été créé

Je regarde la liste des groupes existants et de leur gid:
$ dscl . list /Groups gid | sort -n -k 2 | less

Je crée le groupe munin. ATTENTION: Je veille à lui donner un gid qui n'est pas encore utilisé:
$ sudo dscl . -create /Groups/munin gid 144
$ sudo dscl . -create /Groups/munin passwd 42ab7u

Je copie dans /Library/LaunchDaemons le fichier qui se trouve dans le répertoire
/usr/local/munin-1.2.5-pbn-experimental/copy_the_file_in_this_directory_to_Library_LaunchDaemons:
en faisant:
$ sudo cp -P /usr/local/munin-1.2.5-pbn-experimental/copy_the_file_in_this_directory_to_Library_LaunchDaemons/localhost.munin-node.plist
/Library/LaunchDaemons


Je n'oublie d'aller modifier le fichier /usr/local/munin-1.2.5-pbn-experimental/etc/munin/munin-node.conf
en y indiquant l'adresse IP de mon serveur munin en mettant allow ^10\.20\.10\.1 dans mon cas

Ensuite je redémarre la machine (ou, pour les utilisateurs avancés, je lance manuellement le démon en faisant launchctl start local.munin-node.plist)

... et voilà, munin-node est installé et tourne !

lundi 9 juin 2008

Voici enfin l'iPhone 3G !

Aujourd'hui à la WWDC 2008 à San Francisco, on s'y attendait mais...
Steve Jobs a présenté...
... le nouvel iPhone !

C'est l'iPhone 3G.
Comme son nom l'indique, il supporte la technologie 3G
Mais ce n'est pas tout:
  • il supporte le GPS
  • il ne coûte que $199 pour la version 8GB
  • il supporte bien entendu ce que son prédecesseur supportait déja: EDGE/GPRS, le WiFi, Google Mail
Il sort en Belgique, selon Steve Jobs, le 11 juillet...
(Mais c'est la théorie, en pratique, ce sera plus tard...)

Lien sur "The Unofficial Apple Weblog"
Lien officiel Apple (apple.com)
Lien officiel Apple Belgique

samedi 2 février 2008

Une commande Mac OS X peu connue: machine

Il y a quelques jours je vous parlais de la commande arch de Mac OS X.

Voyons aujourd'hui une autre commande peu connue, la commande machine.

Cette commande est un peu similaire à la commande arch dont je vous parlais l'autre fois. En fait la commande machine affiche le type de machine sur laquelle Mac OS X tourne.

Attention, l'architecture et le type de machine, ce n'est pas la même chose !

L'architecture, donnée par la commande arch, est ppc, ppc64, i386 ou x86_64.

Le type de machine, donnée par la commande machine, indique avec précision le type de processeur.

Exemple avec Mac OS X Tiger sur un Power Macintosh G3 Blue and white:
[pierre@blueandwhite] /Users/pierre>machine
ppc750
Exemple avec Mac OS X Léopard sur un iMac Intel 20-inch:
[pierre@albert] /Users/pierre>machine
i486

Voyons les pages de manuel de cette commande machine:

Mac OS X Tiger sur PowerPC:
MACHINE(1)                BSD General Commands Manual               MACHINE(1)

NAME
machine -- print machine type

SYNOPSIS
machine

DESCRIPTION
The machine command displays the machine type.

SEE ALSO
make(1)

HISTORY
The machine command is currently under development.

BSD July 26, 1991 BSD
Mac OS X Léopard sur Intel:
MACHINE(1)                BSD General Commands Manual               MACHINE(1)

NAME
machine -- print machine type

SYNOPSIS
machine

DESCRIPTION
The machine command displays the machine type.

SEE ALSO
arch(1), make(1)

HISTORY
The machine command is currently under development.

BSD July 26, 1991 BSD
... on constatera au passage que cette commande est toujours "currently under development", étonnant :)

mercredi 30 janvier 2008

Une commande Unix / Linux / Mac OS X peu connue: arch

Voyons aujourd'hui une commande Mac OS X peu connue: il s'agit de la commande arch.

Cette commande renvoie l'architecture de la machine.
Le résultat peut être:
  • ppc pour un Apple Macintosh basé sur un processeur PowerPC 32 bits (G3, G4, G5)
  • ppc64 pour un Apple Macintosh basé sur un processeur PowerPC 64 bits (G5)
  • i386 pour un Apple Macintosh basé sur un processeur x86 (Intel) 32 bits
  • x86_64 pour un Apple Macintosh basé sur un processeur x86_64 (Intel) 64 bits
  • ??? (à vérifier - probablement arm) pour un iPhone, qui fait tourner Mac OS X sur un processeur arm.

Voyons les pages de manuel de cette commande arch:

Mac OS X Tiger sur PowerPC:

ARCH(1) BSD General Commands Manual ARCH(1)

NAME
arch -- print architecture type

SYNOPSIS
arch

DESCRIPTION
The arch command displays the machine's architecture type.

SEE ALSO
machine(1)

Mac OS August 20, 1997 Mac OS

Mac OS X Leopard sur Intel:

ARCH(1) BSD General Commands Manual ARCH(1)

NAME
arch -- print architecture type or run selected architecture of a univer-
sal binary

SYNOPSIS
arch
arch [-h] [[-arch_name | -arch arch_name]...] prog [args ...]

DESCRIPTION
The arch command with no arguments, displays the machine's architecture
type.

The other use of the arch command it to run a selected architecture of a
universal binary. A universal binary contains code that can run on dif-
ferent architectures. By default, the operating system will select the
architecture that most closely matches the processor type. This means
that an intel architecture is selected on intel processors and a powerpc
architecture is selected on powerpc processors. A 64-bit architecuture
is preferred over a 32-bit architecture on a 64-bit processor, while only
32-bit architectures can run on a 32-bit processor.

When the most natural architecture is unavailable, the operating system
will try to pick another architecture. On 64-bit processors, a 32-bit
architecture is tried. If this is also unavailable, the operating system
on an intel processor will try running a 32-bit powerpc architecture.
Otherwise, no architecture is run, and an error results.

The arch command can be use to alter the operating system's normal selec-
tion order. The most common use is to select the 32-bit architecture on
a 64-bit processor, even if a 64-bit architecture is available.

The -h option prints a usage message and exits.

The arch_name argument must be one of the currently supported architec-
tures:

i386 32-bit intel

ppc 32-bit powerpc

ppc64 64-bit powerpc

x86_64 64-bit intel

Either prefix the architecture with a hyphen, or (for compatibility with
other commands), use -arch followed by the architecture.

If more than one architecture is specified, the operating system will try
each one in order, skipping an architecture that is not supported on the
current processor, or is unavailable in the universal binary.

The prog argument is the command to run, followed by any arguments to
pass to the command. It can be a full or partial path, while a lone name
will be lookup in the user's command search path.

If no architectures are specified on the command line, the arch command
takes the basename of the prog argument and searches for the first prop-
erty list file with that basename and the .plist suffix, in the
archSettings sub-directory in each of the standard domains, in the fol-
lowing order:

~/Library/archSettings User settings

/Library/archSettings Local settings

/Network/Library/archSettings Network settings
Either prefix the architecture with a hyphen, or (for compatibility with
other commands), use -arch followed by the architecture.

If more than one architecture is specified, the operating system will try
each one in order, skipping an architecture that is not supported on the
current processor, or is unavailable in the universal binary.

The prog argument is the command to run, followed by any arguments to
pass to the command. It can be a full or partial path, while a lone name
will be lookup in the user's command search path.

If no architectures are specified on the command line, the arch command
takes the basename of the prog argument and searches for the first prop-
erty list file with that basename and the .plist suffix, in the
archSettings sub-directory in each of the standard domains, in the fol-
lowing order:

~/Library/archSettings User settings

/Library/archSettings Local settings

/Network/Library/archSettings Network settings
Either prefix the architecture with a hyphen, or (for compatibility with
other commands), use -arch followed by the architecture.

If more than one architecture is specified, the operating system will try
each one in order, skipping an architecture that is not supported on the
current processor, or is unavailable in the universal binary.

The prog argument is the command to run, followed by any arguments to
pass to the command. It can be a full or partial path, while a lone name
will be lookup in the user's command search path.

If no architectures are specified on the command line, the arch command
takes the basename of the prog argument and searches for the first prop-
erty list file with that basename and the .plist suffix, in the
archSettings sub-directory in each of the standard domains, in the fol-
lowing order:

~/Library/archSettings User settings

/Library/archSettings Local settings

/Network/Library/archSettings Network settings

/System/Library/archSettings System settings

This property list contains the architecture order preferences, as well
as the full path to the real executable. For examples of the property
list format, look at the files in /System/Library/archSettings.

Example
On an intel processor:

% perl -MConfig -e 'printf "%s\n", $Config{byteorder}'
1234

shows the intel little endian byte order, while:

% arch -ppc perl -MConfig -e 'printf "%s\n", $Config{byteorder}'
4321

runs the powerpc architecture, and displays big endian byte order.

Making links to the arch command
When a link is made to arch command with a different name, that name is
used to find the corresponding property list file. Thus, other commands
can be wrapped so that they have custom architecture selection order.
Because of some internal logic in the code, hard links to the arch com-
mand may not work quite right. It is best to avoid using hard links, and
only use symbolic links to the arch command.

Environment
The environment variable ARCHPREFERENCE can be used to provide architec-
ture order preferences. It is checked before looking for the correspond-
ing property list file.

The value of the environment variable ARCHPREFERENCE is composed of one
or more specifiers, separated by semicolons. A specifier is made up of
one, two or three fields, separated by colons. Architectures specified
in order, are separated by commas and make up the last (mandatory) field.
The first field, if specified, is a name of a program, which selects this
specifier if that name matches the program name in question. If the name
field is empty or there is no name field, the specifier matches any pro-
gram name. Thus, ordering of specifiers is important, and the one with
no name should be last.

When the arch command is called directly, the prog name provides the path
information to the executable (possibly via the command search path).
When a name is specified in a ARCHPREFERENCE specifier, the path informa-
tion can alternately be specified as a second field following the name.
When the arch command is called indirectly via a link, this path informa-
tion must be specified. If not specified as a second field in a speci-
fier, the executable path will be looked up in the corresponding property
list file.

Example ARCHPREFERENCE Values
ppc,i386,ppc64,x86_64
A specifier that matches any name.

foo:ppc,i386,ppc64,x86_64
A specifier that matches the program named foo (the full executable
path is in the foo.plist file).

foo:/op/bin/boo:ppc,i386,ppc64,x86_64
A specifier with all fields specified.

baz:ppc,i386;i386,ppc
A specifier for baz and a second specifier that would match any
other name.

BUGS
BUGS
Running the arch command on an interpreter script may not work if the
interpreter is a link to the arch command, especially if a 64-bit archi-
tecture is specified (since the arch command is 2-way universal, 32-bit
only).

SEE ALSO
machine(1)

Mac OS X November 12, 2006 Mac OS X


Il est à noter que sous Debian GNU/Linux, la commande arch existe dans Debian GNU/Linux 4.0 "etch", mais a disparu de Debian GNU/Linux "lenny", car elle est considérée "obsolète". Si vous en avez malgré tout besoin, utilisez la commande uname -m. Il vous suffit de créer un petit shell script /bin/arch du genre:

#!/bin/sh
#
# Remplace la commande arch
# Renvoie l'architecture de la machine
#
# Pierre Bauduin
# Le 24 décembre 2007
#
/bin/uname -m

Certains distributions Linux ont la commande arch, d'autres ne l'ont pas.

vendredi 25 janvier 2008

Pourquoi Apple n'a pas choisi X11 pour l'affichage dans Mac OS X

Pour l'affichage dans Mac OS X, n' a donc pas choisi d'utiliser X11 qui est majoritairement utilisé sous Unix, mais a développé sa propre technologie appelée Quartz.Ce commentaire sur slashdot nous explique pourquoi et indique aussi que Quartz est en partie basé sur NextStep. qui utilisait Display Postscript, une technologie basée en gros sur le même principe...

jeudi 17 janvier 2008

Les fat binaries sous Mac OS X: la commande lipo

Dans un post précédent je vous expliquais comment créer des "fat binaries" sous Mac OS X.

Je pars de mon petit programme hello.c. Il suffit en bref d'exécuter gcc avec certains paramètres:
[pierre@albert] /Users/pierre/Documents/source>gcc -arch i386 -arch ppc -arch ppc64 -o hello hello.c
La commande file nous indique bien qu'il y a trois exécutables dans ce fichier Mach-O:
[pierre@albert] /Users/pierre/Documents/source>file hello
hello: Mach-O universal binary with 3 architectures
hello (for architecture i386): Mach-O executable i386
hello (for architecture ppc7400): Mach-O executable ppc
hello (for architecture ppc64): Mach-O 64-bit executable ppc64
La commande otool -f nous est aussi utile, elle nous indique le "magic number" des "fat binaries":
[pierre@albert] 18:56 /Users/pierre/Documents/source>otool -f hello
Fat headers
fat_magic 0xcafebabe
nfat_arch 3
architecture 0
cputype 7
cpusubtype 3
capabilities 0x0
offset 4096
size 12588
align 2^12 (4096)
architecture 1
cputype 18
cpusubtype 10
capabilities 0x0
offset 20480
size 8508
align 2^12 (4096)
architecture 2
cputype 16777234
cpusubtype 0
capabilities 0x80
offset 32768
size 8552
align 2^12 (4096)

Voici maintenant le résultat de la commande lipo:
[pierre@albert] /Users/pierre/Documents/source>lipo -detailed_info hello
Fat header in: hello
fat_magic 0xcafebabe
nfat_arch 3
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
offset 4096
size 12588
align 2^12 (4096)
architecture ppc7400
cputype CPU_TYPE_POWERPC
cpusubtype CPU_SUBTYPE_POWERPC_7400
offset 20480
size 8508
align 2^12 (4096)
architecture ppc64
cputype CPU_TYPE_POWERPC64
cpusubtype CPU_SUBTYPE_POWERPC_ALL
offset 32768
size 8552
align 2^12 (4096)
Eh bien, c'est intéressant, je vois de manière détaillée que ce fichier hello contient trois exécutables, et j'obtiens l'offset de chacun.

... il est amusant de constater que le "magic number" pour les "fat binaries" est 0xcafebabe. C'est en fait le même "magic number" que celui du Java bytecode, c'est à dire des fichiers .class en Java. Souvenons-nous que le nom "Java" a été choisi car son créateur, James Gosling, est un grand consommateur de café, sans quoi Java se serait appelé Oak.

... au fait, pourquoi cette commande s'appelle-t-elle lipo ? Peut être une jeu de mot sur les "fat binaries" et la liposuccion ("liposuction" en anglais) ?

Vous pouvez aussi consulter ce document officiel Apple sur la structure des exécutables Mach-O.

mercredi 16 janvier 2008

Pourquoi le shell par défaut de Mac OS X est bash et non plus tcsh

Jusqu'à la version 10.2 (Jaguar) de Mac OS X, le shell par défaut était tcsh.

Depuis la version 10.3 (Panther) de Mac OS X, sortie le 24 octobre 2003, le shell par défaut est bash.

Pourquoi ?

De nombreuses explications contradictoires circulent.

Une des plus connues est qu'Apple aurait voulu faciliter le passage des utilisateurs Linux à Mac OS X. En effet, sur la plupart des distributions Linux, le shell par défaut est bash.

Par contre, dans FreeBSD et PC-BSD, le shell par défaut est tcsh.

La vérité est tout autre: la raison principale du passage de tcsh à bash est que bash supporte complètement l'Unicode. Le support Unicode intéresse énormément Apple puisque un de ses objectifs est de supporter le plus de langues possibles dans Mac OS X.

Je peux vous assurer de la véracité de cette information, c'est Jordan Hubbard lui-même qui l'écrit ici.

Jordan Hubbard était un des développeurs principaux de FreeBSD, jusqu'à ce qu'il soit engagé par Apple en juillet 2001 comme "Director of UNIX Technology". Si quelqu'un connaît bien la partie BSD de Mac OS X, c'est bien lui.

mardi 15 janvier 2008

Le MacBook Air est sorti !

Cela faisait un certain temps que la rumeur était dans l'air (si j'ose dire), maintenant il est là: le MacBook Air:

Site officiel:
http://www.apple.com/macbookair/

Première "prise en main" par macrumors.com, regardez les photos, c'est impressionnant:
http://www.macrumors.com/2008/01/15/first-look-at-the-macbook-air/

samedi 12 janvier 2008

Voyagons dans le temps: Rhapsody Developer Release 2

Comme je vous l'ai expliqué dans un article précédent, Mac OS X descend de NextStep.

En bref, NextStep était un système d'exploitation très avancé pour son époque, créé par Steve Jobs lorsqu'il a été "mis dehors" d'Apple en 1985.

Fin 1996, Apple est dans de sérieuses difficultés financières et technologiques, notamment suite aux échecs successifs de trois projets de "système d'exploitation d'une nouvelle génération": Taligent, Copland et Gershwin. Jobs retourne alors chez Apple et reçoit "carte blanche". Il prend rapidement "le taureau par les cornes": il fait racheter par Apple sa propre société NextStep le 20 décembre 1996. Commence alors le développement d'un "système d'exploitation d'une nouvelle génération", mais un qui verra le jour ! Ce projet s'appelle Rhapsody. Il est présenté pour la première fois à la Worldwide Developer Conference début 1997 (Rhapsody Developer Release 1) . Ensuite en août 1997 sort la Rhapsody Developer Release 2. Regardez attentivement les quelques captures d'écran:

... ceci nous rappelle furieusement l'écran de login de Mac OS X.

Regardez un peu ceci:

... c'est sans aucun doute un système de type Unix !

Regardez celle-ci:


... eh oui, de nombreux éléments de Mac OS X viennent en droite ligne de NextStep et/ou de Rhapsody...

mercredi 9 janvier 2008

Comparons le header Mach-O sous powerpc et x86

Le format d'exécutable sous Mac OS X est le format Mach-O.

La commande otool -h permet d'analyser le header d'un fichier au format Mach-O.

Je lis à la page 12 de "Mac OS X ABI Mach-O File Format Reference" que le header du format Mach-O a toujours la structure suivante:
struct mach_header
{
uint32_t magic;
cpu_type_t cputype;
cpu_subtype_t cpusubtype;
uint32_t filetype;
uint32_t ncmds;
uint32_t sizeofcmds;
uint32_t flags;
};

Voyons le résultat de otool -h sur un fichier Mach-O bien connu (/bin/ls), mais sur deux architectures différentes:

Mac OS X Leopard sur Intel (x86):
[pierre@albert] /Users/pierre>otool -h /bin/ls
/bin/ls:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedface 7 3 0x00 2 14 1304 0x00000085

Mac OS X Tiger sur PowerPC (powerpc):
[pierre@blueandwhite] /Users/pierre>otool -h /bin/ls
/bin/ls:
Mach header
magic cputype cpusubtype filetype ncmds sizeofcmds flags
0xfeedface 18 0 2 11 1608 0x00000085
Regardez attentivement cputype: c'est lui qui nous indique sur quelle architecture nous sommes.

Voyez aussi la page man de la commande arch

En fait, le format Mach-O est directement hérité de NextStep, qui au long de son existence a été disponible pour plusieurs architectures: PowerPC, x86, PA-RISC et SPARC.

mardi 8 janvier 2008

"Magic number" dans les quatre premiers octets des fichiers au format Mach-O

Le format d'exécutable sous Mac OS X est le format Mach-O.

Ce format a un certain nombre d'avantages, notamment la possibilité d'avoir des "fat binaries", appelées "Universal Binaries" par Apple, d'ailleurs je vous en avais déjà parlé ici et ici.

La commande otool -h permet d'analyser le header d'un fichier au format Mach-O. Voyons le résultat sur un fichier Mach-O bien connu (/bin/ls), et un autre fichier Mach-O que j'ai compilé moi-même:
[pierre@albert] /Users/pierre>otool -h /bin/ls
/bin/ls:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedface 7 3 0x00 2 14 1304 0x00000085
[pierre@albert] /Users/pierre>otool -h Documents/source/hello
Documents/source/hello:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedface 7 3 0x00 2 11 936 0x00000085
Il est amusant de constater que le "magic number" dans le header est 0xfeedface.
En fait les quatre premiers octets de tout fichier au format Mach-O sont toujours 0xfeedface ou 0xcefaedfe si vous lisez un fichier petit-boutiste (little-endian) sur une machine grand-boutiste (big-endian), ou l'inverse...

Vous pouvez aussi consulter cette documentation officielle Apple sur la structure des exécutables Mach-O.

lundi 7 janvier 2008

Après avoir changé le nom d'une machine Mac OS X, l'ancien nom subsiste

Quelques jours après avoir mis en service mon iMac, je decide de changer le nom de la machine. Je lui avais d'abord donné comme nom imac, et je lui donne maintenant le nom albert.

Pour changer le nom, évidemment j'utilise l'interface graphique. Il faut aller dans "Préférences Système > Partage" (au passage, c'est un peu surprenant que le nom de la machine se trouve dans "Partage"), et je remplace imac par albert, regardez:

Apparemment le nom a changé. Cependant, quand j'ouvre un Terminal.app, mon prompt est:
[pierre@imac] /Users/pierre>
D'où vient ce "imac" ? C'est la variable d'environnement $HOSTNAME dans bash.

Vérifions le nom de la machine. Sous Unix deux commandes me donnent le nom de la machine:
hostname et uname -n

Allons-y:
[pierre@imac] /Users/pierre>hostname
imac
[pierre@imac] /Users/pierre>uname -n
imac
... eh bien ça alors, elle a encore l'ancien nom ?

Je suis perplexe, et je décide de le faire "à la Windows": rebooter.

Après le reboot, je vois à l'écran de login, en dessous de la pomme, que le nom de la machine est albert. Ensuite je me loggue, et je lance à nouveau hostname et uname -n:
[pierre@imac] /Users/pierre>hostname
imac
[pierre@imac] /Users/pierre>uname -n
imac
Eh bien ça alors ?

Je vais dans "Préférences Systèmes > Partage"
Et je vois:


Que se passe-t-il ?

... après quelques recherches, je me rends compte que ce nom "imac" persiste parceque mon serveur DNS contient toujours le nom "imac" pour l'adresse IP de cette machine.

Donc en bref, quel que soit le nom que vous donnez à une machine Mac OS X dans "Préférences Systèmes > Partage", elle va malgré tout contacter le serveur DNS que vous avez configuré, et elle va prendre comme hostnome le nom correspondant au reverse DNS de son adresse IP !

Voilà qui est étonnant !

Notez, c'est peut-être voulu...
"It's not a bug, it's a feature" comme disent certains...

jeudi 3 janvier 2008

Mac OS X : Comment désactiver complètement Spotlight

Si comme moi vous utilisez Mac OS X Tiger sur un iBook G3 à 800 MHz avec 640 MB de RAM, vous pouvez améliorer les performances de votre machine en désactivant Spotlight. Voici comment faire:

Attention, tout ceci est prévu pour Mac OS X Tiger, et je ne saurais garantir qu'il fonctionne avec d'autres versions...


Attention vous allez travailler en ligne de commande avec l'utilisateur root. Soyez attentif...





Tout d'abord devenez root en tapant sudo su - puis votre mot de passe.
$ sudo su
Ensuite effectuez les commandes suivantes:

# chmod 0000 /Library/Spotlight
# chmod 0000 /System/Library/Spotlight
# chmod 0000 /System/Library/CoreServices/Search.bundle
# chmod 0000 /System/Library/PreferencePanes/Spotlight.prefPane
# chmod 0000 /System/Library/Services/Spotlight.service
# chmod 0000 /System/Library/Contextual Menu Items/SpotlightCM.plugin
# chmod 0000 /System/Library/StartupItems/Metadata
# chmod 0000 /usr/bin/mdimport
# chmod 0000 /usr/bin/mdcheckschema
# chmod 0000 /usr/bin/mdfind
# chmod 0000 /usr/bin/mdls
# chmod 0000 /usr/bin/mdutil
# chmod 0000 /usr/bin/md

Vous pouvez maintenant redémarrer votre machine
Après le redémarrage, faites à nouveau:
$ sudo su
et tapez votre mot de passe
Ensuite:
# rm -r /.Spotlight-V100
# rm -r /private/var/tmp/mds

Ce petit truc provient en fait d'une page sur Mac OS X Hints.

lundi 31 décembre 2007

Compiler un "fat binary" sur un iMac Intel sous Léopard

J'en parlais déjà il y a quelques mois, mais avec la sortie de Mac OS X Léopard, voici à nouveau un petit exemple de comment créer un "fat binary" c'est à dire un fichier qui comprend les exécutables pour plusieurs architectures.

En l'occurence je compile le petit programme hello.c et je regarde quelle sorte de résultat j'obtiens:

[pierre@albert] 16:30 /Users/pierre/Documents/source>gcc -arch i386 -arch ppc -arch ppc64 hello.c
[pierre@albert] 16:30 /Users/pierre/Documents/source>file a.out
a.out: Mach-O universal binary with 3 architectures
a.out (for architecture i386): Mach-O executable i386
a.out (for architecture ppc7400): Mach-O executable ppc
a.out (for architecture ppc64): Mach-O 64-bit executable ppc64
[pierre@albert] 16:30 /Users/pierre/Documents/source>

C'est donc un fichier qui comporte les exécutables pour trois architectures: Intel, PowerPC 32-bits et PowerPC 64-bits.

En fait dans le cas de Mac OS X les "fat binaries" sont une des fonctionnalités des exécutables Mach-O.

(Ceci a été effectué sur Mac OS X Léopard sur une machine Intel)

Ah oui le terme officiel d'Apple est "Universal Binary"

lundi 24 décembre 2007

Mac OS X Léopard: problème pour imprimer sur une imprimante IPP

Dans l'ensemble je suis assez content de la toute dernière version de Mac OS X (10.5, également appelée "Léopard").

Cependant je suis tombé sur un "petit problème".

J'ai chez moi une imprimante vers laquelle je peux imprimer en utilisant le protocole IPP.
J'arrive sans problème à imprimer vers cette imprimante à partir de:
Mais, à partir de Mac OS X, je n'y arrive pas.
En fait je pense que dans le cas de Léopard, c'est dans Mac OS X lui-même qu'il y a un problème.

Pour créer l'imprimante sous Mac OS X Léopard, je suis allé dans "Préférences Systèmes", dans la partie "Imprimantes et fax"

J'ai donc indiqué comme adresse IPP:
ipp://10.20.10.1:631/Claire

Et j'ai mis comme pilote "Imprimante Postscript Générique". (Ainsi Mac OS X envoie du PostScript, et sur le serveur, le PostScript est automatiquement traduit dans un langage compréhensible par l'imprimante)

Après avoir créé l'imprimante je lance un navigateur et je le fais pointer sur la page de CUPS:
http://127.0.0.1:631/printers/Claire_IPP pour commencer par imprimer une page de test (il y a un bouton à cet effet dans CUPS)

Et je vois ceci:



/usr/libexec/cups/backend/ipp failed

... cela fait longtemps que j'utilise CUPS, mais ceci, je n'ai jamais eu !

Le message d'erreur indique que la commande ipp de Mac OS X a échoué.
J'ai essayé de lancer cette commande à la main:
[pierre@albert] /Users/pierre>sudo /usr/libexec/cups/backend/ipp
Password:
network ipp "Unknown" "Internet Printing Protocol (ipp)"
[pierre@albert] /Users/pierre>

... effectivement, elle ne s'exécute pas !

... et le problème n'est pas dans l'imprimante IPP sur le serveur, le problème est dans Mac OS X lui-même.

Espérons que le problème soit rapidement corrigé par AppleCare...