logo       


[Lunar-commits] r18369 - moonbase/trunk/filesys/e2fsprogs/init.d: msg#00506

Subject: [Lunar-commits] r18369 - moonbase/trunk/filesys/e2fsprogs/init.d
Author: sofar
Date: 2006-01-27 20:29:59 +0000 (Fri, 27 Jan 2006)
New Revision: 18369

Modified:
   moonbase/trunk/filesys/e2fsprogs/init.d/mount
Log:
Heavy rewrite to the mount script:
* lots of cosmetic fixes (useless use of ${})
* code simplifications
* indentation: tabs
* uniform output : '*' in front of mount actions, not other stuff
* don't remount rootfs ro when it is already mounted ro on boot (useless)
* properly call mount with device node and type for sysfs, devfs
* use -n *everywhere* where appropriate
* do not mount /dev/pts explicitly - it *must* be listed in fstab and it is
  by default too
* create /dev/fs symlink next to shm/pts dirs
* fix loop bug: losetup was called before unmounting, resulting in stuck mounts
* add pseudo nfs4 to network filesystems
* properly parse fstab and strip whitespace/comments in the right order

This all was heavily tested and performs excellent on several boxes.


Modified: moonbase/trunk/filesys/e2fsprogs/init.d/mount
===================================================================
--- moonbase/trunk/filesys/e2fsprogs/init.d/mount       2006-01-27 19:59:04 UTC 
(rev 18368)
+++ moonbase/trunk/filesys/e2fsprogs/init.d/mount       2006-01-27 20:29:59 UTC 
(rev 18369)
@@ -1,390 +1,382 @@
 #!/bin/bash
+#
+# mount - mount and umount filesystems
+#
 
