| 
									
										
											  
											
												Initramfs scripts for ZoL.
* Supports booting of a ZFS snapshot.
  Do this by cloning the snapshot into a dataset. If this, the resulting
  dataset, already exists, destroy it. Then mount it on root.
  * If snapshot does not exist, use base dataset (the part before '@')
    as boot filesystem instead.
  * If no snapshot is specified on the 'root=' kernel command line, but there
    is an '@', then get a list of snapshots below that filesystem and ask the
    user which to use.
  * Clone with 'mountpoint=none' and 'canmount=noauto' - we mount manually
    and explicitly.
    * For sub-filesystems, that doesn't have a mountpoint property set, we use
      the 'org.zol:mountpoint' to keep track of it's mountpoint.
  * Allow rollback of snapshots instead of clone it and boot from the clone.
* Allow mounting a root- and subfs with mountpoint=legacy set
* Allow mounting a filesystem which is using nativ encryption.
* Support all currently used kernel command line arguments
  All the different distributions have their own standard on what to specify
  on the kernel command line to boot of a ZFS filesystem.
  * Extra options:
    * zfsdebug=(on,yes,1)	Show extra debugging information
    * zfsforce=(on,yes,1)	Force import the pool
    * rollback=(on,yes,1)	Rollback (instead of clone) the snapshot
* Only try to import pool if it haven't already been imported
  * This will negate the need to force import a pool that have not been exported cleanly.
  * Support exclusion of pools to import by setting ZFS_POOL_EXCEPTIONS in /etc/default/zfs.
* Support additional configuration variable ZFS_INITRD_ADDITIONAL_DATASETS
  to mount additional filesystems not located under your root dataset.
* Include /etc/modprobe.d/{zfs,spl}.conf in the initrd if it/they exist.
* Include the udev rule to use by-vdev for pool imports.
* Include the /etc/default/zfs file to the initrd.
* Only try /dev/disk/by-* in the initrd if USE_DISK_BY_ID is set.
  * Use /dev/disk/by-vdev before anything.
  * Add /dev as a last ditch attempt.
  * Fallback to using the cache file if that exist if nothing else worked.
* Use /sbin/modprobe instead of built-in (BusyBox) modprobe.
  This gets rid of the message "modprobe: can't load module zcommon".
  Thanx to pcoultha for finding this.
Signed-off-by: Turbo Fredriksson <turbo@bayour.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2116
Closes #2114
											
										 
											2014-01-30 20:26:48 +04:00
										 |  |  | #!/bin/sh | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Add ZoL filesystem capabilities to an initrd, usually for a native ZFS root. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # This hook installs udev rules for ZoL. | 
					
						
							|  |  |  | PREREQ="zdev" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # These prerequisites are provided by the zfsutils package. The zdb utility is | 
					
						
							|  |  |  | # not strictly required, but it can be useful at the initramfs recovery prompt. | 
					
						
							|  |  |  | COPY_EXEC_LIST="/sbin/zdb /sbin/zpool /sbin/zfs /sbin/mount.zfs" | 
					
						
							| 
									
										
										
										
											2015-07-24 15:49:03 +03:00
										 |  |  | COPY_EXEC_LIST="$COPY_EXEC_LIST /usr/bin/dirname /lib/udev/vdev_id" | 
					
						
							| 
									
										
											  
											
												Initramfs scripts for ZoL.
* Supports booting of a ZFS snapshot.
  Do this by cloning the snapshot into a dataset. If this, the resulting
  dataset, already exists, destroy it. Then mount it on root.
  * If snapshot does not exist, use base dataset (the part before '@')
    as boot filesystem instead.
  * If no snapshot is specified on the 'root=' kernel command line, but there
    is an '@', then get a list of snapshots below that filesystem and ask the
    user which to use.
  * Clone with 'mountpoint=none' and 'canmount=noauto' - we mount manually
    and explicitly.
    * For sub-filesystems, that doesn't have a mountpoint property set, we use
      the 'org.zol:mountpoint' to keep track of it's mountpoint.
  * Allow rollback of snapshots instead of clone it and boot from the clone.
* Allow mounting a root- and subfs with mountpoint=legacy set
* Allow mounting a filesystem which is using nativ encryption.
* Support all currently used kernel command line arguments
  All the different distributions have their own standard on what to specify
  on the kernel command line to boot of a ZFS filesystem.
  * Extra options:
    * zfsdebug=(on,yes,1)	Show extra debugging information
    * zfsforce=(on,yes,1)	Force import the pool
    * rollback=(on,yes,1)	Rollback (instead of clone) the snapshot
