summaryrefslogtreecommitdiff
path: root/sys-fs/cryptsetup
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-02-02 01:39:05 +0000
committerV3n3RiX <venerix@koprulu.sector>2022-02-02 01:39:05 +0000
commitfcc5224904648a8e6eb528d7603154160a20022f (patch)
tree3bfce096b38a9cea8eed13fc70c1526c456e9abd /sys-fs/cryptsetup
parent2fd57282f0262ca084e05b0f2c63fbada395d02b (diff)
gentoo resync : 02.02.2022
Diffstat (limited to 'sys-fs/cryptsetup')
-rw-r--r--sys-fs/cryptsetup/Manifest5
-rw-r--r--sys-fs/cryptsetup/cryptsetup-2.4.3-r1.ebuild136
-rw-r--r--sys-fs/cryptsetup/cryptsetup-2.4.3.ebuild2
-rw-r--r--sys-fs/cryptsetup/files/2.4.3-dmcrypt.confd120
-rw-r--r--sys-fs/cryptsetup/files/2.4.3-dmcrypt.rc367
5 files changed, 628 insertions, 2 deletions
diff --git a/sys-fs/cryptsetup/Manifest b/sys-fs/cryptsetup/Manifest
index e5984aabdb33..faefe191be0e 100644
--- a/sys-fs/cryptsetup/Manifest
+++ b/sys-fs/cryptsetup/Manifest
@@ -2,6 +2,8 @@ AUX 1.6.7-dmcrypt.confd 3919 BLAKE2B 99e81cfe932dda45062966ada065da418500e58499a
AUX 1.6.7-dmcrypt.rc 8815 BLAKE2B 9e88475af36f7ab3c7b48672ecf64e885e7be4b1af27c2f41f74fe8640163ac272d44bfbbfeb0befb1af337f88d2711f27003575758d16c5f8104db0fabc2cb9 SHA512 fdbf44f7508ca10ab89e858c206fd9dc397a11d8a553045584ab95046c309a84dd6c7ab0c0ea63c66f7d52b31ed3a1ce46d5ce2ce2588f0d6593a1c4cc1c4194
AUX 2.4.0-dmcrypt.confd 4009 BLAKE2B efaf826fc78b60068aeddb6d5fbd9665bcf85e66c5f0b48fa74316d8ad98fb5400ed89f674b6a93e30d76fa1adc3391a209a95936156fcd472b779cf5dbdd8b4 SHA512 131cee054019eed3f1939615386ba849bad2b02e31042075d5839e9a5943c8716431aae01aece25b2193645bcd706e14e6c947ee59f1fab4c2d7e0afc80228be
AUX 2.4.0-dmcrypt.rc 9059 BLAKE2B 622320bd69a9e2d2779bd0eb97034635335125d2def73f66ba4be5df1a0d29da7c1dadd0e2379a5f4ef35a9b17d4cb11fe2419cce6cad2df63546370b6a1975b SHA512 7f32bd09e22405deb4a7cd8233da0262764233562421a8fb49bd625be591f1dc27154c2204462df480668ab2f1a81aab5a992f426603a8a4fd86cd15a27a6a97
+AUX 2.4.3-dmcrypt.confd 4306 BLAKE2B 107697c85548a8c5f1f4ffc1ae6ec785bcb9c63a55e52a97fd24c1a3c5e7867d031f494030a27be1efb8eab448a94e466c186c964b2638fd4d95250005fbf31d SHA512 d80701d1507c682d619e2ec433bebab2d64cc3e27c5ddc2e7c8408e07dcd353b4d66e9b8505719fa88fa734d7a7930fc90f5b8279e185580c3c038ac7ef7a02a
+AUX 2.4.3-dmcrypt.rc 9693 BLAKE2B a426ad90c9e4540a82873cd3a1594def778063c97278b2f82cfefd79cedecda97f1b6038775ce34433ba25519e3fb565bc0b79eedb39b46080a2fec68d564a99 SHA512 9f2ff42e0ef1ab3046b545c550153e13ae7d2446560b4154c23e32ca2dd8c2871e68b07bf8cc273c18730ad6e13b50b07aadb91ae7f43077ab08bdce01db5323
AUX cryptsetup-2.0.4-fix-static-pwquality-build.patch 427 BLAKE2B dfdc56c6627084732973254cd52c48f0869aa7b4c58e466840a87f77c1d4fb09ae37295fb54e980abccfdfe51dc63161e188a0be9bb4bf3c69d7731120f84bac SHA512 23b5f9b21ec86c92787bfc8744682ce0777dfa87e1de97afbb8db33c4587f1e2c8e5f8c9d0fa56ca801d7795739f9a66f14633d8a3904ea68ddd58ddc3863adf
AUX cryptsetup-2.4.1-external-tokens.patch 1015 BLAKE2B ca7b5940caf000cc97742dfcbf8ee38e9fec049a4a3788737b283851dc3fd340664d332aff507f8d9d5962bca66b56a232419902114ac08ace5df76825cccd1a SHA512 23dff40a535ac1d4ccae41cc7a24e0ca53b412e0f6c0fc3e4a8ef7b7255ed28d8010a5684aa5029ec1d5d534196c4fbb83bc2a1ab5794cc6197b19f1a0696bab
AUX cryptsetup-2.4.1-fix-static-pwquality-build.patch 5226 BLAKE2B 1dfd8b001e8284d5efd5afe0d67a401d334e9588baf6d0f18f533694dd4a22a782066ee43f22fe5bfaea51fc09beac127e91c77b07fc9a63778b55b25e0d2ebf SHA512 71a3f63b86de72ccfa49c9294db433da7f1fd6366e328f7311051edfd980f630ca3435ef8c5e92c55083eb3b25a3b2bbafa75282de1bf65be6820655b7556f2f
@@ -14,5 +16,6 @@ EBUILD cryptsetup-2.3.6-r2.ebuild 3908 BLAKE2B f2b709398da106f2d2b89365d67eee729
EBUILD cryptsetup-2.3.7.ebuild 3916 BLAKE2B 388637eba177bef5223c9177d9eb9b94d7f761a0a1bf36ce0a8e6ae93f13d772b28b0ac1c69a26ce47abece968a2c05c9ba514aba9c631053f9d4334b2c49690 SHA512 e5192bc51873547e8dae79f035b61c624ba3da3e64936ccae39359717f1e5a9ac5c3d5a7bacd38b994f556c81d15a0dc8bdc9aa1d99b66f976706da9095f8161
EBUILD cryptsetup-2.4.1-r1.ebuild 4283 BLAKE2B 599590bf68883aad5e64b6a5affc0a464df4339abd11fe9088ea980fc400ba5bc6e7a5fbbd4792a73f735351ea348d1ade9ed42fb9480c991be5e48753799f3c SHA512 bf6ed2dd41144874931c56c4fb697ae4c3df696fefa11373352921729e9e4b9db4f8cd0f4094ba170ebe7a5e8a61c76673b0bc554857090b61f9e0b6ad61f51e
EBUILD cryptsetup-2.4.2-r1.ebuild 4067 BLAKE2B 47d2c7ceb821587d2b5d3940504021a3310838c4fe5233f19c12def4e9a0799f6cb284539f665fc8f2c98457ffa9f72ea8ef4317cd4453d409ce68d208d5e412 SHA512 327ba8aac24198eaf4bbe7a4e8575132679d71f0809c1ede7156f2b89409a1901ce7057dbb9b61cd6237df153ba186c09bf6d98fd559a9f02bdd03fb633c3a31
-EBUILD cryptsetup-2.4.3.ebuild 4166 BLAKE2B a9c6f6624d992b4ce553c8e403ce9b96f0de95d7c4aedb9bfe305155c06dd58ec1196e9143ee265474bb9fbfb455c64aced077561c0f01f2ad596f7a27c860b7 SHA512 3ed1c66542af358f6aef0175e6a854dd3ac013e7c4083afc9a01ba1e7d1abf97f5f88d8a42b83478d6a85e8e8685d54880d689a497f597adf1c3e956a6c4a08f
+EBUILD cryptsetup-2.4.3-r1.ebuild 4166 BLAKE2B 2948d53179b21118c836517a331c3953ec841280184f45785007628279b1867690e2fc6f0a27b8a7b04bfe3bba9cbf6caf0f4c7f85a767ecee81bfbe409f4477 SHA512 154551b6479d77b92516f65fe2cec57e912763b4d12e658080f0284d59e935a2e6ae5580e3ce7ae9898e278c6089bcf3535692d8b7a195dc4d57e717e0adc30b
+EBUILD cryptsetup-2.4.3.ebuild 4158 BLAKE2B 5741edc9c554116fa4e8b97f0b32092d62a7c3b7eca8b80e41c536f804b0def495ff990bb47b6dc5ae12080b8d42bb0d8a900bf5a07a495a290a57a5de7bcecb SHA512 80e6086898dd01acb12070e4d116863c286298db125ae03a222591ae8bba854fae03d1da1746e8f55ec242e992a9cf6d0f56ab5a64348f9e680675d0d4bdfa5c
MISC metadata.xml 1076 BLAKE2B 132b07201bfa3a7d8889d0b2558c15f35829bfa021b31cd5a9cf2cb21de822ceb89fae177b014590f46411cd609b4e44b20165b07c7676483a547987fffcbb9d SHA512 b06b884e0e369022cea4b3634d9df3c7d62d854754969d0c7848a3baf3a3ea69cce2131527539600424c72c539e502378b0627ba7c4fdcbc74e6f7a58b5800a8
diff --git a/sys-fs/cryptsetup/cryptsetup-2.4.3-r1.ebuild b/sys-fs/cryptsetup/cryptsetup-2.4.3-r1.ebuild
new file mode 100644
index 000000000000..3337dfaa89a0
--- /dev/null
+++ b/sys-fs/cryptsetup/cryptsetup-2.4.3-r1.ebuild
@@ -0,0 +1,136 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit linux-info tmpfiles
+
+DESCRIPTION="Tool to setup encrypted devices with dm-crypt"
+HOMEPAGE="https://gitlab.com/cryptsetup/cryptsetup/blob/master/README.md"
+SRC_URI="https://www.kernel.org/pub/linux/utils/${PN}/v$(ver_cut 1-2)/${P/_/-}.tar.xz"
+
+LICENSE="GPL-2+"
+SLOT="0/12" # libcryptsetup.so version
+[[ ${PV} != *_rc* ]] && \
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+CRYPTO_BACKENDS="gcrypt kernel nettle +openssl"
+# we don't support nss since it doesn't allow cryptsetup to be built statically
+# and it's missing ripemd160 support so it can't provide full backward compatibility
+IUSE="${CRYPTO_BACKENDS} +argon2 nls pwquality reencrypt ssh static static-libs test +udev urandom"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="^^ ( ${CRYPTO_BACKENDS//+/} )
+ static? ( !gcrypt !udev )" #496612
+
+LIB_DEPEND="
+ dev-libs/json-c:=[static-libs(+)]
+ dev-libs/popt[static-libs(+)]
+ >=sys-apps/util-linux-2.31-r1[static-libs(+)]
+ argon2? ( app-crypt/argon2:=[static-libs(+)] )
+ gcrypt? (
+ dev-libs/libgcrypt:0=[static-libs(+)]
+ dev-libs/libgpg-error[static-libs(+)]
+ )
+ nettle? ( >=dev-libs/nettle-2.4[static-libs(+)] )
+ openssl? ( dev-libs/openssl:0=[static-libs(+)] )
+ pwquality? ( dev-libs/libpwquality[static-libs(+)] )
+ ssh? ( net-libs/libssh[static-libs(+)] )
+ sys-fs/lvm2[static-libs(+)]"
+# We have to always depend on ${LIB_DEPEND} rather than put behind
+# !static? () because we provide a shared library which links against
+# these other packages. #414665
+RDEPEND="static-libs? ( ${LIB_DEPEND} )
+ ${LIB_DEPEND//\[static-libs\([+-]\)\]}
+ udev? ( virtual/libudev:= )"
+# vim-core needed for xxd in tests
+DEPEND="${RDEPEND}
+ static? ( ${LIB_DEPEND} )
+ test? ( app-editors/vim-core )"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+S="${WORKDIR}/${P/_/-}"
+
+pkg_setup() {
+ local CONFIG_CHECK="~DM_CRYPT ~CRYPTO ~CRYPTO_CBC ~CRYPTO_SHA256"
+ local WARNING_DM_CRYPT="CONFIG_DM_CRYPT:\tis not set (required for cryptsetup)\n"
+ local WARNING_CRYPTO_SHA256="CONFIG_CRYPTO_SHA256:\tis not set (required for cryptsetup)\n"
+ local WARNING_CRYPTO_CBC="CONFIG_CRYPTO_CBC:\tis not set (required for kernel 2.6.19)\n"
+ local WARNING_CRYPTO="CONFIG_CRYPTO:\tis not set (required for cryptsetup)\n"
+ check_extra_config
+}
+
+src_prepare() {
+ sed -i '/^LOOPDEV=/s:$: || exit 0:' tests/{compat,mode}-test || die
+ default
+}
+
+src_configure() {
+ if use kernel ; then
+ ewarn "Note that kernel backend is very slow for this type of operation"
+ ewarn "and is provided mainly for embedded systems wanting to avoid"
+ ewarn "userspace crypto libraries."
+ fi
+
+ local myeconfargs=(
+ --disable-internal-argon2
+ --enable-shared
+ --sbindir=/sbin
+ # for later use
+ --with-default-luks-format=LUKS2
+ --with-tmpfilesdir="${EPREFIX}/usr/lib/tmpfiles.d"
+ --with-crypto_backend=$(for x in ${CRYPTO_BACKENDS//+/} ; do usev ${x} ; done)
+ $(use_enable argon2 libargon2)
+ $(use_enable nls)
+ $(use_enable pwquality)
+ $(use_enable reencrypt cryptsetup-reencrypt)
+ $(use_enable !static external-tokens)
+ $(use_enable static static-cryptsetup)
+ $(use_enable static-libs static)
+ $(use_enable udev)
+ $(use_enable !urandom dev-random)
+ $(use_enable ssh ssh-token)
+ $(usex argon2 '' '--with-luks2-pbkdf=pbkdf2')
+ )
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ if [[ ! -e /dev/mapper/control ]] ; then
+ ewarn "No /dev/mapper/control found -- skipping tests"
+ return 0
+ fi
+
+ local p
+ for p in /dev/mapper /dev/loop* ; do
+ addwrite ${p}
+ done
+
+ default
+}
+
+src_install() {
+ default
+
+ if use static ; then
+ mv "${ED}"/sbin/cryptsetup{.static,} || die
+ mv "${ED}"/sbin/veritysetup{.static,} || die
+ mv "${ED}"/sbin/integritysetup{.static,} || die
+ if use ssh ; then
+ mv "${ED}"/sbin/cryptsetup-ssh{.static,} || die
+ fi
+ if use reencrypt ; then
+ mv "${ED}"/sbin/cryptsetup-reencrypt{.static,} || die
+ fi
+ fi
+ find "${ED}" -type f -name "*.la" -delete || die
+
+ dodoc docs/v*ReleaseNotes
+
+ newconfd "${FILESDIR}"/2.4.3-dmcrypt.confd dmcrypt
+ newinitd "${FILESDIR}"/2.4.3-dmcrypt.rc dmcrypt
+}
+
+pkg_postinst() {
+ tmpfiles_process cryptsetup.conf
+}
diff --git a/sys-fs/cryptsetup/cryptsetup-2.4.3.ebuild b/sys-fs/cryptsetup/cryptsetup-2.4.3.ebuild
index bcaafc0292c5..f1679bbf84ec 100644
--- a/sys-fs/cryptsetup/cryptsetup-2.4.3.ebuild
+++ b/sys-fs/cryptsetup/cryptsetup-2.4.3.ebuild
@@ -12,7 +12,7 @@ SRC_URI="https://www.kernel.org/pub/linux/utils/${PN}/v$(ver_cut 1-2)/${P/_/-}.t
LICENSE="GPL-2+"
SLOT="0/12" # libcryptsetup.so version
[[ ${PV} != *_rc* ]] && \
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~mips ppc ppc64 ~riscv ~s390 sparc x86"
CRYPTO_BACKENDS="gcrypt kernel nettle +openssl"
# we don't support nss since it doesn't allow cryptsetup to be built statically
# and it's missing ripemd160 support so it can't provide full backward compatibility
diff --git a/sys-fs/cryptsetup/files/2.4.3-dmcrypt.confd b/sys-fs/cryptsetup/files/2.4.3-dmcrypt.confd
new file mode 100644
index 000000000000..8250e8268ac9
--- /dev/null
+++ b/sys-fs/cryptsetup/files/2.4.3-dmcrypt.confd
@@ -0,0 +1,120 @@
+# /etc/conf.d/dmcrypt
+
+# For people who run dmcrypt on top of some other layer (like raid),
+# use rc_need to specify that requirement. See the runscript(8) man
+# page for more information.
+
+#--------------------
+# Instructions
+#--------------------
+
+# Note regarding the syntax of this file. This file is *almost* bash,
+# but each line is evaluated separately. Separate swaps/targets can be
+# specified. The init-script which reads this file assumes that a
+# swap= or target= line starts a new section, similar to lilo or grub
+# configuration.
+
+# Note when using gpg keys and /usr on a separate partition, you will
+# have to copy /usr/bin/gpg to /bin/gpg so that it will work properly
+# and ensure that gpg has been compiled statically.
+# See http://bugs.gentoo.org/90482 for more information.
+
+# Note that the init-script which reads this file detects whether your
+# partition is LUKS or not. No mkfs is run unless you specify a makefs
+# option.
+
+# Global options:
+#----------------
+
+# How long to wait for each timeout (in seconds).
+dmcrypt_key_timeout=1
+
+# Max number of checks to perform (see dmcrypt_key_timeout).
+#dmcrypt_max_timeout=300
+
+# Number of password retries.
+dmcrypt_retries=5
+
+# Arguments:
+#-----------
+# target=<name> == Mapping name for partition.
+# swap=<name> == Mapping name for swap partition.
+# source='<dev>' == Real device for partition.
+# Note: You can (and should) specify a tag like UUID
+# for blkid (see -t option). This is safer than using
+# the full path to the device.
+# key='</path/to/keyfile>[:<mode>]' == Fullpath from / or from inside removable media.
+# header='</path/to/header>' == Full path to detached LUKS header file.
+# remdev='<dev>' == Device that will be assigned to removable media.
+# gpg_options='<opts>' == Default are --quiet --decrypt
+# options='<opts>' == cryptsetup, for LUKS you can only use --readonly
+# loop_file='<file>' == Loopback file.
+# Note: If you omit $source, then a free loopback will
+# be looked up automatically.
+# pre_mount='cmds' == commands to execute before mounting partition.
+# post_mount='cmds' == commands to execute after mounting partition.
+# wait=5 == wait given amount of seconds for source or
+# detached header file appear.
+#-----------
+# Supported Modes
+# gpg == decrypt and pipe key into cryptsetup.
+# Note: new-line character must not be part of key.
+# Command to erase \n char: 'cat key | tr -d '\n' > cleanKey'
+
+#--------------------
+# dm-crypt examples
+#--------------------
+
+## swap
+# Swap partitions. These should come first so that no keys make their
+# way into unencrypted swap.
+# If no options are given, they will default to: -c aes -h sha1 -d /dev/urandom
+# If no makefs is given then mkswap will be assumed
+#swap=crypt-swap
+#source='/dev/hda2'
+
+## /home with passphrase
+#target=crypt-home
+#source='/dev/hda5'
+
+## /home with regular keyfile
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey'
+
+## /home with regular keyfile and detached header
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey'
+#header='/full/path/to/header/file'
+
+## /home with gpg protected key
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey:gpg'
+
+## /home with regular keyfile on removable media(such as usb-stick)
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey'
+#remdev='/dev/sda1'
+
+## /home with gpg protected key on removable media(such as usb-stick)
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey:gpg'
+#remdev='/dev/sda1'
+
+## /tmp with regular keyfile
+#target=crypt-tmp
+#source='/dev/hda6'
+#key='/full/path/to/tmpkey'
+#pre_mount='/sbin/mkreiserfs -f -f ${dev}'
+#post_mount='chown root:root ${mount_point}; chmod 1777 ${mount_point}'
+
+## Loopback file example
+#target='crypt-loop-home'
+#source='/dev/loop0'
+#loop_file='/mnt/crypt/home'
+
+# The file must be terminated by a newline. Or leave this comment last.
diff --git a/sys-fs/cryptsetup/files/2.4.3-dmcrypt.rc b/sys-fs/cryptsetup/files/2.4.3-dmcrypt.rc
new file mode 100644
index 000000000000..0903ac5eabd0
--- /dev/null
+++ b/sys-fs/cryptsetup/files/2.4.3-dmcrypt.rc
@@ -0,0 +1,367 @@
+#!/sbin/openrc-run
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ use modules
+ before checkfs fsck
+
+ if grep -qs ^swap= "${conf_file}" ; then
+ before swap
+ fi
+}
+
+# We support multiple dmcrypt instances based on $SVCNAME
+conf_file="/etc/conf.d/${SVCNAME}"
+
+# Get splash helpers if available.
+if [ -e /sbin/splash-functions.sh ] ; then
+ . /sbin/splash-functions.sh
+fi
+
+# Setup mappings for an individual target/swap
+# Note: This relies on variables localized in the main body below.
+dm_crypt_execute() {
+ local dev ret mode foo source_dev
+
+ if [ -z "${target}" -a -z "${swap}" ] ; then
+ return
+ fi
+
+ # Set up default values.
+ : ${dmcrypt_key_timeout:=1}
+ : ${dmcrypt_max_timeout:=300}
+ : ${dmcrypt_retries:=5}
+ : ${wait:=5}
+
+ # Handle automatic look up of the source path.
+ if [ -z "${source}" -a -n "${loop_file}" ] ; then
+ source=$(losetup --show -f "${loop_file}")
+ fi
+ case ${source} in
+ *=*)
+ i=0
+ while [ ${i} -lt ${wait} ]; do
+ if source_dev="$(blkid -l -t "${source}" -o device)"; then
+ source="${source_dev}"
+ break
+ fi
+ : $((i += 1))
+ einfo "waiting for source \"${source}\" for ${target}..."
+ sleep 1
+ done
+ ;;
+ esac
+ if [ -z "${source}" ] || [ ! -e "${source}" ] ; then
+ ewarn "source \"${source}\" for ${target} missing, skipping..."
+ return
+ fi
+
+ if [ -n "${header}" ] ; then
+ header_opt="--header=${header}"
+
+ i=0
+ while [ ! -e "${header}" ] && [ ${i} -lt ${wait} ] ; do
+ : $((i += 1))
+ einfo "Waiting for header ${header} to appear for ${target} ${i}/${dmcrypt_max_timeout} ..."
+ sleep 1
+ done
+ if [ ${i} -gt ${wait} ] || [ ${i} -eq ${wait} ] ; then
+ ewarn "Waited ${i} times for header file ${header}. Aborting ${target}."
+ return
+ fi
+ else
+ header_opt=""
+ fi
+
+ if [ -n "${target}" ] ; then
+ # let user set options, otherwise leave empty
+ : ${options:=' '}
+ elif [ -n "${swap}" ] ; then
+ if cryptsetup ${header_opt} isLuks ${source} 2>/dev/null ; then
+ ewarn "The swap you have defined is a LUKS partition. Aborting crypt-swap setup."
+ return
+ fi
+ target=${swap}
+ # swap contents do not need to be preserved between boots, luks not required.
+ # suspend2 users should have initramfs's init handling their swap partition either way.
+ : ${options:='-c aes -h sha1 -d /dev/urandom'}
+ : ${pre_mount:='mkswap ${dev}'}
+ fi
+
+ if [ -n "${loop_file}" ] ; then
+ dev="/dev/mapper/${target}"
+ ebegin " Setting up loop device ${source}"
+ losetup ${source} ${loop_file}
+ fi
+
+ # cryptsetup:
+ # open <device> <name> # <device> is $source
+ # create <name> <device> # <name> is $target
+ local arg1="create" arg2="${target}" arg3="${source}"
+ if cryptsetup ${header_opt} isLuks ${source} 2>/dev/null ; then
+ arg1="open"
+ arg2="${source}"
+ arg3="${target}"
+ fi
+
+ # Older versions reported:
+ # ${target} is active:
+ # Newer versions report:
+ # ${target} is active[ and is in use.]
+ if cryptsetup ${header_opt} status ${target} | egrep -q ' is active' ; then
+ einfo "dm-crypt mapping ${target} is already configured"
+ return
+ fi
+ splash svc_input_begin ${SVCNAME} >/dev/null 2>&1
+
+ # Handle keys
+ if [ -n "${key}" ] ; then
+ read_abort() {
+ # some colors
+ local ans savetty resettty
+ [ -z "${NORMAL}" ] && eval $(eval_ecolors)
+ einfon " $1? (${WARN}yes${NORMAL}/${GOOD}No${NORMAL}) "
+ shift
+ # This is ugly as s**t. But POSIX doesn't provide `read -t`, so
+ # we end up having to implement our own crap with stty/etc...
+ savetty=$(stty -g)
+ resettty='stty ${savetty}; trap - EXIT HUP INT TERM'
+ trap 'eval "${resettty}"' EXIT HUP INT TERM
+ stty -icanon
+ stty min 0 time "$(( $2 * 10 ))"
+ ans=$(dd count=1 bs=1 2>/dev/null) || ans=''
+ eval "${resettty}"
+ if [ -z "${ans}" ] ; then
+ printf '\r'
+ else
+ echo
+ fi
+ case ${ans} in
+ [yY]) return 0;;
+ *) return 1;;
+ esac
+ }
+
+ # Notes: sed not used to avoid case where /usr partition is encrypted.
+ mode=${key##*:} && ( [ "${mode}" = "${key}" ] || [ -z "${mode}" ] ) && mode=reg
+ key=${key%:*}
+ case "${mode}" in
+ gpg|reg)
+ # handle key on removable device
+ if [ -n "${remdev}" ] ; then
+ # temp directory to mount removable device
+ local mntrem="${RC_SVCDIR}/dm-crypt-remdev.$$"
+ if [ ! -d "${mntrem}" ] ; then
+ if ! mkdir -p "${mntrem}" ; then
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: Unable to create temporary mount point '${mntrem}'"
+ return
+ fi
+ fi
+ i=0
+ einfo "Please insert removable device for ${target}"
+ while [ ${i} -lt ${dmcrypt_max_timeout} ] ; do
+ foo=""
+ if mount -n -o ro "${remdev}" "${mntrem}" 2>/dev/null >/dev/null ; then
+ # keyfile exists?
+ if [ ! -e "${mntrem}${key}" ] ; then
+ umount -n "${mntrem}"
+ rmdir "${mntrem}"
+ einfo "Cannot find ${key} on removable media."
+ read_abort "Abort" ${dmcrypt_key_timeout} && return
+ else
+ key="${mntrem}${key}"
+ break
+ fi
+ else
+ [ -e "${remdev}" ] \
+ && foo="mount failed" \
+ || foo="mount source not found"
+ fi
+ : $((i += 1))
+ read_abort "Stop waiting after $i attempts (${foo})" -t 1 && return
+ done
+ else # keyfile ! on removable device
+ if [ ! -e "${key}" ] ; then
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: keyfile ${key} does not exist."
+ return
+ fi
+ fi
+ ;;
+ *)
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: mode ${mode} is invalid."
+ return
+ ;;
+ esac
+ else
+ mode=none
+ fi
+ ebegin " ${target} using: ${header_opt} ${options} ${arg1} ${arg2} ${arg3}"
+ if [ "${mode}" = "gpg" ] ; then
+ : ${gpg_options:='-q -d'}
+ # gpg available ?
+ if command -v gpg >/dev/null ; then
+ i=0
+ while [ ${i} -lt ${dmcrypt_retries} ] ; do
+ # paranoid, don't store key in a variable, pipe it so it stays very little in ram unprotected.
+ # save stdin stdout stderr "values"
+ timeout ${dmcrypt_max_timeout} gpg ${gpg_options} ${key} 2>/dev/null | \
+ cryptsetup ${header_opt} --key-file - ${options} ${arg1} ${arg2} ${arg3}
+ ret=$?
+ # The timeout command exits 124 when it times out.
+ [ ${ret} -eq 0 -o ${ret} -eq 124 ] && break
+ : $(( i += 1 ))
+ done
+ eend ${ret} "failure running cryptsetup"
+ else
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: cannot find gpg application."
+ einfo "You have to install app-crypt/gnupg first."
+ einfo "If you have /usr on its own partition, try copying gpg to /bin ."
+ fi
+ else
+ if [ "${mode}" = "reg" ] ; then
+ cryptsetup ${header_opt} ${options} -d ${key} ${arg1} ${arg2} ${arg3}
+ ret=$?
+ eend ${ret} "failure running cryptsetup"
+ else
+ cryptsetup ${header_opt} ${options} ${arg1} ${arg2} ${arg3}
+ ret=$?
+ eend ${ret} "failure running cryptsetup"
+ fi
+ fi
+ if [ -d "${mntrem}" ] ; then
+ umount -n ${mntrem} 2>/dev/null >/dev/null
+ rmdir ${mntrem} 2>/dev/null >/dev/null
+ fi
+ splash svc_input_end ${SVCNAME} >/dev/null 2>&1
+
+ if [ ${ret} -ne 0 ] ; then
+ cryptfs_status=1
+ else
+ if [ -n "${pre_mount}" ] ; then
+ dev="/dev/mapper/${target}"
+ eval ebegin \"" pre_mount: ${pre_mount}"\"
+ eval "${pre_mount}" > /dev/null
+ ewend $? || cryptfs_status=1
+ fi
+ fi
+}
+
+# Lookup optional bootparams
+get_bootparam_val() {
+ # We're given something like:
+ # foo=bar=cow
+ # Return the "bar=cow" part.
+ case $1 in
+ *=*)
+ echo "${1#*=}"
+ ;;
+ esac
+}
+
+start() {
+ local print_header=true cryptfs_status=0
+ local gpg_options key loop_file target targetline options pre_mount post_mount source swap remdev
+
+ local x
+ for x in $(cat /proc/cmdline) ; do
+ case "${x}" in
+ key_timeout=*)
+ dmcrypt_key_timeout=$(get_bootparam_val "${x}")
+ ;;
+ esac
+ done
+
+ while read targetline <&3 ; do
+ case ${targetline} in
+ # skip comments and blank lines
+ ""|"#"*) continue ;;
+ # skip service-specific openrc configs #377927
+ rc_*) continue ;;
+ esac
+
+ ${print_header} && ebegin "Setting up dm-crypt mappings"
+ print_header=false
+
+ # check for the start of a new target/swap
+ case ${targetline} in
+ target=*|swap=*)
+ # If we have a target queued up, then execute it
+ dm_crypt_execute
+
+ # Prepare for the next target/swap by resetting variables
+ unset gpg_options key loop_file target options pre_mount post_mount source swap remdev wait header header_opt
+ ;;
+
+ gpg_options=*|remdev=*|key=*|loop_file=*|options=*|pre_mount=*|post_mount=*|wait=*|source=*|header=*)
+ if [ -z "${target}${swap}" ] ; then
+ ewarn "Ignoring setting outside target/swap section: ${targetline}"
+ continue
+ fi
+ ;;
+
+ dmcrypt_*=*)
+ # ignore global options
+ continue
+ ;;
+
+ *)
+ ewarn "Skipping invalid line in ${conf_file}: ${targetline}"
+ ;;
+ esac
+
+ # Queue this setting for the next call to dm_crypt_execute
+ eval "${targetline}"
+ done 3< ${conf_file}
+
+ # If we have a target queued up, then execute it
+ dm_crypt_execute
+
+ ewend ${cryptfs_status} "Failed to setup dm-crypt devices"
+}
+
+stop() {
+ local line print_header
+
+ # Break down all mappings
+ print_header=true
+ egrep "^(target|swap)=" ${conf_file} | \
+ while read line ; do
+ ${print_header} && einfo "Removing dm-crypt mappings"
+ print_header=false
+
+ target= swap=
+ eval ${line}
+
+ [ -n "${swap}" ] && target=${swap}
+ if [ -z "${target}" ] ; then
+ ewarn "invalid line in ${conf_file}: ${line}"
+ continue
+ fi
+
+ ebegin " ${target}"
+ cryptsetup ${header_opt} remove ${target}
+ eend $?
+ done
+
+ # Break down loop devices
+ print_header=true
+ grep '^source=./dev/loop' ${conf_file} | \
+ while read line ; do
+ ${print_header} && einfo "Detaching dm-crypt loop devices"
+ print_header=false
+
+ source=
+ eval ${line}
+
+ ebegin " ${source}"
+ losetup -d "${source}"
+ eend $?
+ done
+
+ return 0
+}