From: UnixOS2 Archive To: "UnixOS2 Archive" Date: Sat, 24 Aug 2002 04:35:32 EST-10EDT,10,-1,0,7200,3,-1,0,7200,3600 Subject: [UnixOS2_Archive] No. 307 ************************************************** Friday 23 August 2002 Number 307 ************************************************** Subjects for today 1 Re: FHS : Steve Wendt" 2 Result: Source Codes Handling : Andreas Buening 3 FHS : Andreas Buening **= Email 1 ==========================** Date: Sat, 24 Aug 2002 11:31:15 -0700 (PDT) From: "Steve Wendt" Subject: Re: FHS On Sat, 24 Aug 2002 19:32:59 +0200, Andreas Buening wrote: >Unlike on Unix systems temporary files have to be stored into $(TMPDIR) >instead of /tmp. Why $(TMPDIR) rather than $(TMP)? Are there Unix apps that look for that variable already? >The environment variable ETC defines the location of /etc. Do we really want to mix OS/2 and UnixOS2 ETC contents? Hopefully, there isn't too much hardcoded to /etc, in that case. >The other Unix directories /boot, /dev, /mnt, /opt, /var have >currently no meaning for UnixOS/2 and do not exist. Some packages might want to install to /opt, but perhaps they should be redirected to /usr/local. /var could be important for things like logging, or maybe even other things. Looking at the hierarchy on my Linux partition, the ones that might be most important: /var/lock /var/log /var/spool >(I recommend to add also the following shells and utilities to have >them all at the same place:) >perl I think /usr/bin/perl is the standard place... >The following files must be in /usr/bin, if the corresponding subsystem is >installed: >perl ... and you do have it listed here. ;) >If directories /lib or /usr/lib exist, the equivalent directories >must also exist in /usr/local. Huh? ----------- "Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws." - Plato (427-347 B.C.) **= Email 2 ==========================** Date: Sat, 24 Aug 2002 17:45:19 +0200 From: Andreas Buening Subject: Result: Source Codes Handling Hello! From the (not really) countless postings the following results come out: 1) The UnixOS/2 directory structure has to be changed. Two different proposals are left: a) flat one-level directory structure like .../unixos2/{foo|bla}, b) flat two-level directory structure where packages are subdivided into _few_ groups according to their origin like .../unixos2/gnu/{foo|bla}. Total votes: a) 1, b) 1. I guess, Ian will have to throw a coin. 2) Every package gets its own subdirectory that has the name of the package. The maintainer of that package has read and write access to that ftp directory. 3) File format is zip. 4) The source packages obey the usual naming scheme: foo-1_2_3.zip for version 1.2.3 of foo. Optional suffixes are e.g. -fix01.zip or -beta3.zip. 5) There was a proposal to start a UnixOS/2 project at SourceForge. Total votes: pro: 1, contra: 1. As long as there aren't enough people who want to maintain a site at SourceForge I consider this idea as dead. If there are no contradictions or further comments (especially for 1 and 5) I assume this proposal to be finally accepted. bye, Andreas -- One OS to rule them all, One OS to find them, One OS to bring them all and in the darkness bind them In the Land of Mordor where the Shadows lie. **= Email 3 ==========================** Date: Sat, 24 Aug 2002 19:32:59 +0200 From: Andreas Buening Subject: FHS Hello! To answer the question what we want to put _where_ I used the FHS (Filesystem Hierarchy Standard) 2.2. You can get the original docs from http://www.pathname.com/fhs. I changed some formulations and removed some Unix specific stuff like symbolic links. You can find a short summary at the end of the text. -------------------------------------------- 3. The Root Filesystem 3.1 Purpose ... 3.2 Requirements The root directory / is the root directory of that drive that is identified by the UNIXROOT environment variable. The following directories are required in /: /bin Essential command binaries /lib Essential shared libraries /sbin Essential system binaries /usr Secondary hierarchy Unlike on Unix systems temporary files have to be stored into $(TMPDIR) instead of /tmp. The environment variable ETC defines the location of /etc. The other Unix directories /boot, /dev, /mnt, /opt, /var have currently no meaning for UnixOS/2 and do not exist. 3.3 Specific Options ... 3.4 /bin: Essential user command binaries (for use by all users) 3.4.1 Purpose /bin contains commands that may be used by both the system administrator and by users, but which are required to maintain, install or repair an existing UnixOS/2 installation or to install or remove binary packages. It may also contain commands which are used indirectly by scripts. 3.4.2 Requirements There must be no subdirectories in /bin. The following commands are required in /bin (note: if the FHS standard requires a command like cp or mv to be in /bin I added the whole GNU file utiltiy package to /bin to minimize maintainance effort): GNU file utilities GNU shell utilities GNU text utilities sh The Bourne command shell (currently pdksh) more sed (I recommend to add also the following shells and utilities to have them all at the same place:) bash ksh awk grep perl 3.4.3 Specific Options The following programs must be in /bin is the corresponding subsystem is installed: csh ed tar cpio gzip gunzip zcat netstat ping (To be exactly I think we will not need csh, ed, netstat and ping here, but at least all programs that are required to install or repair or remove packages) ux2-tools (ux2-install, ux2-update, ..., however they will be called) zip unzip the packager itself (rpm, whatever) 3.9 /lib: Essential shared libraries 3.9.1 Purpose The /lib directory contains those shared library images needed to boot the system and run the commands in the root filesystem, ie. by binaries in /bin and /sbin. 3.9.2 Requirements At least this means the following files: emx*.dll libc intl.dll gettext library maybe also: regex.dll iconv.dll To minimize the maintainance effort the according static libraries have to be installed at the same place. 3.14 /sbin: System binaries Utilities used for system administration (and other root-only commands) are stored in /sbin, /usr/sbin, /usr/local/sbin. /sbin contains binaries essential for booting, restoring, recovering, and/or repairing the system in addition to the binaries in /bin. These are basically programs like fdisk which we currently do not have because this functionality is provided by the OS/2 base system. Therefore /sbin is currently empty. 4. The /usr Hierarchy 4.1 Purpose /usr is the second major section of the filesystem. /usr is shareable, read-only data. ... Large software packages must not use a direct subdirectory under the /usr hierarchy. 4.2 Requirements The following directories are required in /usr: /usr/bin Most user commands /usr/include Header files included by C programs /usr/lib Libraries /usr/local Local hierarchy (EMPTY after main installation) /usr/sbin Non-vital system binaries /usr/share Architecture-independent data /usr/unixos2 UnixOS/2 specific stuff (currently empty) 4.3 Specific Options /usr/X11R6 X Window System, version 11 release 6 /usr/games Games and educational binaries (optional) /usr/lib Alternate Format Libraries (optional) /usr/src Source code (optional) An exception is make for the X Window System because of considerable precedent and widely-accepted practise. 4.4 /usr/X11R6: X Window System, Version 11 Release 6 4.4.1 Purpose This hierarchy is reserved for the X Window System, version 11 release 6, and related files. 4.5 /usr/bin: Most user commands 4.5.1 Purpose This is the primary directory of executable commands on the system. 4.5.2 Specific Options The following files must be in /usr/bin, if the corresponding subsystem is installed: perl python tclsh wish expect 4.6 /usr/include: Directory for standard include files. 4.6.1 Purpose This is where all of the system's general-use include files for the C programming language should be placed. 4.6.2 Specific Options The following directories must be in /usr/include if the corresponding subsystem is installed: /usr/include/bsd BSD compotibility include files 4.7 /usr/lib: Libraries for programming and packages 4.7.1 Purpose /usr/lib includes object files, libraries, and internal binaries that are not intended to be executed directly by users of shell scripts. Applications may use a dingle subdirectory under /usr/lib. If an application uses a directory, all architecture-dependent data exclusively used by the application must be placed whithin that subdirectory (for example the perl5 subdirectory for Perl5 modules and libraries). 4.8 /usr/lib: Alternate format libraries (optional) 4.8.1 Purpose /usr/lib performs the same role as /usr/lib for an alternate binary format. 4.9 /usr/local: Local hierarchy 4.9.1 Purpose The /usr/local hierarchy is for use by the system administrator when installing software locally. It needs to be safe from being overwritten when the system software is updated. It may be used for programs and data that are shareable amongst a group of hosts, but not found in /usr. Locally installed software must be placed within /usr/local rather than /usr unless it is being installed to replace or upgrade software in /usr. 4.9.2 Requirements /usr/local/bin Local binaries /usr/local/games Local game binaries /usr/local/include Local C header files /usr/local/lib Local libraries /usr/local/man Local online manuals /usr/local/sbin Local system binaries /usr/local/share Local architecture-independent hierarchy /usr/local/src Local source code 4.9.3 Specific Options If directories /lib or /usr/lib exist, the equivalent directories must also exist in /usr/local. 4.10 /usr/sbin: Non-essential standard system binaries 4.10.1 Purpose This directory contains any non-essential binaries used exclusively by the system administrator. System administration programs that are required for system repair, system recovery, or other essential functions must be placed in /sbin instead. (May be we can install programs here that are part of the normal UnixOS/2 installation but need not be in PATH like httpd) 4.11 /usr/share: Architecture-independent data 4.11.1 Purpose The /usr/share hierarchy is for all read-only architecture independent data files. This hierarchy is intended to be shareable among all architecture platforms of a given OS; ... Any program or package which contains or requires data that doesn't need to be modified should store that data in /usr/share (or /usr/local/share, if installed locally). It is recommended that a subdirectory be used in /usr/share for this purpose. 4.11.2 Requirements The following directoris must be in /usr/share /usr/share/man Online manuals /usr/share/misc Miscellaneous architecture-dependent data 4.11.3 Specific Options The following directories must be in /usr/share if the corresponding subsystem is installed: /usr/share/book OS/2 online documentation /usr/share/dict Word lists /usr/share/doc Miscellaneous documentation /usr/share/games Static data files for /usr/games /usr/share/info GNU Info system's primary directory /usr/share/locale Locale information /usr/share/nls Message catalugs for Native language support /usr/share/sgml SGML and XML data /usr/share/terminfo Directories for terminfo database /usr/share/tmac troff macros not distributed with groff /usr/share/zoneinfo Timezine information and configuration It is recommended that application-specific, architecture-independent directories be placed here. Such directories include groff, perl, ghostscript, and texmf. 4.11.5 /usr/share/man: Manual pages ... The primary of the system is /usr/share/man. /usr/share/man contains manual information for commands and data under the / and /usr filesystems. ... ------------------------------------------------- We can move the directories for docs one level up. /usr/man, /usr/info, /usr/doc and /usr/book sounds more reasonable for me than /usr/share/man and so on, especially because this is the default for most configure scripts. Shortcut of all that stuff above: 1. The UnixOS/2 base packages (all programs and libraries that are required to finish the installation of a package successfully) belong into the / hierarchy. Their docs belong into the /usr hierarchy. This means: If a program from a package belongs into /bin then the package has to be compiled using the following options: ./configure --prefix=/usr --bindir=/bin --libdir=/lib If a library from a package belongs into /lib but none of its programs into /bin then the package has to be compiled using: ./configure --prefix=/usr --libdir=/lib 2. The normal UnixOS/2 distribution has to be placed into /usr. This means ./configure --prefix=/usr 3. After the normal installation /usr/local is empty. The following software has to be placed into /usr/local (not into / and not into /usr): a) Software that is compiled by a user for his own purpose, ie.: If you compile software for yourself don't pollute the /usr tree use /usr/local instead! b) Software that is some kind of Unix software but is currently not part of the UnixOS/2 distro or doesn't comply to the UnixOS/2 standard. (e.g. the normal precompiled packages with their own philosophy you get from hobbes) c) Software that is _huge_ in some sense (don't put Mozilla or OpenOffice here). d) Software that is some kind of Unix software and delivered with the UnixOS/2 distro but not considered as part of the "normal" distro whatever the reason for this may be. 4. Currently /sbin, /usr/sbin, /usr/unixos2 and /usr/local are empty. Any comments? bye, Andreas -- One OS to rule them all, One OS to find them, One OS to bring them all and in the darkness bind them In the Land of Mordor where the Shadows lie.