* Only try to import pool if it haven't already been imported
  * This will negate the need to force import a pool that have not been exported cleanly.
  * Support exclusion of pools to import by setting ZFS_POOL_EXCEPTIONS in /etc/default/zfs.
* Support additional configuration variable ZFS_INITRD_ADDITIONAL_DATASETS
  to mount additional filesystems not located under your root dataset.
* Include /etc/modprobe.d/{zfs,spl}.conf in the initrd if it/they exist.
* Include the udev rule to use by-vdev for pool imports.
* Include the /etc/default/zfs file to the initrd.
* Only try /dev/disk/by-* in the initrd if USE_DISK_BY_ID is set.
  * Use /dev/disk/by-vdev before anything.
  * Add /dev as a last ditch attempt.
  * Fallback to using the cache file if that exist if nothing else worked.
* Use /sbin/modprobe instead of built-in (BusyBox) modprobe.
  This gets rid of the message "modprobe: can't load module zcommon".
  Thanx to pcoultha for finding this.
Signed-off-by: Turbo Fredriksson <turbo@bayour.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2116
Closes #2114
											
										 
											2014-01-30 20:26:48 +04:00
										 |  |  | COPY_FILE_LIST="/etc/hostid /etc/zfs/zpool.cache /etc/default/zfs" | 
					
						
							|  |  |  | COPY_FILE_LIST="$COPY_FILE_LIST /etc/zfs/zfs-functions /etc/zfs/vdev_id.conf" | 
					
						
							|  |  |  | COPY_FILE_LIST="$COPY_FILE_LIST /lib/udev/rules.d/69-vdev.rules" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # These prerequisites are provided by the base system. | 
					
						
							|  |  |  | COPY_EXEC_LIST="$COPY_EXEC_LIST /bin/hostname /sbin/blkid" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Explicitly specify all kernel modules because automatic dependency resolution | 
					
						
							|  |  |  | # is unreliable on many systems. | 
					
						
							| 
									
										
										
										
											2017-10-12 19:39:45 +03:00
										 |  |  | BASE_MODULES="zlib_deflate spl zavl zcommon znvpair zunicode zfs icp" | 
					
						
							| 
									
										
											  
											
												Initramfs scripts for ZoL.
* Supports booting of a ZFS snapshot.
  Do this by cloning the snapshot into a dataset. If this, the resulting
  dataset, already exists, destroy it. Then mount it on root.
  * If snapshot does not exist, use base dataset (the part before '@')
    as boot filesystem instead.
  * If no snapshot is specified on the 'root=' kernel command line, but there
    is an '@', then get a list of snapshots below that filesystem and ask the
    user which to use.
  * Clone with 'mountpoint=none' and 'canmount=noauto' - we mount manually
    and explicitly.
    * For sub-filesystems, that doesn't have a mountpoint property set, we use
      the 'org.zol:mountpoint' to keep track of it's mountpoint.
  * Allow rollback of snapshots instead of clone it and boot from the clone.
* Allow mounting a root- and subfs with mountpoint=legacy set
* Allow mounting a filesystem which is using nativ encryption.
* Support all currently used kernel command line arguments
  All the different distributions have their own standard on what to specify
  on the kernel command line to boot of a ZFS filesystem.
  * Extra options:
    * zfsdebug=(on,yes,1)	Show extra debugging information
    * zfsforce=(on,yes,1)	Force import the pool
    * rollback=(on,yes,1)	Rollback (instead of clone) the snapshot
* Only try to import pool if it haven't already been imported
  * This will negate the need to force import a pool that have not been exported cleanly.
  * Support exclusion of pools to import by setting ZFS_POOL_EXCEPTIONS in /etc/default/zfs.
* Support additional configuration variable ZFS_INITRD_ADDITIONAL_DATASETS
  to mount additional filesystems not located under your root dataset.
* Include /etc/modprobe.d/{zfs,spl}.conf in the initrd if it/they exist.
* Include the udev rule to use by-vdev for pool imports.
* Include the /etc/default/zfs file to the initrd.
* Only try /dev/disk/by-* in the initrd if USE_DISK_BY_ID is set.
  * Use /dev/disk/by-vdev before anything.
  * Add /dev as a last ditch attempt.
  * Fallback to using the cache file if that exist if nothing else worked.
* Use /sbin/modprobe instead of built-in (BusyBox) modprobe.
  This gets rid of the message "modprobe: can't load module zcommon".
  Thanx to pcoultha for finding this.