-# description: mount and umount the filesystem
-
-# Leave debugging off by default
-DEBUG=""
-
-wait_for_finish()
+wait_some()
 {
-   test -n "${1}" && sleep ${1}
+       if [ -n "$1" ]; then
+               sleep $1
+       fi
 }
 
 
 run_without_msg()
 {
-   if [ -z "${1}" ]; then
-      echo -n "run_without_msg: missing command."
-      echo -e ${RESULT_FAIL}
-      return
-   fi
+       if [ -z "$1" ]; then
+               echo -n "run_without_msg: missing command."
+               echo -e $RESULT_FAIL
+               return
+       fi
 
-   if [ -n "${DEBUG}" ]; then
-      echo -e "< ${1} >\n" 
-      eval ${1}
-   else
-      eval ${1} &> /dev/null      
-   fi
+       if [ -n "$DEBUG" ]; then
+               echo -e "< $1 >\n"
+               eval $1
+       else
+               eval $1 &> /dev/null
+       fi
 
-   local exit_status=$?
+       local exit_status=$?
 
-   wait_for_finish "${2}"
+       wait_some "$2"
 
-   return ${exit_status}   
+       return $exit_status
 }
 
 
 run_with_msg_and_exit_codes()
 {
-   # $1 : message
-   # $2 : command
-   # $3 : white space separated list of OK exit values
-   # $4 : white space separated list of WARNING exit values
-   # $5 : white separated list of FAILURE exit values
+       # $1 : message
+       # $2 : command
+       # $3 : white space separated list of OK exit values
+       # $4 : white space separated list of WARNING exit values
+       # $5 : white separated list of FAILURE exit values
 
-   if [ ! ${#} -eq 5 ]; then
-      echo "run_with_special_exit_codes: wrong parameter count. 5 params 
expected"
-      return 1
-   fi    
+       if [ ! ${#} -eq 5 ]; then
+               echo "run_with_special_exit_codes: wrong parameter count. 5 
params expected"
+               return 1
+       fi
 
-   echo -n "${1}"
+       echo -n "$1"
 
-   if [ -n "${DEBUG}" ]; then
-      echo -e "\n< run_with_special_exit_codes >"
-      echo -e "\n< command : ${2} >"
-      echo -e "\n< valid   : ${3} >"
-      echo -e "\n< warn    : ${4} >"
-      echo -e "\n< fail    : ${5} >"
-      eval ${2}
-   else
-      eval ${2} &> /dev/null
-   fi
+       if [ -n "${DEBUG}" ]; then
+               echo -e "\n< run_with_special_exit_codes >"
+               echo -e "\n< command : $2 >"
+               echo -e "\n< valid   : $3 >"
+               echo -e "\n< warn    : $4 >"
+               echo -e "\n< fail    : $5 >"
+               eval $2
+       else
+               eval $2 &> /dev/null
+       fi
 
-   local exit_status=$?
+       local exit_status=$?
 
-   for i in "${3}"
-   do
-      if [ "${exit_status}" = "${i}" ]; then
-         echo -e ${RESULT_OK}
-         return ${exit_status}
-      fi
-   done 
+       for i in "$3"
+       do
+               if [ "$exit_status" = "$i" ]; then
+                       echo -e $RESULT_OK
+                       return $exit_status
+               fi
+       done
 
-   for i in "${4}"
-   do
-      if [ "${exit_status}" = "${i}" ]; then
-         echo -e ${RESULT_WARN}
-         return ${exit_status}
-      fi
-   done 
+       for i in "$4"
+       do
+               if [ "$exit_status" = "$i" ]; then
+                       echo -e $RESULT_WARN
+                       return $exit_status
+               fi
+       done
 
-   for i in "${5}"
-   do
-      if [ "${exit_status}" = "${i}" ]; then
-         echo -e ${RESULT_FAIL}
-         return ${exit_status}
-      fi
-   done 
+       for i in "$5"
+       do
+               if [ "$exit_status" = "$i" ]; then
+                       echo -e $RESULT_FAIL
+                       return $exit_status
+               fi
+       done
 
-   warn_msg "result ${exit_status} did not match any supplied exit code value"
-   return ${exit_status}
+       warn_msg "result $exit_status did not match any supplied exit code 
value"
+       return $exit_status
 }
 
 
 run_with_msg()
 {
-   # message == $1
-   # cmd == $2
+       # message == $1
+       # cmd == $2
 
-   if [ -z "${1}" ]; then 
-      echo -n "run_cmd_with_msg: missing message."      
-      echo -e ${RESULT_WARN}
-      return
-   fi
+       if [ -z "$1" ]; then
+               echo -n "run_cmd_with_msg: missing message."
+               echo -e $RESULT_WARN
+               return
+       fi
 
-   if [ -z "${2}" ]; then
-      echo -n "run_cmd_with_msg: missing command."      
-      echo -e ${RESULT_WARN}
-      return
-   fi
-  
-   echo -n "${1}"  
+       if [ -z "$2" ]; then
+               echo -n "run_cmd_with_msg: missing command."
+               echo -e $RESULT_WARN
+               return
+       fi
 
-   if [ -n "${DEBUG}" ]; then
-       echo -n "< ${2} >"
-       eval ${2}
-   else
-       eval ${2} &> /dev/null
-   fi
+       echo -n "$1"
 
-   if [ $? -eq 0 ]; then
-      wait_for_finish ${3}
-      echo -e ${RESULT_OK}
-      return 0 
-   else
-      wait_for_finish ${3}
-      echo -e ${RESULT_FAIL}
-      return 1
-   fi
+       if [ -n "$DEBUG" ]; then
+                echo -n "< $2 >"
+                eval $2
+       else
+                eval $2 &> /dev/null
+       fi
+
+       if [ $? -eq 0 ]; then
+               echo -e $RESULT_OK
+               wait_some $3
+               return 0
+       else
+               echo -e $RESULT_FAIL
+               wait_some $3
+               return 1
+       fi
 }
 
 
 warn_msg()
 {
-   echo -ne "${1}"
-   echo -e ${RESULT_WARN}
+       echo -ne "$1$RESULT_WARN"
 }
 
+
 kernel_is_26()
 {
-  # don't forget /proc has to be mounted before we do this!
-  uname -r | grep -q "^2\.6" && return 0
-
-  return 1  
+       uname -r | grep -q "^2\.6"
 }
 
 
 kernel_is_24()
 {
-  # don't forget /proc has to be mounted before we do this!
-  uname -r | grep -q "^2\.4" && return 0
-
-  return 1
+       uname -r | grep -q "^2\.4"
 }
 
 
-# DONT FORGET TO SEE TO LVM FIXES!
-start() 
+start()
 {
-   echo -e "Mounting filesystems:"
+       echo -e "Mounting filesystems:"
 
-   run_with_msg " * Mounting proc : " "mount -t proc proc /proc"
+       run_with_msg " * Mounting /proc : " "mount -n -t proc proc /proc"
+       if ! grep -qw "ro" /proc/cmdline; then
+               run_with_msg " * Remounting root read-only : " "mount -n -o 
remount,ro /"
+       fi
 
-   run_with_msg " * Remounting root read-only : " "mount -n -o remount,ro /"
+       DEVNODES=`grep -o "dev=.*" /proc/cmdline | cut -d" " -f1 | sed -e 
"s/dev=//g"`
 
-   DEVNODES=`grep -o "dev=.*" /proc/cmdline | cut -d" " -f1 | sed -e 
"s/dev=//g"`
-  
-   case ${DEVNODES} in
-      static|devfs)
-         ;;
-      udev)
-         if kernel_is_24 ; then # *sigh*
-            warn_message "No udev for 2.4 kernels. Kernel commandline 
parameter ignored."
-            DEVNODES=""
-         fi
-         ;;
-      ?*)
-         warn_msg "Wrong device nodes parameter \"${DEVNODES}\" on kernel 
line. Valid are: devfs, udev, static\nFalling back to default behaviour"  
-         DEVNODES=""
-         ;;   
-   esac
+       case $DEVNODES in
+               static|devfs)
+                       ;;
+               udev)
+                       if kernel_is_24 ; then
+                               warn_message "No udev for 2.4 kernels. Kernel 
commandline parameter ignored."
+                               DEVNODES=""
+                       fi
+                       ;;
+               ?*)
+                       warn_msg "Wrong device nodes parameter \"$DEVNODES\" on 
kernel line. Valid are: devfs, udev, static\nFalling back to default behaviour"
+                       DEVNODES=""
+                       ;;
+       esac
 
