Init
This commit is contained in:
commit
59022bfbd7
20
.SRCINFO
Normal file
20
.SRCINFO
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
pkgbase = device-mapper-openrc
|
||||||
|
pkgdesc = OpenRC device-mapper init script
|
||||||
|
pkgver = 20210106
|
||||||
|
pkgrel = 1
|
||||||
|
arch = any
|
||||||
|
license = GPL2
|
||||||
|
depends = device-mapper
|
||||||
|
depends = openrc
|
||||||
|
provides = init-device-mapper
|
||||||
|
conflicts = init-device-mapper
|
||||||
|
backup = etc/conf.d/device-mapper
|
||||||
|
source = device-mapper.confd
|
||||||
|
source = device-mapper.initd
|
||||||
|
source = dmeventd.initd
|
||||||
|
sha256sums = 57777904f12a35617e5a4193c964ebb32396452487fd02353e71e16e7b46bc22
|
||||||
|
sha256sums = 630fbe07721c2a264c1b2f0195caf658c591bdef13cb82d5605bb489f59971a4
|
||||||
|
sha256sums = b4b91555f1486754717073dae83715d1e03adfdd5e56d80be8ac9689a85bc717
|
||||||
|
|
||||||
|
pkgname = device-mapper-openrc
|
||||||
|
|
27
PKGBUILD
Normal file
27
PKGBUILD
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Maintainer: m00n <lmarianski@protonmail.com>
|
||||||
|
# Contributor: artoo <artoo@artixlinux.org>
|
||||||
|
|
||||||
|
pkgname=device-mapper-openrc
|
||||||
|
pkgver=20210106
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc="OpenRC device-mapper init script"
|
||||||
|
arch=('any')
|
||||||
|
license=('GPL2')
|
||||||
|
provides=('init-device-mapper')
|
||||||
|
depends=('device-mapper' 'openrc')
|
||||||
|
conflicts=('init-device-mapper')
|
||||||
|
backup=('etc/conf.d/device-mapper')
|
||||||
|
source=("device-mapper.confd"
|
||||||
|
"device-mapper.initd"
|
||||||
|
"dmeventd.initd")
|
||||||
|
sha256sums=('57777904f12a35617e5a4193c964ebb32396452487fd02353e71e16e7b46bc22'
|
||||||
|
'630fbe07721c2a264c1b2f0195caf658c591bdef13cb82d5605bb489f59971a4'
|
||||||
|
'b4b91555f1486754717073dae83715d1e03adfdd5e56d80be8ac9689a85bc717')
|
||||||
|
|
||||||
|
package() {
|
||||||
|
install -Dm755 "${srcdir}"/device-mapper.confd "${pkgdir}"/etc/openrc/conf.d/device-mapper
|
||||||
|
|
||||||
|
for f in device-mapper dmeventd; do
|
||||||
|
install -Dm755 "${srcdir}"/"$f".initd "${pkgdir}"/etc/openrc/init.d/"$f"
|
||||||
|
done
|
||||||
|
}
|
1
device-mapper.confd
Normal file
1
device-mapper.confd
Normal file
@ -0,0 +1 @@
|
|||||||
|
RC_AFTER="lvm"
|
146
device-mapper.initd
Normal file
146
device-mapper.initd
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
#!/usr/bin/openrc-run
|
||||||
|
# Copyright 1999-2016 Gentoo Foundation
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
# As of .67-r1, we call ALL lvm start/stop scripts with --sysinit, that
|
||||||
|
# means dmeventd is NOT notified, as it cannot be safely running
|
||||||
|
before dmeventd checkfs fsck
|
||||||
|
after modules
|
||||||
|
}
|
||||||
|
|
||||||
|
dm_in_proc() {
|
||||||
|
local retval=0
|
||||||
|
for x in devices misc ; do
|
||||||
|
grep -qs 'device-mapper' /proc/${x}
|
||||||
|
retval=$((${retval} + $?))
|
||||||
|
done
|
||||||
|
return ${retval}
|
||||||
|
}
|
||||||
|
|
||||||
|
# char **build_dmsetup_command(volume)
|
||||||
|
#
|
||||||
|
# Returns complete dmsetup command given single volume name
|
||||||
|
build_dmsetup_command() {
|
||||||
|
local count dmsetup_cmd
|
||||||
|
|
||||||
|
# Number of lines mentioning volume name
|
||||||
|
count=$(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | grep -c ${1})
|
||||||
|
|
||||||
|
# If there's just one line:
|
||||||
|
if [ ${count} -eq 1 ] ; then
|
||||||
|
echo "echo $(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
|
||||||
|
grep ${1} | awk '{$1=""; print $0}') | /usr/bin/dmsetup create ${1}"
|
||||||
|
|
||||||
|
# For all cases with more lines:
|
||||||
|
elif [ ${count} -gt 1 ] ; then
|
||||||
|
for c in $( seq 1 ${count} ) ; do
|
||||||
|
if [ ${c} -eq 1 ] ; then
|
||||||
|
# Heavy escaping in awk-statement because we cannot use apostrophes
|
||||||
|
dmsetup_cmd="echo -e $(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
|
||||||
|
grep ${1} | awk NR==${c}\ \{\$1=\"\"\;\ print\ \$0\})"
|
||||||
|
else
|
||||||
|
# Append starting with newline
|
||||||
|
dmsetup_cmd="${dmsetup_cmd}\\\\n \
|
||||||
|
$(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
|
||||||
|
grep ${1} | awk NR==${c}\ \{\$1=\"\"\;\ print\ \$0\})"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "${dmsetup_cmd} | /usr/bin/dmsetup create ${1}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# char **get_new_dm_volumes(void)
|
||||||
|
#
|
||||||
|
# Return unique volumes from /etc/dmtab
|
||||||
|
get_new_dm_volumes() {
|
||||||
|
local volume
|
||||||
|
|
||||||
|
# Filter comments and blank lines
|
||||||
|
grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
|
||||||
|
awk '{ print $1 }' | \
|
||||||
|
uniq | \
|
||||||
|
while read volume ; do
|
||||||
|
# If it exists, skip it
|
||||||
|
dmvolume_exists "${volume%:}" && continue
|
||||||
|
|
||||||
|
echo "${volume%:}"
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# int dmvolume_exists(volume)
|
||||||
|
#
|
||||||
|
# Return true if volume exists in DM table
|
||||||
|
dmvolume_exists() {
|
||||||
|
local x line volume=$1
|
||||||
|
|
||||||
|
[ -z "${volume}" ] && return 1
|
||||||
|
|
||||||
|
/usr/bin/dmsetup ls 2>/dev/null | \
|
||||||
|
while read line ; do
|
||||||
|
for x in ${line} ; do
|
||||||
|
# the following conditonal return only breaks out
|
||||||
|
# of the while loop, as it is running in a pipe.
|
||||||
|
[ "${x}" = "${volume}" ] && return 1
|
||||||
|
# We only want to check the volume name
|
||||||
|
break
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# if 1 was returned from the above loop, then indicate that
|
||||||
|
# volume exists
|
||||||
|
[ $? = 1 ] && return 0
|
||||||
|
|
||||||
|
# otherwise the loop exited normally and the volume does not
|
||||||
|
# exist
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# int is_empty_dm_volume(volume)
|
||||||
|
#
|
||||||
|
# Return true if the volume exists in DM table, but is empty/non-valid
|
||||||
|
is_empty_dm_volume() {
|
||||||
|
local table volume=$1
|
||||||
|
|
||||||
|
set -- $(/usr/bin/dmsetup table 2>/dev/null | grep -e "^${volume}:")
|
||||||
|
[ "${volume}" = "$1" -a -z "$2" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
start() {
|
||||||
|
if [ -e /proc/modules ] && ! dm_in_proc ; then
|
||||||
|
modprobe dm-mod 2>/dev/null
|
||||||
|
fi
|
||||||
|
# Ensure the dirs exist for locking and running
|
||||||
|
checkpath -q -d -m 0700 -o root:root /run/lvm /run/lock/lvm
|
||||||
|
|
||||||
|
local x volume
|
||||||
|
|
||||||
|
if [ -x /usr/bin/dmsetup -a -c /dev/mapper/control -a -f /etc/dmtab ] ; then
|
||||||
|
[ -n "$(get_new_dm_volumes)" ] && \
|
||||||
|
einfo " Setting up device-mapper volumes:"
|
||||||
|
|
||||||
|
get_new_dm_volumes | \
|
||||||
|
while read x ; do
|
||||||
|
[ -n "${x}" ] || continue
|
||||||
|
|
||||||
|
volume="${x##* }"
|
||||||
|
|
||||||
|
ebegin " Creating volume: ${volume}"
|
||||||
|
if ! eval $(build_dmsetup_command ${volume}) >/dev/null 2>/dev/null ; then
|
||||||
|
eend 1 " Error creating volume: ${volume}"
|
||||||
|
# dmsetup still adds an empty volume in some cases,
|
||||||
|
# so lets remove it
|
||||||
|
is_empty_dm_volume "${volume}" && \
|
||||||
|
/usr/bin/dmsetup remove "${volume}" 2>/dev/null
|
||||||
|
else
|
||||||
|
eend 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
25
dmeventd.initd
Normal file
25
dmeventd.initd
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/openrc-run
|
||||||
|
# Copyright 1999-2016 Gentoo Foundation
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
|
PIDFILE=/run/dmeventd.pid
|
||||||
|
BIN=/usr/bin/dmeventd
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
# As of .67-r1, we call ALL lvm start/stop scripts with --sysinit, that
|
||||||
|
# means dmeventd is NOT notified, as it cannot be safely running
|
||||||
|
after lvm device-mapper
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
ebegin "Starting dmeventd"
|
||||||
|
start-stop-daemon --start --exec $BIN --pidfile $PIDFILE
|
||||||
|
eend $?
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
ebegin "Stopping dmeventd"
|
||||||
|
start-stop-daemon --stop --exec $BIN --pidfile $PIDFILE
|
||||||
|
eend $?
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user