Я пытаюсь создать сценарий bash, который в основном берет кучу .deb, распаковывает их и помещает двоичные файлы и библиотеки в /usr/local/opt/{lib}bin.
Сценарий проверяет, смонтирован ли / как ro или rw, и если он смонтирован как ro, то перемонтирует его как rw. Однако на хромбуках, чтобы смонтировать / как rw, вам необходимо удалить_rootfs_verification для рассматриваемого раздела. Сценарий не может повторить то, что указано выше, когда rootfs_verification включен для /, и должен выйти из 1, вместо этого он продолжается.
Вот часть сценария, о которой я говорю
### ChromeOS's Specific!!!
# The following assumes rootfs_verification for / has already been removed
if grep $rootfs /proc/mounts | grep ro; then
mount -o remount,rw / &> mount.out
elif
grep -iw 'read-write' mount.out; then
echo '\nrootfs_verification for the root partition must to be removed in order to remount,rw /
To remove rootfs_verification run the following command and than reboot the system:
"sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification --partitions 4"'
else exit 1
fi
Весь сценарий WIP можно найти здесь https://pastebin.com/ekEPSvYy.
Вот что происходит, когда я его выполняю
localhost /usr/local # ./kvm_install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 124 0 124 0 0 322 0 --:--:-- --:--:-- --:--:-- 345
100 135 100 135 0 0 170 0 --:--:-- --:--:-- --:--:-- 170
100 60384 100 60384 0 0 57950 0 0:00:01 0:00:01 --:--:-- 344k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 143 0 143 0 0 407 0 --:--:-- --:--:-- --:--:-- 412
100 154 100 154 0 0 202 0 --:--:-- --:--:-- --:--:-- 202
100 1298k 100 1298k 0 0 929k 0 0:00:01 0:00:01 --:--:-- 3020k
/dev/root / ext2 ro,seclabel,relatime,block_validity,barrier,user_xattr,acl 0 0
./kvm_install.sh: line 31: /etc/env.d/30kvm: Read-only file system
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 66802 100 66802 0 0 69657 0 --:--:-- --:--:-- --:--:-- 74555
./kvm_install.sh: line 39: ar: command not found
tar (child): control.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
md5sum: md5sums: No such file or directory
По сути, здесь происходит то, что ar не может быть найден, так как скрипт не смог добавить переменные PATH в /etc/env.d/30kvm, поскольку корневой раздел не может быть смонтирован, поскольку root_verification включен в /.
Я попытался добавить команду elif «grep» в [[, как некоторые предлагали здесь, но это не сработало и добавило дополнительные проблемы с синтаксисом.
Я нахожусь в процессе изучения основ написания сценариев bash. Прошу прощения, если сценарий написан коряво.
Спасибо
В конце концов я так и сделал.
if grep $rootfs /proc/mounts | grep 'ro,'; then
mount -o remount,rw / &> mount.out
if
grep 'read-write' mount.out; then
echo 'something to echo' && exit 1
fi
fi
Это некрасиво, но работает, пока я не найду/узнаю лучший способ реализации цикла.
mount.out
создается только в разделеif
. Если он доступен для чтения в разделеelif
, это не тот, который был создан непосредственно выше, а ваш предыдущий успешныйif
запуск. Это не может быть хорошо ;-) Я недостаточно много работаю сmount
опциями, чтобы иметь возможность давать полезные комментарии по этому поводу. Похоже, вы понимаете проблему, но я бы добавил операторы отладки, такие какecho "inside elif"
, чтобы вы были уверены, что сценарий следует по пути, который вы ожидаете. Удачи. - person shellter   schedule 09.06.2019grep ro
будет соответствовать/dev/root / ext2 rw
, а также/dev/root / ext2 ro
. - person that other guy   schedule 09.06.2019mount.out
может вызывать подозрения, поскольку вы изучаете его в частиelif
, поэтому убедитесь, что в нем есть актуальная информация. Я думаю, что моя идея отладки - это то, с чего вам следует начать, если у вас все еще есть проблемы. Удачи. - person shellter   schedule 10.06.2019