-   # default bahaviour if there is no previous device nodes handling user 
choice
-   if [ -z "$DEVNODES" ]; then
-      if kernel_is_26 && [ -x "/sbin/udevstart" ] ; then
-         DEVNODES="udev"
-        if [ ! -z "${DEBUG}" ] ; then
-          echo -e "\n< Found udev >"
-        fi
-      elif [ -x "/sbin/devfsd" ] ; then
-         DEVNODES="devfs"
-        if [ ! -z "${DEBUG}" ] ; then
-          echo -e "\n< Found devfs >"
-        fi 
-      else
-         warn_msg "* Assuming a static /dev :"
-         DEVNODES="static"
-      fi
-   fi
-   
-   kernel_is_26 && run_with_msg " * Mounting sysfs : " "mount -t sysfs sysfs 
/sys"
-  
-   if [ "$DEVNODES" = "devfs" ]; then
+       # default bahaviour if the user did not choose himself
+       if [ -z "$DEVNODES" ]; then
+               if kernel_is_26 && [ -x "/sbin/udevstart" ] ; then
+                       DEVNODES="udev"
+                       if [ -n "$DEBUG" ] ; then
+                               echo -e "\n< Found udev >"
+                       fi
+               elif [ -x "/sbin/devfsd" ] ; then
+                       DEVNODES="devfs"
+                       if [ -n "$DEBUG" ] ; then
+                               echo -e "\n< Found devfs >"
+                       fi
+               else
+                       warn_msg "* Assuming a static /dev :"
+                       DEVNODES="static"
+               fi
+       fi
 
-      run_with_msg " * Mounting /dev : " "mount -n /dev"
-      run_with_msg " * Starting devfsd : " "devfsd /dev"
-   
-      kernel_is_26 && run_with_msg " * Mounting devpts on /dev/pts :" "mount 
-t devpts devpts /dev/pts"
+       kernel_is_26 && run_with_msg " * Mounting /sys : " "mount -n -t sysfs 
sysfs /sys"
 
-   elif [ "$DEVNODES" = "udev" ]; then
+       if [ "$DEVNODES" = "devfs" ]; then
+               run_with_msg " * Mounting /dev : " "mount -n -t devfs devfs 
/dev"
+               run_with_msg "Starting devfsd : " "devfsd /dev"
+       elif [ "$DEVNODES" = "udev" ]; then
+               run_with_msg " * Mounting /dev : " "mount -n -t tmpfs tmpfs 
/dev -o size=4m"
+               run_with_msg "Setting /sbin/udevsend to manage hotplug events : 
" "echo /sbin/udevsend > /proc/sys/kernel/hotplug"
+               run_with_msg "Creating udev device nodes on /dev : " 
"/sbin/udevstart"
+               run_without_msg "mkdir -p /dev/{pts,shm}"
+               run_without_msg "ln -sf /proc/self/fd /dev/fd"
+       fi
 
