message that fstab is missing. (mount_info::from_fstab): Use CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX instead of constant string. (mount_info::read_mounts): Remove. (mount_info::from_registry): Remove. (mount_info::read_cygdrive_info_from_registry): Remove. * postinstall: Enable code to create fstab entries from old registry entries. * registry.cc (reg_key::reg_key): Drop CYGWIN_INFO_CYGNUS_REGISTRY_NAME from registry key. * shared_info.h (mount_info::read_mounts): Remove declaration. (mount_info::from_registry): Ditto. (mount_info::to_registry): Ditto. (mount_info::read_cygdrive_info_from_registry): Ditto. * winver.rc (CYGWIN_REGISTRY_KEY): Remove. (LegalCopyright): Fix to include 2008. (RegistryKey): Set to CYGWIN_INFO_CYGWIN_REGISTRY_NAME. * include/cygwin/version.h (CYGWIN_INFO_CYGNUS_REGISTRY_NAME): Remove.
		
			
				
	
	
		
			299 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			299 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Copyright 2008 Red Hat, Inc.
 | |
| #
 | |
| # This file is part of Cygwin.
 | |
| #
 | |
| # This software is a copyrighted work licensed under the terms of the
 | |
| # Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 | |
| # details.
 | |
| #
 | |
| export PATH="/bin:$PATH"
 | |
| 
 | |
| SYSCONFDIR=/etc
 | |
| FSTAB="${SYSCONFDIR}/fstab"
 | |
| FSTABDIR="${SYSCONFDIR}/fstab.d"
 | |
| 
 | |
| DEVDIR=/dev
 | |
| 
 | |
| print_flags ()
 | |
| {
 | |
|   (( $1 & 0x0002 )) && echo -n "binary" || echo -n "text"
 | |
|   (( $1 & 0x0010 )) && echo -n ",exec"
 | |
|   (( $1 & 0x0040 )) && echo -n ",cygexec"
 | |
|   (( $1 & 0x0100 )) && echo -n ",notexec"
 | |
|   (( $1 & 0x0800 )) && echo -n ",managed"
 | |
| }
 | |
| 
 | |
| # Create fstab file if it doesn't exist.
 | |
| if [ -e "${FSTAB}" -a ! -f "${FSTAB}" ]
 | |
| then
 | |
|   # Try to move
 | |
|   mv -f "${FSTAB}" "${FSTAB}.orig"
 | |
|   if [ -e "${FSTAB}" -a ! -f "${FSTAB}" ]
 | |
|   then
 | |
|     echo
 | |
|     echo "${FSTAB} is existant but not a file."
 | |
|     echo "Since this file is specifying the mount points, this might"
 | |
|     echo "result in unexpected trouble.  Please fix that manually."
 | |
|     echo
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if [ ! -e "${FSTAB}" ]
 | |
| then
 | |
|   # Set IFS to just a LF
 | |
|   _OLD_IFS="$IFS"
 | |
|   IFS="
 | |
| "
 | |
|   for line in $(mount)
 | |
|   do
 | |
|     [[ "$line" =~ ([^ ]*)\ on\ ([^ ]*)\ type\ ([^ ]*)\ .* ]]
 | |
|     if [ "${BASH_REMATCH[2]}" = "/" ]
 | |
|     then
 | |
|       CYGROOT="${BASH_REMATCH[1]}"
 | |
|       FS_TYPE="${BASH_REMATCH[3]}"
 | |
|       break
 | |
|     fi
 | |
|   done
 | |
|   cat > ${FSTAB} << EOF
 | |
| # The  file fstab contains descriptive information about the various file
 | |
| # systems.  fstab is only read by programs, and not written;  it  is  the
 | |
| # duty  of  the system administrator to properly create and maintain this
 | |
| # file.  Each filesystem is described on a separate line; fields on  each
 | |
| # line are separated by tabs or spaces.  Lines starting with '#' are com-
 | |
| # ments.
 | |
| #
 | |
| # The first field, (fs_spec),  describes  the  block  special  device  or
 | |
| # remote filesystem to be mounted.  On Cygwin, this is the native Windows
 | |
| # path which  the mount point links in.  As path separator you MUST use a
 | |
| # slash.  Usage of  a backslash might  lead to  unexpected  results.  UNC
 | |
| # paths  (using  slashes,  not  backslashes)  are  allowed.  If  the path
 | |
| # contains spaces these can be escaped as '\040'.
 | |
| #
 | |
| # The second field, (fs_file), describes the mount point for the filesys-
 | |
| # tem.  If the  name  of  the  mount point contains  spaces these can be
 | |
| # escaped as '\040'.
 | |
| #
 | |
| # The third field, (fs_vfstype), describes the type  of  the  filesystem.
 | |
| # Cygwin supports any string here, since  the file system type is usually
 | |
