#!/bin/sh # vim:set filetype=sh: # NOTE: The mdev-conf APK handles this now, but only for xvd or sd links (not # both) : "${LIBDIR:=$PREFIX/lib}" . "$LIBDIR/tiny-cloud/common" # nvme tool not installed? [ -x /usr/sbin/nvme ] || log crit "nvme cli not installed" raw_ebs_alias() { /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null } case $ACTION in add|"") BASE=$(echo "$MDEV" | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') PART=$(echo "$MDEV" | sed -re 's/nvme[0-9]+n[0-9]+p?//g') # TODO: deadline instead of max tries MAXTRY=30 TRY=0 until [ -n "$EBS" ]; do EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ') [ -n "$EBS" ] && break TRY=$((TRY + 1)) if [ $TRY -eq $MAXTRY ]; then log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))" exit 1 fi sleep 0.1 done # remove any leading '/dev/', 'sd', or 'xvd', and append partition EBS=${EBS#/dev/} EBS=${EBS#sd} EBS=${EBS#xvd}$PART ln -sf "$MDEV" "sd$EBS" && log notice "Added sd$EBS symlink for $MDEV" ln -sf "$MDEV" "xvd$EBS" && log notice "Added xvd$EBS symlink for $MDEV" ;; remove) for TARGET in sd* xvd* do [ "$(readlink "$TARGET" 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && \ log notice "Removed $TARGET symlink for $MDEV" done ;; esac