-      run_with_msg  " * Creating ramfs on /dev : "                           
"mount -t ramfs none /dev"
-      run_with_msg  " * Setting /sbin/udevsend to manage hotplug events : "  
"echo /sbin/udevsend > /proc/sys/kernel/hotplug"
-      run_with_msg  " * Creating udev device nodes on /dev : "               
"/sbin/udevstart"
-      run_with_msg  " * Creating extra /dev/pts /dev/shm dirs : "            
"mkdir /dev/{pts,shm}"
-      run_with_msg  " * Mounting devpts on /dev/pts : "                      
"mount -t devpts devpts /dev/pts"
+       if [ -f /forcefsck ] ; then
+               FORCE="-f"
+       fi
 
-   fi
+       run_with_msg_and_exit_codes "Checking all file systems : " "fsck -A -y 
-V $FORCE" "0" "1" ""
+       exit_status=$?
 
-   if [ -f /forcefsck ] ; then 
-      FORCE="-f"
-   fi
+       case $exit_status in
+               0|1) # exited fine ( 0 ), or errors were fixed (1)
+                       rm -f /forcefsck
+                       ;;
+               *)
+                       echo " * fsck failed!"
+                       echo ""
+                       echo "   Please repair your file system manually by"
+                       echo "   running /sbin/fsck without the -p option."
+                       echo ""
+                       sulogin
+                       reboot  -f
+                       ;;
+       esac
 
-   run_with_msg_and_exit_codes " * Checking all file systems : " "fsck -A -y 
-V $FORCE" "0" "1" ""
-   exit_status=$?
 
-   case ${exit_status} in 
-      0|1) # exited fine ( 0 ), or errors were fixed (1) 
-         rm -f /forcefsck
-         ;;
-      *)  
-         echo  -e " * fsck failed."
-         echo     " * Please repair your file system"
-         echo     " * manually by running /sbin/fsck"
-         echo     " * without the -p option"
-         sulogin
-         reboot  -f
-         ;;
-   esac
- 
-  
-   run_with_msg " * Remounting root readwrite : " "mount -n -o remount,rw /"
+       run_with_msg " * Remounting root readwrite : " "mount -n -o remount,rw 
/"
 
-   run_without_msg "echo -n \"\" > /etc/mtab"
-   run_without_msg "rm -f /etc/mtab~*"
+       run_without_msg "echo -n \"\" > /etc/mtab"
+       run_without_msg "rm -f /etc/mtab~*"
+       # hack to get it into /etc/mtab
+       run_without_msg "mount -f -o remount,rw /"
 
-   run_without_msg "mount -f -o remount,rw /"   
-  
-   run_with_msg  " * Mounting swap : " "swapon -a"
-  
-   echo "Mounting remaining filesystems : "
+       run_with_msg  "Turning on swap : " "swapon -a"
 
-   # We mounted devfs before, now a hack to get it into /etc/mtab
-   test "${DEVNODES}" = "devfs" && run_without_msg "mount -f -t devfs devfs 
/dev"
-  
-   # sort the filesystems, swapfiles at bottom, squeeze separators into spaces
-   grep -v -e '#\|^$\|noauto' /etc/fstab | tr -s '[:space:]' | tr '\t' ' ' | 
LC_ALL=C sort -k2 | while read DEVICE MOUNTPOINT FSTYPE OPTS REST
-   do  
-      case ${MOUNTPOINT} in
-         /|/proc|/sys|/dev|/dev/pts) # been mounted previously
-            continue      
-            ;;
-         none)
-            continue
-            ;;
-      esac
+       echo "Mounting remaining filesystems : "
 
-      case ${FSTYPE} in
-         nfs|smbfs)    # we don't do networked fs's yet!
-            continue 
-            ;;
-      esac
-      
-      test -n "${OPTS}" && OPTS="-o ${OPTS}"
+       # hack to get it into /etc/mtab
+       if [ "$DEVNODES" == "devfs" ]; then
+               run_without_msg "mount -f -t devfs devfs /dev"
+       fi
 