| # not  evaluated.  The  noticable  exception  is  the  file  system  type
 | |
| # cygdrive.  This  type is  used to  set the  cygdrive  prefix.  See  the
 | |
| # user's guide for more information about the cygdrive prefix.
 | |
| #
 | |
| # The  fourth  field, (fs_mntops), describes the mount options associated
 | |
| # with  the filesystem.  It is  formatted as a  comma separated  list  of
 | |
| # options.  It contains at least  the type of mount (binary or text) plus
 | |
| # any additional options appropriate to  the filesystem type.  Recognized
 | |
| # options are binary, text, nouser, user, exec, notexec, cygexec, nosuid,
 | |
| # managed.  For a description of the options see  the user's guide.  Note
 | |
| # that  nouser mount  points  are  not overridable  by  a  later  call to
 | |
| # mount(2).  This is only  possible for user mount  points.  Mount points
 | |
| # are by default nouser mount points, unless you specify the option user.
 | |
| #
 | |
| # The fifth (fs_freq) and sixth (fs_passno) field  are ignored.  They are
 | |
| # so far only specified to keep a Linux-like fstab file layout.
 | |
| #
 | |
| # Note that  you don't have  to specify an fstab  entry for the root dir,
 | |
| # unless you want  to have the  root dir pointing  to somewhere  entirely
 | |
| # different (hopefully  you know what  you're doing), or  if you want  to
 | |
| # mount the root dir with special options (for instance, as text mount).
 | |
| #
 | |
| # Example entries:
 | |
| #
 | |
| #   Just a normal mount point:
 | |
| #
 | |
| #       c:/foo /bar fat32 binary 0 0
 | |
| #
 | |
| #   A mount point for a managed, textmode mount:
 | |
| #
 | |
| #       C:/foo /bar/baz ntfs text,managed 0 0
 | |
| #
 | |
| #   A mount point for a Windows directory with spaces in it:
 | |
| #
 | |
| #       C:/Documents\040and\040Settings /docs ext3 binary 0 0
 | |
| #
 | |
| #   A mount point for a remote directory:
 | |
| #
 | |
| #       //server/share/subdir /srv/subdir smbfs binary 0 0
 | |
| #
 | |
| #   This is just a comment:
 | |
| #
 | |
| #       # This is just a comment
 | |
| #
 | |
| #   Set the cygdrive prefix to /mnt:
 | |
| #
 | |
| #       none /mnt cygdrive binary 0 0
 | |
| #
 | |
| 
 | |
| EOF
 | |
| 
 | |
|   usr_bin=""
 | |
|   usr_lib=""
 | |
|   key='\HKLM\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2'
 | |
|   for subkey in $(regtool -q list "$key")
 | |
|   do
 | |
|     if [[ "$subkey" =~ /.* ]]
 | |
|     then
 | |
|       [ "$subkey" = "/usr/bin" ] && usr_bin="1"
 | |
|       [ "$subkey" = "/usr/lib" ] && usr_lib="1"
 | |
|       nat=$(regtool -q get "$key\\$subkey\native")
 | |
|       nat="${nat//\\//}"
 | |
|       nat="${nat// /\\040}"
 | |
|       psx="${subkey// /\\040}"
 | |
|       flags=$(regtool -q get "$key\\$subkey\flags")
 | |
|       echo -n "${nat} ${psx} some_fs "
 | |
|       print_flags $flags
 | |
|       echo " 0 0"
 | |
|     fi >> ${FSTAB}
 | |
|   done
 | |
|   [ -z "$usr_bin" ] &&
 | |
|     echo "${CYGROOT//\\//}/bin /usr/bin ${FS_TYPE} binary 0 0" >> ${FSTAB}
 | |
|   [ -z "$usr_lib" ] &&
 | |
|     echo "${CYGROOT//\\//}/lib /usr/lib ${FS_TYPE} binary 0 0" >> ${FSTAB}
 | |
| 
 | |
|   cygd=""
 | |
|   prefix=$(regtool -q get "$key\cygdrive prefix")
 | |
|   flags=$(regtool -q get "$key\cygdrive flags")
 | |
|   [ -z "$flags" ] && flags=2
 | |
|   # Don't take system and cygdrive flags into account when testing
 | |
|   if [ -n "$prefix" \
 | |
|        -a \( "$prefix" != "/cygdrive" -o "$(( $flags & ~0x28 ))" -ne 2 \) ]
 | |
|   then
 | |
|     cygd="1"
 | |
|     psx="${prefix// /\\040}"
 | |
|     echo -n "none ${psx} cygdrive "
 | |
|     print_flags $flags
 | |
|     echo ",user 0 0"
 | |
|   fi >> ${FSTAB}
 | |
| 
 | |
|   if [ -z "$cygd" ]
 | |
|   then
 | |
|     echo "# This is default anyway:" >> ${FSTAB}
 | |
|     echo "# none /cygdrive cygdrive binary,user 0 0" >> ${FSTAB}
 | |
|   fi
 | |
|   IFS="$_OLD_IFS"
 | |
| fi
 | |
| 
 | |
| # Check for ${FSTABDIR} directory
 | |
| 
 | |
| if [ -e "${FSTABDIR}" -a ! -d "${FSTABDIR}" ]
 | |
| then 
 | |
|   # No mercy.  Try to remove.
 | |
|   rm -f "${FSTABDIR}"
 | |
|   if [ -e "${FSTABDIR}" -a ! -d "${FSTABDIR}" ]
 | |
|   then 
 | |
|     echo
 | |
|     echo "${FSTABDIR} is existant but not a directory."
 | |
|     echo "Please fix that manually."
 | |
|     echo
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Create it if necessary
 | |
| 
 | |
| if [ ! -e "${FSTABDIR}" ]
 | |
| then
 | |
|   mkdir -m 1777 "${FSTABDIR}"
 | |
|   if [ ! -e "${FSTABDIR}" ]
 | |
|   then
 | |
|     echo
 | |
|     echo "Creating ${FSTABDIR} directory failed."
 | |
|     echo "Please fix that manually."
 | |
|     echo
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Check for ${DEVDIR} directory
 | |
| 
 | |
| if [ -e "${DEVDIR}" -a ! -d "${DEVDIR}" ]
 | |
| then 
 | |
|   # No mercy.  Try to remove.
 | |
|   rm -f "${DEVDIR}"
 | |
|   if [ -e "${DEVDIR}" -a ! -d "${DEVDIR}" ]
 | |
|   then 
 | |
|     echo
 | |
|     echo "${DEVDIR} is existant but not a directory."
 | |
|     echo "Please fix that manually, otherwise you WILL get problems."
 | |
|     echo
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Create it if necessary
 | |
| 
 | |
| if [ ! -e "${DEVDIR}" ]
 | |
| then
 | |
|   mkdir -m 755 "${DEVDIR}"
 | |
|   if [ ! -e "${DEVDIR}" ]
 | |
|   then
 | |
|     echo
 | |
|     echo "Creating ${DEVDIR} directory failed."
 | |
|     echo "Please fix that manually, otherwise you WILL get problems."
 | |
|     echo
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| setfacl -m u:system:rwx "${DEVDIR}"
 | |
| 
 | |
| # Check for ${DEVDIR}/shm directory (for POSIX semaphores and POSIX shared mem)
 | |
| 
 | |
| if [ -e "${DEVDIR}/shm" -a ! -d "${DEVDIR}/shm" ]
 | |
| then
 | |
|   # No mercy.  Try to remove.
 | |
|   rm -f "${DEVDIR}/shm"
 | |
|   if [ -e "${DEVDIR}/shm" -a ! -d "${DEVDIR}/shm" ]
 | |
|   then 
 | |
|     echo
 | |
|     echo "${DEVDIR}/shm is existant but not a directory."
 | |
|     echo "POSIX semaphores and POSIX shared memory will not work"
 | |
|     echo
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Create it if necessary
 | |
| 
 | |
| if [ ! -e "${DEVDIR}/shm" ]
 | |
| then
 | |
|   mkdir -m 1777 "${DEVDIR}/shm"
 | |
|   if [ ! -e "${DEVDIR}/shm" ]
 | |
|   then
 | |
|     echo
 | |
|     echo "Creating ${DEVDIR}/shm directory failed."
 | |
|     echo "POSIX semaphores and POSIX shared memory will not work"
 | |
|     echo
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Check for ${DEVDIR}/mqueue directory (for POSIX message queues)
 | |
| 
 | |
| if [ -e "${DEVDIR}/mqueue" -a ! -d "${DEVDIR}/mqueue" ]
 | |
| then
 | |
|   # No mercy.  Try to remove.
 | |
|   rm -f "${DEVDIR}/shm"
 | |
|   if [ -e "${DEVDIR}/shm" -a ! -d "${DEVDIR}/shm" ]
 | |
|   then 
 | |
|     echo
 | |
|     echo "${DEVDIR}/mqueue is existant but not a directory."
 | |
|     echo "POSIX message queues will not work"
 | |
|     echo
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Create it if necessary
 | |
| 
 | |
| if [ ! -e "${DEVDIR}/mqueue" ]
 | |
| then
 | |
|   mkdir -m 1777 "${DEVDIR}/mqueue"
 | |
|   if [ ! -e "${DEVDIR}/mqueue" ]
 | |
|   then
 | |
|     echo
 | |
|     echo "Creating ${DEVDIR}/mqueue directory failed."
 | |
|     echo "POSIX message queues will not work"
 | |
|     echo
 | |
|   fi
 | |
| fi
 |