blob: 6ca6f5789a9d4694e18ae2ed9835577c735d8d3e [file] [log] [blame]
#!/bin/bash
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This script creates a symlink using udev to the stateful device.
#
# Positional arguments: symlink device_path
# symlink is a relative path in /dev to the desired location of the output
# symlink.
# device_path is an absolute file path or absolute file path prefix. It is
# interpreted as an absolute file path prefix if and only if it ends with
# a * character.
set -o errexit
set -o pipefail
get_device() {
local -r dev="$1"
udevadm settle
if [[ "${dev: -1}" != "*" ]]; then
echo "${dev}"
return
fi
echo "${dev::-1}"* | tr " " "\n" | sort -V | tail -n 1
}
main() {
local -r symlink="$1"
local -r input_dev="$2"
local -r dev="$(get_device "${input_dev}")"
local real_dev
if [[ -b "${dev}" ]]; then
real_dev="$(realpath "${dev}")"
echo "KERNEL==\"${real_dev#/dev/}\", SYMLINK+=\"${symlink}\"" > \
/etc/udev/rules.d/00-stateful-dev.rules
udevadm control -R
udevadm trigger "${real_dev}"
else
echo "not a valid device: ${dev}"
return 1
fi
}
main "$@"