-      run_with_msg  " * Mounting $MOUNTPOINT : "  "mount ${OPTS} 
${MOUNTPOINT}" 
+       # sort the filesystems, swapfiles at bottom, squeeze separators into 
spaces
+       sed 's/#.*$//g' /etc/fstab | tr '\t' ' ' | tr -s '[:space:]' | grep -v 
-e '^$\|noauto' | LC_ALL=C sort -k2 | while read DEVICE MOUNTPOINT FSTYPE OPTS 
REST
+       do
+               case $MOUNTPOINT in
+                       /|/proc|/sys|/dev) # been mounted previously
+                               continue
+                               ;;
+                       none)
+                               continue
+                               ;;
+               esac
 
-   done
+               case $FSTYPE in
+                       nfs|nfs4|smbfs)    # we don't do networked fs's yet!
+                               continue
+                               ;;
+               esac
+
+               if [ -n "$OPTS" ]; then
+                       OPTS="-o $OPTS"
+               fi
+
+               run_with_msg  " * Mounting $MOUNTPOINT : "  "mount $MOUNTPOINT 
$OPTS"
+
+       done
 }
 
 
-stop() 
+stop()
 {
-   # Establish where to get mount table from, save these since the files 
change if we unmount something
-   if [ -r /proc/mounts ] ; then
-      MOUNTS=/proc/mounts
-   else
-      MOUNTS=/etc/mtab
-   fi
-    
-   # write wtmp in /var before umounting /var
-   run_without_msg "reboot -w"
-    
-   echo "Unmounting all filesystems :"
-    
-   cat ${MOUNTS} | tac | while read TYPE PNT FS REST
-   do
-           
-      case ${FS} in
-         nfs|smbfs) # we don't do net filesystems
-            continue
-            ;;
-      esac
+       # Establish where to get mount table from, save these since the files 
change if we unmount something
+       if [ -r /proc/mounts ] ; then
+               MOUNTS=/proc/mounts
+       else
+               MOUNTS=/etc/mtab
+       fi
 
-      case ${PNT} in
-         /|/proc|/dev|/sys) # no need to unmount these
-            continue
-            ;;
-      esac
+       # write wtmp in /var before umounting /var
+       run_without_msg "reboot -w"
 
-      echo  -n " * Umounting ${PNT}:"
-      run_without_msg "sync ; sync" # Flush buffers
-           
-      if [ "${TYPE}" == "/dev/loop*" ] && [ -f ${PNT} ] ; then      
-         run_with_msg " * Detaching loopback device ${PNT} : " "losetup -d 
${PNT}"
-         continue                                   
-      fi
-           
-      ITERATION=1
-      UNMOUNT_ERROR=0
+       echo "Unmounting all filesystems :"
 
-      until [ -z `cat ${MOUNTS} | grep "${PNT}" | awk '{ print $1 }'` ] || [ 
${UNMOUNT_ERROR} -eq 1 ];
-      do          
-         case ${ITERATION} in
-           1)
-             run_without_msg "umount ${PNT}"
-             ;;
-           2)
-             sleep 1
-             run_without_msg "fuser -s -km -3 ${PNT}" "1"
-             run_without_msg "umount ${PNT}"
-             ;; 
-           3)
-             sleep 1 
-             run_without_msg "fuser -s -km -9 ${PNT}"  "1"
-             run_without_msg "umount ${PNT}" "1"
-             ;;
-           4) 
-             sleep 1  
-             run_without_msg "fuser -s -km -9 ${PNT}" "1"
-             run_without_msg "umount -lf ${PNT}"    "4"
-             run_without_msg "sync; sync"
-             ;;
-           5)
-             UNMOUNT_ERROR=1 # warn that it hasn't been able to unmount the 
easy way
-             ;;
-          esac    
+       cat $MOUNTS | tac | while read TYPE PNT FS REST ; do
+       
+               case $FS in
+                       nfs|nfs4|smbfs) # we don't do net filesystems
+                               continue
+                               ;;
+               esac
 
-          (( ITERATION++ ))
-      done
+               case $PNT in
+                       /|/proc|/dev|/sys) # no need to unmount these
+                               continue
+                               ;;
+               esac
 
-      if [ ${UNMOUNT_ERROR} -eq 1 ]; then # haven't been able to unmount the 
point, so be drastic
-         echo -e ${RESULT_WARN}
-         run_with_msg "  * Attempting to remount ${PNT} read-only : " "mount 
-o remount,ro ${PNT}"
-      else
-         echo -e ${RESULT_OK}       
-      fi
+               echo  -n " * Umounting $PNT:"
+               run_without_msg "sync ; sync" # Flush buffers
+       
+               ITERATION=1
+               UNMOUNT_ERROR=0
 
