On Sat, Oct 01, 2005 at 12:22:33AM +0900, Jim Weirich wrote: > > Eivind Eklund said: > > First of all, the comparison with a raw tar file is inappropriate. > > Packagers basically never work with really raw tar files - we work > > with tar files that include some installer system, be that a > > "setup.rb" file [...] > > I'm sorry, I didn't mean a tar file you just untar directly into the ruby > directories. I meant a tar file like the one Rake is distributed in > (that's why I used it as an example). The tar file contains a install > script[1] for non-gem installs. The gem file contains the exact same > thing. > > Gems uses the same defaults as the standard setup.rb install script uses. > Setting up for setup.rb makes it easy to setup for gems as well. Using > the rake gem packaging tools makes it trivial to distribute both gems and > tgz file with identical contents. And this would make the tgz quite likely to be good, and the Gem to be possible to use some normalized tools on. Sorry for the vague answer - I'm on a deadline for monday and will try to get back with better answers then. (Right now I lack the time/calm to sit down and analyze properly.) > > In RubyGems guarantee the Gem author that the Gem will be installed with > > all the directories placed in a particular fashion compared to each other, > > including extra data space. > > Actually, RubyGems is entirely silent on the matter of data storage. Thus > the problem of individual authors doing the relative file path thing. > > If RubyGems provided a option to copy files in to a area designed by > Config::CONFIG['datadir'], would that be adequate? I'm not sure; I have to look more closely at the present state of RubyGems. Let me give you the info to decide for yourself, though (that will probably help us both in the long run). The policies that need to be possible to follow are these (for FreeBSD; the Linux systems are similar, though not identical.) http://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/dads-subdirs.html http://www.freebsd.org/cgi/man.cgi?query=hier&sektion=7 The most important is being able to install binaries under $prefix/bin/, documentation under doc/<portname>/, examples under examples/<portname>, configuration under etc/, data under share/<portname> or similar, put databases under /var/<suitable location>, and put man/info pages under man/info respectively. (Hopefully, nobody use info with a RubyGem, though.) Prefix is /usr/local unless the user has set it differently. "Full" text below for convenience (I've cut down the hier manpage to be less noisy, only containing relevant directories): 12.10 Subdirectories Try to let the port put things in the right subdirectories of PREFIX. Some ports lump everything and put it in the subdirectory with the port's name, which is incorrect. Also, many ports put everything except binaries, header files and manual pages in the a subdirectory of lib, which does not work well with the BSD paradigm. Many of the files should be moved to one of the following: etc (setup/configuration files), libexec (executables started internally), sbin (executables for superusers/managers), info (documentation for info browser) or share (architecture independent files). See hier(7) for details; the rules governing /usr pretty much apply to /usr/local too. The exception are ports dealing with USENET ``news''. They may use PREFIX/news as a destination for their files. hier(7): HIER(7) FreeBSD Miscellaneous Information Manual HIER(7) NAME hier -- layout of file systems DESCRIPTION A sketch of the file system hierarchy. / root directory of the file system /usr/ contains the majority of user utilities and applications bin/ common utilities, programming tools, and applica- tions compat/ files needed to support binary compatibility with other operating systems, such as Linux (created by sysinstall(8)) games/ useful and semi-frivolous programs include/ standard C include files lib/ shared and archive ar(1)-type libraries aout/ a.out archive libraries compat/ shared libraries for compatibility aout/ a.out backward compatibility libraries libdata/ miscellaneous utility data files libexec/ system daemons & system utilities (executed by other programs) local/ local executables, libraries, etc. Also used as the default destination for the FreeBSD ports framework. Within local/, the general layout sketched out by hier for /usr should be used. Exceptions are the man directory (directly under local/ rather than under local/share/), ports documentation (in share/doc/<port>/), and /usr/local/etc (mimics /etc). sbin/ system daemons & system utilities (executed by users) share/ architecture-independent files doc/ miscellaneous documentation examples/ various examples for users and program- mers info/ GNU Info hypertext system locale/ localization files; see setlocale(3) nls/ national language support files; see mklocale(1) security/ data files for security policies such as mac_lomac(4) sendmail/ sendmail(8) configuration files skel/ example . (dot) files for new accounts snmp/ MIBs, example files and tree definitions for the SNMP daemon. defs/ Tree definition files for use with gensnmptree(1) mibs/ MIB files X11R6/ X11R6 distribution executables, libraries, etc (optional). bin/ X11R6 binaries (servers, utilities, local packages/ports). etc/ X11R6 configuration files and scripts. include/ X11R6 include files. lib/ X11R6 libraries. man/ X11R6 manual pages. share/ architecture-independent files. /var/ multi-purpose log, temporary, transient, and spool files account/ system accounting files acct execution accounting file; see acct(5) at/ timed command scheduling files; see at(1) jobs/ directory containing job files spool/ directory containing output spool files backups/ miscellaneous backup files db/ miscellaneous automatically generated system-spe- cific database files empty/ empty directory for use by programs that need a specifically empty directory. Used for instance by sshd(8) for privilege separation. log/ miscellaneous system log files wtmp login/logout log; see wtmp(5) mail/ user mailbox files run/ system information files describing various info about system since it was booted named/ writable by the ``bind'' user; see named(8) ppp/ writable by the ``network'' group for command connection sockets; see ppp(8) utmp database of current users; see utmp(5) spool/ miscellaneous printer and mail system spooling directories clientmqueue/ undelivered submission mail queue; see sendmail(8) ftp/ commonly ~ftp; the anonymous ftp root directory mqueue/ undelivered mail queue; see sendmail(8) output/ line printer spooling directories tmp/ temporary files that are kept between system reboots vi.recover/ the directory where recovery files are stored