Signed-off-by: Turbo Fredriksson <turbo@bayour.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2116
Closes #2114
											
										 
											2014-01-30 20:26:48 +04:00
										 |  |  | CRPT_MODULES="sun-ccm sun-gcm sun-ctr" | 
					
						
							|  |  |  | MANUAL_ADD_MODULES_LIST="$BASE_MODULES" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Generic result code. | 
					
						
							|  |  |  | RC=0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case $1 in | 
					
						
							|  |  |  | prereqs) | 
					
						
							|  |  |  | 	echo "$PREREQ" | 
					
						
							|  |  |  | 	exit 0 | 
					
						
							|  |  |  | 	;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for ii in $COPY_EXEC_LIST | 
					
						
							|  |  |  | do | 
					
						
							|  |  |  | 	if [ ! -x "$ii" ] | 
					
						
							|  |  |  | 	then | 
					
						
							|  |  |  | 		echo "Error: $ii is not executable." | 
					
						
							|  |  |  | 		RC=2 | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ "$RC" -ne 0 ] | 
					
						
							|  |  |  | then | 
					
						
							|  |  |  | 	exit "$RC" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | . /usr/share/initramfs-tools/hook-functions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mkdir -p "$DESTDIR/etc/" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # ZDB uses pthreads for some functions, but the library dependency is not | 
					
						
							|  |  |  | # automatically detected. The `find` utility and extended `cp` options are | 
					
						
							|  |  |  | # used here because libgcc_s.so could be in a subdirectory of /lib for | 
					
						
							|  |  |  | # multi-arch installations. | 
					
						
							| 
									
										
										
										
											2017-02-27 23:03:23 +03:00
										 |  |  | cp --target-directory="$DESTDIR" --parents $(find /lib/ -type f -name libgcc_s.so.1) | 
					
						
							| 
									
										
											  
											
												Initramfs scripts for ZoL.
* Supports booting of a ZFS snapshot.
  Do this by cloning the snapshot into a dataset. If this, the resulting
  dataset, already exists, destroy it. Then mount it on root.
  * If snapshot does not exist, use base dataset (the part before '@')
    as boot filesystem instead.
  * If no snapshot is specified on the 'root=' kernel command line, but there
    is an '@', then get a list of snapshots below that filesystem and ask the
    user which to use.
  * Clone with 'mountpoint=none' and 'canmount=noauto' - we mount manually
    and explicitly.
    * For sub-filesystems, that doesn't have a mountpoint property set, we use
      the 'org.zol:mountpoint' to keep track of it's mountpoint.
  * Allow rollback of snapshots instead of clone it and boot from the clone.
* Allow mounting a root- and subfs with mountpoint=legacy set
* Allow mounting a filesystem which is using nativ encryption.
* Support all currently used kernel command line arguments
  All the different distributions have their own standard on what to specify
  on the kernel command line to boot of a ZFS filesystem.
  * Extra options:
    * zfsdebug=(on,yes,1)	Show extra debugging information
    * zfsforce=(on,yes,1)	Force import the pool
    * rollback=(on,yes,1)	Rollback (instead of clone) the snapshot
* Only try to import pool if it haven't already been imported
  * This will negate the need to force import a pool that have not been exported cleanly.
  * Support exclusion of pools to import by setting ZFS_POOL_EXCEPTIONS in /etc/default/zfs.
* Support additional configuration variable ZFS_INITRD_ADDITIONAL_DATASETS
  to mount additional filesystems not located under your root dataset.
* Include /etc/modprobe.d/{zfs,spl}.conf in the initrd if it/they exist.
* Include the udev rule to use by-vdev for pool imports.
* Include the /etc/default/zfs file to the initrd.
* Only try /dev/disk/by-* in the initrd if USE_DISK_BY_ID is set.
  * Use /dev/disk/by-vdev before anything.
  * Add /dev as a last ditch attempt.
  * Fallback to using the cache file if that exist if nothing else worked.
* Use /sbin/modprobe instead of built-in (BusyBox) modprobe.
  This gets rid of the message "modprobe: can't load module zcommon".
  Thanx to pcoultha for finding this.
Signed-off-by: Turbo Fredriksson <turbo@bayour.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2116
Closes #2114
											
										 
											2014-01-30 20:26:48 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | for ii in $COPY_EXEC_LIST | 
					
						
							|  |  |  | do | 
					
						
							|  |  |  | 	copy_exec "$ii" | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for ii in $COPY_FILE_LIST | 
					
						
							|  |  |  | do | 
					
						
							|  |  |  | 	dir=$(dirname "$ii") | 
					
						
							| 
									
										
										
										
											2015-07-24 15:49:03 +03:00
										 |  |  | 	[ -d "$dir" ] && mkdir -p "$DESTDIR/$dir" | 
					
						
							| 
									
										
											  
											
												Initramfs scripts for ZoL.
* Supports booting of a ZFS snapshot.
  Do this by cloning the snapshot into a dataset. If this, the resulting
  dataset, already exists, destroy it. Then mount it on root.
  * If snapshot does not exist, use base dataset (the part before '@')
    as boot filesystem instead.
  * If no snapshot is specified on the 'root=' kernel command line, but there
    is an '@', then get a list of snapshots below that filesystem and ask the
    user which to use.
  * Clone with 'mountpoint=none' and 'canmount=noauto' - we mount manually
    and explicitly.
    * For sub-filesystems, that doesn't have a mountpoint property set, we use
      the 'org.zol:mountpoint' to keep track of it's mountpoint.
  * Allow rollback of snapshots instead of clone it and boot from the clone.
* Allow mounting a root- and subfs with mountpoint=legacy set
* Allow mounting a filesystem which is using nativ encryption.
* Support all currently used kernel command line arguments
  All the different distributions have their own standard on what to specify
  on the kernel command line to boot of a ZFS filesystem.
  * Extra options:
    * zfsdebug=(on,yes,1)	Show extra debugging information
    * zfsforce=(on,yes,1)	Force import the pool
    * rollback=(on,yes,1)	Rollback (instead of clone) the snapshot
* Only try to import pool if it haven't already been imported
  * This will negate the need to force import a pool that have not been exported cleanly.
  * Support exclusion of pools to import by setting ZFS_POOL_EXCEPTIONS in /etc/default/zfs.
* Support additional configuration variable ZFS_INITRD_ADDITIONAL_DATASETS
  to mount additional filesystems not located under your root dataset.
* Include /etc/modprobe.d/{zfs,spl}.conf in the initrd if it/they exist.
* Include the udev rule to use by-vdev for pool imports.
* Include the /etc/default/zfs file to the initrd.
* Only try /dev/disk/by-* in the initrd if USE_DISK_BY_ID is set.
  * Use /dev/disk/by-vdev before anything.
  * Add /dev as a last ditch attempt.
  * Fallback to using the cache file if that exist if nothing else worked.
* Use /sbin/modprobe instead of built-in (BusyBox) modprobe.
  This gets rid of the message "modprobe: can't load module zcommon".
  Thanx to pcoultha for finding this.
Signed-off-by: Turbo Fredriksson <turbo@bayour.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2116
Closes #2114
											
										 
											2014-01-30 20:26:48 +04:00
										 |  |  | 	[ -f "$ii" ] && cp -p "$ii" "$DESTDIR/$ii" | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for ii in $MANUAL_ADD_MODULES_LIST | 
					
						
							|  |  |  | do | 
					
						
							|  |  |  | 	manual_add_modules "$ii" | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ -f "/etc/hostname" ] | 
					
						
							|  |  |  | then | 
					
						
							|  |  |  | 	cp -p "/etc/hostname" "$DESTDIR/etc/" | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | 	hostname >"$DESTDIR/etc/hostname" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for ii in zfs zfs.conf spl spl.conf | 
					
						
							|  |  |  | do   | 
					
						
							|  |  |  | 	if [ -f "/etc/modprobe.d/$ii" ]; then | 
					
						
							|  |  |  | 		if [ ! -d "$DESTDIR/etc/modprobe.d" ]; then | 
					
						
							|  |  |  | 			mkdir -p $DESTDIR/etc/modprobe.d | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		cp -p "/etc/modprobe.d/$ii" $DESTDIR/etc/modprobe.d/ | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # With pull request #1476 (not yet merged) comes a verbose warning | 
					
						
							|  |  |  | # if /usr/bin/net doesn't exist or isn't executable. Just create | 
					
						
							|  |  |  | # a dummy... | 
					
						
							|  |  |  | [ ! -d "$DESTDIR/usr/bin" ] && mkdir -p "$DESTDIR/usr/bin" | 
					
						
							|  |  |  | if [ ! -x "$DESTDIR/usr/bin/net" ]; then | 
					
						
							|  |  |  |     touch "$DESTDIR/usr/bin/net" | 
					
						
							|  |  |  |     chmod +x "$DESTDIR/usr/bin/net" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exit 0 |