-   done
-    
-   run_with_msg " * Deactivating swap space : " "swapoff  -a"
-    
-   run_without_msg "sync; sync;" "2"  # might take some time so we wait here 
for a couple of seconds
-    
-   if ! run_with_msg  " * Remounting root readonly : "  "mount -n -o 
remount,ro /" ; then
-      if ! run_with_msg  " * Trying again to remount root readonly : "  
"umount -l -O remount,ro /" "4" ; then
-         read   -n 1  -t 30  -p  "Do you want to login? (y/n) "  CONFIRM
-         echo   ""
-         case ${CONFIRM} in
-            y|Y)  sulogin ;;
-         esac
-      fi
-   fi
+               until [ -z `grep -w $PNT $MOUNTS | awk '{ print $1 }'` ] || [ 
$UNMOUNT_ERROR -eq 1 ];
+               do
+                       case $ITERATION in
+                         1)
+                                run_without_msg "umount $PNT"
+                                ;;
+                         2)
+                                sleep 1
+                                run_without_msg "fuser -s -km -3 $PNT" "1"
+                                run_without_msg "umount $PNT"
+                                ;;
+                         3)
+                                sleep 1
+                                run_without_msg "fuser -s -km -9 $PNT" "1"
+                                run_without_msg "umount $PNT" "1"
+                                ;;
+                         4)
+                                sleep 1
+                                run_without_msg "fuser -s -km -9 $PNT" "1"
+                                run_without_msg "umount -lf $PNT" "4"
+                                run_without_msg "sync; sync"
+                                ;;
+                         5)
+                                UNMOUNT_ERROR=1 # warn that it hasn't been 
able to unmount the easy way
+                                ;;
+                        esac
 
-   run_without_msg "sync; sync" "2"
+                        (( ITERATION++ ))
+               done
+
+               if [ $UNMOUNT_ERROR -eq 1 ]; then # haven't been able to 
unmount the point, so be drastic
+                       echo -e $RESULT_WARN
+                       run_with_msg "  * Attempting to remount $PNT read-only 
: " "mount $PNT -o remount,ro"
+               else
+                       echo -e $RESULT_OK
+               fi
+
+               if [ "$TYPE" == "/dev/loop*" -a -f $PNT ] ; then
+                       # unhook loopback device too
+                       run_with_msg "Detaching loopback device $TYPE : " 
"losetup -d $TYPE"
+               fi
+       
+       done
+
+       run_with_msg "Turning off swap : " "swapoff -a"
+
+       run_without_msg "sync; sync;" "2"  # might take some time so we wait 
here for a couple of seconds
+
+       if ! run_with_msg  " * Remounting root readonly : "  "mount -n -o 
remount,ro /" ; then
+               if ! run_with_msg  " * Trying again to remount root readonly : 
"  "umount -l -O remount,ro /" "4" ; then
+                       read -n 1 -t 30 -p "Do you want to login? (y/n) "  
CONFIRM
+                       echo   ""
+                       case $CONFIRM in
+                               y|Y)  sulogin ;;
+                       esac
+               fi
+       fi
+
+       run_without_msg "sync; sync" "2"
 }
 
+
 # to avoid confusion we force only these options as being valid:
-case "${1}" in
-   start|stop) 
-      ;;
+case "$1" in
+       start|stop)
+               ;;
 
-   *) 
-      echo "Warning: ${0} should never be called directly";
-      exit 1  
-      ;;
+       *)
+               echo "Warning: $0 should never be called directly";
+               exit 1
+               ;;
 esac
 
 . /lib/lsb/init-functions
 
-exit


Ruby Jobs
Java Jobs
Jobs in California
more...
what
job title, keywords
where
city, state, zip
jobs by job search
Search:
Java, servers, webhosting, windows, cisco ...
more...
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
encryption.gpg....    ietf.rfc822/199...    freebsd.devel.i...    lang.haskell.li...    mail.squirrelma...    web.zope.plone....    yellowdog.gener...    text.xml.xalan....    recreation.phot...    kde.devel.educa...    hardware.bus.ca...    printing.ghosts...    voip.peering/20...    assembly/2006-0...    org.user-groups...    culture.interne...    network.i2p/200...    boot-loaders.ya...    xfree86.render/...    qnx.openqnx.dev...    jakarta.velocit...    user-groups.pal...   
Home | blog view | USPTO Patent Archive | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe