Постоянный идентификатор машины systemd во встроенной среде linux без сохранения состояния (UBI / UBIFS)

Да, это возможный. Поместите такой код в файл, скажем fix-dashes.sh (у меня Mac OS, но это должно работать и в других Unix):

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
trap 'IFS=$SAVEIFS' 0
for i in $@
do
  echo Processing $i
  case $i in
    *-*)
      echo "'$i' has a dash"
      destname=$(echo "$i" | sed 's/ -.*//')
      echo mv "$i" $destname
      mv "$i" $destname
      ;;
  esac
done

Затем bash fix-dash.sh * / переименует каталоги, как вы указали. Косая черта важна, чтобы вы получали только имена каталогов, иначе будут затронуты обычные файлы с дефисами.

`IFS содержит разделители для слов, и поскольку в именах ваших файлов есть пробелы, вам необходимо изменить их.

Мне нравится использовать ограниченный механизм регулярного выражения case , потому что он имитирует RE, используемые bash в командной строке. В этом случае переименование будет выполнено только при именах, содержащих дефис.

Команда sed выполняет преобразование, в данном случае заменяя все после первого пустой строкой.

2
31.10.2017, 07:06
2 ответа

Я решил эту проблему, просто перемонтировав rootfs read -write(mount -o remount,rw /)и сохранив случайно сгенерированный ID машины в файл /etc/machine-id.

0
27.01.2020, 22:18

Вероятно, самый простой и лучший вариант — передать его как переменную командной строки ядраsystemd.machine_idв соответствии с официальной документацией . Если вы хотите получить что-то особенное, вы можете настроить загрузчик на основе чего-то действительно уникального в SoC, на котором вы работаете (, например, серийного номера, MAC-адреса и т. д. ).

3
27.01.2020, 22:18

Теги

Похожие вопросы