ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
* [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
@ 2019-02-05 12:13 Sergey
  2019-02-05 13:08 ` Leonid Krivoshein
  0 siblings, 1 reply; 19+ messages in thread
From: Sergey @ 2019-02-05 12:13 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

Приветствую.

Я правильно понимаю, что у Grub нет утилиты, которая показывает список
допустимых меток для выбора для grub-reboot и grub-set-default? Собственно,
--list именно у этих утилит прямо-таки напрашивается. И ещё удивило, что
нет проверки правильности ввода. Это никому не нужно, или я не нашёл, как
оно решается? В багтрекере на gnu.org фичереквестов, вроде, тоже нет таких.

-- 
С уважением, Сергей.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-05 12:13 [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода Sergey
@ 2019-02-05 13:08 ` Leonid Krivoshein
  2019-02-05 15:40   ` Sergey
  0 siblings, 1 reply; 19+ messages in thread
From: Leonid Krivoshein @ 2019-02-05 13:08 UTC (permalink / raw)
  To: sisyphus

[-- Attachment #1: Type: text/plain, Size: 819 bytes --]


05.02.2019 15:13, Sergey пишет:
> Приветствую.
>
> Я правильно понимаю, что у Grub нет утилиты, которая показывает список
> допустимых меток для выбора для grub-reboot и grub-set-default? Собственно,
> --list именно у этих утилит прямо-таки напрашивается. И ещё удивило, что
> нет проверки правильности ввода. Это никому не нужно, или я не нашёл, как
> оно решается? В багтрекере на gnu.org фичереквестов, вроде, тоже нет таких.

1) Грубо:
awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg

2) Велосипед не мой, но вложенные меню учитывает:

# ./grub-entries.sh
0: ALT Workstation 8.2
   0>0 ALT Workstation 8.2, vmlinuz
   0>1 ALT Workstation 8.2, vmlinuz (recovery mode)
   0>2 ALT Workstation 8.2, 4.9.131-std-def-alt0.M80P.1
1: Advanced options for ALT Workstation 8.2


-- 
Best regards,
Leonid Krivoshein.


[-- Attachment #2: grub-entries.sh --]
[-- Type: application/x-shellscript, Size: 614 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-05 13:08 ` Leonid Krivoshein
@ 2019-02-05 15:40   ` Sergey
  2019-02-05 19:43     ` Leonid Krivoshein
  0 siblings, 1 reply; 19+ messages in thread
From: Sergey @ 2019-02-05 15:40 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Tuesday 05 February 2019, Leonid Krivoshein wrote:

> 2) Велосипед не мой, но вложенные меню учитывает:
> 
> # ./grub-entries.sh
> 0: ALT Workstation 8.2
>    0>0 ALT Workstation 8.2, vmlinuz
>    0>1 ALT Workstation 8.2, vmlinuz (recovery mode)
>    0>2 ALT Workstation 8.2, 4.9.131-std-def-alt0.M80P.1
> 1: Advanced options for ALT Workstation 8.2
 
А правильно ли? Подпункты же в 1 должны быть? Вообще стоит поправить
и опакетить, как мне кажется. Автор доступен? Разрешит? :-)

-- 
С уважением, Сергей
a_s_y@sama.ru


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-05 15:40   ` Sergey
@ 2019-02-05 19:43     ` Leonid Krivoshein
    0 siblings, 1 reply; 19+ messages in thread
From: Leonid Krivoshein @ 2019-02-05 19:43 UTC (permalink / raw)
  To: sisyphus

[-- Attachment #1: Type: text/plain, Size: 996 bytes --]


05.02.2019 18:40, Sergey пишет:
> On Tuesday 05 February 2019, Leonid Krivoshein wrote:
>
>> 2) Велосипед не мой, но вложенные меню учитывает:
>>
>> # ./grub-entries.sh
>> 0: ALT Workstation 8.2
>>     0>0 ALT Workstation 8.2, vmlinuz
>>     0>1 ALT Workstation 8.2, vmlinuz (recovery mode)
>>     0>2 ALT Workstation 8.2, 4.9.131-std-def-alt0.M80P.1
>> 1: Advanced options for ALT Workstation 8.2
>   
> А правильно ли? Подпункты же в 1 должны быть? Вообще стоит поправить
> и опакетить, как мне кажется. Автор доступен? Разрешит? :-)

Не похоже, что правильно. И автора не знаю, но в поиске находится.
Тогда предлагаю свой велосипед -- задачка-то совсем не сложная:

./grub-entries.sh /boot/grub/grub.cfg
0    ALT Workstation 8.2
1    Advanced options for ALT Workstation 8.2
1>0    ALT Workstation 8.2, vmlinuz
1>1    ALT Workstation 8.2, vmlinuz (recovery mode)
1>2    ALT Workstation 8.2, 4.9.131-std-def-alt0.M80P.1

Можете опакетить, если надо. :)


-- 
Best regards,
Leonid Krivoshein.


[-- Attachment #2: grub-entries.sh --]
[-- Type: application/x-shellscript, Size: 890 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  @ 2019-02-05 19:54         ` Leonid Krivoshein
    2019-02-05 21:12         ` Sergey
  1 sibling, 1 reply; 19+ messages in thread
From: Leonid Krivoshein @ 2019-02-05 19:54 UTC (permalink / raw)
  To: sisyphus


05.02.2019 22:51, Yuri Khachaturyan пишет:
> Добрый вечер!
> Только у меня вторая версия выдает ошибку:
>
> # ./grub-entries.sh
> ./grub-entries.sh: line 37: $1: unbound variable
>

потому что надо так:
./grub-entries.sh /boot/grub/grub.cfg

но это уже совсем не сложно переделать, если надо...


-- 
Best regards,
Leonid Krivoshein.



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  @ 2019-02-05 20:14               ` Leonid Krivoshein
    2019-02-05 21:08               ` Sergey
                                 ` (2 subsequent siblings)
  3 siblings, 1 reply; 19+ messages in thread
From: Leonid Krivoshein @ 2019-02-05 20:14 UTC (permalink / raw)
  To: sisyphus


05.02.2019 23:04, Yuri Khachaturyan пишет:
> Вот только все равно не работает...
>

Похоже на мою ошибку.


> [...]
> 1>4ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1
> 12Memtest86+-5.01
>

А пришлите свой grub.cfg, попробую поправить скрипт.
Вообще его хорошо бы проверять на многих уровнях вложенности.


> Что я делаю не так?
> И почему grub-editenv list мне выдает:
>
> [root@home ~]# grub-editenv list
> saved_entry=gnulinux-simple-2a1cc180-2883-4e72-8f58-b85ec6de2d36
> prev_saved_entry=
> next_entry=ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1
>
> Но все равно загружает vmlinuz-4.14.89-std-def-alt1 ?
>

Заодно и с этим станет понятней...


-- 
Best regards,
Leonid Krivoshein.



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
    2019-02-05 20:14               ` Leonid Krivoshein
@ 2019-02-05 21:08               ` Sergey
  2019-02-05 22:07                 ` Leonid Krivoshein
    2019-02-05 21:32               ` Sergey
  2019-02-05 22:37               ` Leonid Krivoshein
  3 siblings, 2 replies; 19+ messages in thread
From: Sergey @ 2019-02-05 21:08 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Wednesday 06 February 2019, Yuri Khachaturyan wrote:

> [root@home ~]# /home/yukh/grub-entries.sh /boot/grub/grub.cfg
> 0    ALT Linux 1.9.3 Server Light beta
> 1   Advanced options for ALT Linux 1.9.3 Server Light beta
> 1>0        ALT Linux 1.9.3 Server Light beta, vmlinuz
> 1>1  ALT Linux 1.9.3 Server Light beta, vmlinuz (recovery mode)
> 1>2        ALT Linux 1.9.3 Server Light beta, 4.14.89-std-def-alt1
> 1>3  ALT Linux 1.9.3 Server Light beta, 4.14.80-std-def-alt1
> 1>4  ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1
> 12  Memtest86+-5.01
> 
> [root@home ~]# grub-reboot "ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1"

Я так понимаю, что тут допустимы варианты

grub-reboot "1>4"
grub-reboot "Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1"

и аналогично второму, но по меткам на основе uuid, они там в конфиге видны.
"1>4" не очень хорошо, так как может сместиться после установки ядра, а вот

grub-set-default "Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1"

уже более-менее постоянно, надо только не забыть про /etc/sysconfig/grub2
и GRUB_SAVEDEFAULT=false, а то он при загрузке норовит запомнить, с чем
грузился. И можно будет одноразово на тест грузить другое ядро с откатом
по reset.

-- 
С уважением, Сергей
a_s_y@sama.ru


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  @ 2019-02-05 21:11                   ` Sergey
  0 siblings, 0 replies; 19+ messages in thread
From: Sergey @ 2019-02-05 21:11 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Wednesday 06 February 2019, Yuri Khachaturyan wrote:

> После каких-то изменений необходимо теперь указывать
> gnulinux-4.14.80-std-def-alt1-advanced-2a1cc180-2883-4e72-8f58-b85ec6de2d36
> вместо названия ядра.  
 
Хм, а у меня не съело так. Всё равно хочет первый уровень и ">":

gnulinux-advanced-97dc55e0-56b2-4f33-ae5a-a0c9d2c5daf3>gnulinux-4.9.154-std-def-alt0.M80P.1-advanced-97dc55e0-56b2-4f33-ae5a-a0c9d2c5daf3

Это в p8, но Grub одинаковый вроде как.

-- 
С уважением, Сергей
a_s_y@sama.ru


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
    2019-02-05 19:54         ` Leonid Krivoshein
@ 2019-02-05 21:12         ` Sergey
  1 sibling, 0 replies; 19+ messages in thread
From: Sergey @ 2019-02-05 21:12 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Tuesday 05 February 2019, Yuri Khachaturyan wrote:

>  Можете опакетить, если надо. :)

Пакетить надо в сам Grub. :-)

-- 
С уважением, Сергей
a_s_y@sama.ru


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
    2019-02-05 20:14               ` Leonid Krivoshein
  2019-02-05 21:08               ` Sergey
@ 2019-02-05 21:32               ` Sergey
  2019-02-05 22:37               ` Leonid Krivoshein
  3 siblings, 0 replies; 19+ messages in thread
From: Sergey @ 2019-02-05 21:32 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Wednesday 06 February 2019, Yuri Khachaturyan wrote:

> 1>4  ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1
> 12  Memtest86+-5.01
 
Memtest86, по идее, должен тут быть 2, а не 12.

-- 
С уважением, Сергей
a_s_y@sama.ru


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-05 21:08               ` Sergey
@ 2019-02-05 22:07                 ` Leonid Krivoshein
  2019-02-06  5:35                   ` Sergey
                                     ` (2 more replies)
    1 sibling, 3 replies; 19+ messages in thread
From: Leonid Krivoshein @ 2019-02-05 22:07 UTC (permalink / raw)
  To: sisyphus

[-- Attachment #1: Type: text/plain, Size: 932 bytes --]


06.02.2019 00:08, Sergey пишет:
> Я так понимаю, что тут допустимы варианты
>
> grub-reboot "1>4"
> grub-reboot "Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1"

$ ./grub-entries.sh grub1.cfg
ALT Linux 1.9.3 Server Light beta
Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 
Server Light beta, vmlinuz
Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 
Server Light beta, vmlinuz (recovery mode)
Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 
Server Light beta, 4.14.89-std-def-alt1
Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 
Server Light beta, 4.14.80-std-def-alt1
Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 
Server Light beta, 4.14.76-std-def-alt1
Memtest86+-5.01

если правильно уловил вашу мысль!


-- 
Best regards,
Leonid Krivoshein.


[-- Attachment #2: grub-entries.sh --]
[-- Type: application/x-shellscript, Size: 792 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
                                   ` (2 preceding siblings ...)
  2019-02-05 21:32               ` Sergey
@ 2019-02-05 22:37               ` Leonid Krivoshein
  3 siblings, 0 replies; 19+ messages in thread
From: Leonid Krivoshein @ 2019-02-05 22:37 UTC (permalink / raw)
  To: sisyphus


05.02.2019 23:04, Yuri Khachaturyan пишет:
> Вот только все равно не работает...
>
Попробуйте с новой версией из предыдущего письма.

> И почему grub-editenv list мне выдает:
>
> [root@home ~]# grub-editenv list
> saved_entry=gnulinux-simple-2a1cc180-2883-4e72-8f58-b85ec6de2d36
> prev_saved_entry=
> next_entry=ALT Linux 1.9.3 Server Light beta, 4.14.76-std-def-alt1
>
> Но все равно загружает vmlinuz-4.14.89-std-def-alt1 ?
>

Вероятно, в /etc/sysconfig/grub2 значение переменной GRUB_DEFAULT=n, а 
должно быть GRUB_DEFAULT='saved'. Возможно, достаточно разово запустить 
grub-set-default 'ALT Linux 1.9.3 Server Light beta'. Можно ещё 
посмотреть содержимое файла /boot/grub/grubenv или удалить его перед 
этой командой.


-- 
Best regards,
Leonid Krivoshein.



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-05 22:07                 ` Leonid Krivoshein
@ 2019-02-06  5:35                   ` Sergey
  2019-02-06  5:54                   ` Sergey
  2019-02-06  8:03                   ` Sergey
  2 siblings, 0 replies; 19+ messages in thread
From: Sergey @ 2019-02-06  5:35 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Wednesday 06 February 2019, Leonid Krivoshein wrote:

> $ ./grub-entries.sh grub1.cfg
> ALT Linux 1.9.3 Server Light beta
> Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 Server Light beta, vmlinuz
> 
> если правильно уловил вашу мысль!

Вообще-то я для Юрия писал, как строка формируется. Но да, именно
так, и оно работает - сейчас проверил. Другой вопрос, что вывод 
громоздко выглядит, исходный вариант читабельнее. Даже и не знаю,
в предыдущем варианте надо было строку из двух формировать, тут за
раз скопировать можно, но за границу окошка может вылезти. Зато 
автоматически пропала проблема с подсчётом строк. Уже напрашиваются
параметры запуска для возможности выбора формата вывода. :-)

-- 
С уважением, Сергей.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-05 22:07                 ` Leonid Krivoshein
  2019-02-06  5:35                   ` Sergey
@ 2019-02-06  5:54                   ` Sergey
  2019-02-06  8:03                   ` Sergey
  2 siblings, 0 replies; 19+ messages in thread
From: Sergey @ 2019-02-06  5:54 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

Ещё что-то вот такое не плохо бы сразу добавить:

grubcfg=${1-/boot/grub/grub.cfg}

cat "$grubcfg" | sed \

-- 
С уважением, Сергей.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-05 22:07                 ` Leonid Krivoshein
  2019-02-06  5:35                   ` Sergey
  2019-02-06  5:54                   ` Sergey
@ 2019-02-06  8:03                   ` Sergey
  2 siblings, 0 replies; 19+ messages in thread
From: Sergey @ 2019-02-06  8:03 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Wednesday 06 February 2019, Leonid Krivoshein wrote:

> если правильно уловил вашу мысль!

Пусть уже будет баг: https://bugzilla.altlinux.org/36048

-- 
С уважением, Сергей.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  @ 2019-02-07 11:53                   ` Sergey
    0 siblings, 1 reply; 19+ messages in thread
From: Sergey @ 2019-02-07 11:53 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Thursday 07 February 2019, Yuri Khachaturyan wrote:

> [root@home yukh]# grub-reboot 1>4
> Menu entry not specified.

Правильно, тут файл "4" создался.

> [root@home yukh]# grub-reboot "1>4"

А вот так должно было сработать. Дальше "reboot".

> [root@home yukh]# ll /boot/vmlinuz
> lrwxrwxrwx 1 root root 28 дек 20 16:42 /boot/vmlinuz -> vmlinuz-4.14.89-std-def-alt1

Это тут не при чём. Причём тут /boot/grub/grubenv: grub-reboot и
grub-set-default меняют переменные в этом файле, а уже сам grub 
выбирает в момент загрузки, что ему делать.

-- 
С уважением, Сергей.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  @ 2019-02-07 12:15                       ` Sergey
    0 siblings, 1 reply; 19+ messages in thread
From: Sergey @ 2019-02-07 12:15 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Thursday 07 February 2019, Yuri Khachaturyan wrote:

> Отсюда вопрос: без reboot можно как то проверить это или нет?
 
Смотреть глазами в /boot/grub/grubenv и прикидывать, нет ли там
ошибки.

-- 
С уважением, Сергей.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  @ 2019-02-08  7:37                           ` Sergey
  2019-02-08 20:52                             ` Leonid Krivoshein
  0 siblings, 1 reply; 19+ messages in thread
From: Sergey @ 2019-02-08  7:37 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

On Thursday 07 February 2019, Yuri Khachaturyan wrote:

> P.S. 1>0       Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 Server Light beta, vmlinuz
> 
> После перезагрузки все отрабатывает, но как понять что нет ошибки? 
 
Всё ещё никак, grub-entries только показывает список. И, по 
идее, ничего больше делать и не должен. Проверка должна быть
в grub-reboot и grub-set-default, но её там (пока?) нет.

-- 
С уважением, Сергей.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода
  2019-02-08  7:37                           ` Sergey
@ 2019-02-08 20:52                             ` Leonid Krivoshein
  0 siblings, 0 replies; 19+ messages in thread
From: Leonid Krivoshein @ 2019-02-08 20:52 UTC (permalink / raw)
  To: sisyphus; +Cc: Nikolai Kostrigin

[-- Attachment #1: Type: text/plain, Size: 1013 bytes --]


08.02.2019 10:37, Sergey пишет:
> On Thursday 07 February 2019, Yuri Khachaturyan wrote:
>
>> P.S. 1>0       Advanced options for ALT Linux 1.9.3 Server Light beta>ALT Linux 1.9.3 Server Light beta, vmlinuz
>>
>> После перезагрузки все отрабатывает, но как понять что нет ошибки?
>   
> Всё ещё никак, grub-entries только показывает список. И, по
> идее, ничего больше делать и не должен. Проверка должна быть
> в grub-reboot и grub-set-default, но её там (пока?) нет.

Проверка по идее должна быть. Но её там не будет. Апстрим не примет 
проверку без ID, а почему не видится возможным проверять ID, я 
мотивировал в баге. Исходя из этого новый код может использовать 
следующие конструкции:

grub-entries -c "$item" && grub-reboot "$item"
grub-entries -c "$item" && grub-set-default "$item"

При этом $item может быть либо всеми числами, либо всеми именами, как в 
примере документации на сайте gnu.org.


P.S.: Финальный вариант скрипта вместе с man страницей прилагаю!


-- 
Best regards,
Leonid Krivoshein.


[-- Attachment #2: grub-entries --]
[-- Type: text/plain, Size: 3259 bytes --]

#!/bin/sh -efu
### This file is covered by the GNU General Public License
### version 2 or later.
###
### Copyright (C) 2019  ALT Linux Team
### Author: Leonid Krivoshein <klark@altlinux.org>

numbers_only=0
titles_only=0
search_item=
progname="${0##*/}"
grubmenu="/boot/grub/grub.cfg"


show_help() {
	cat <<-EOF
$progname - Show default or specified grub menu.

Usage: $progname [options]

Options:
  -f, --config=  Specify path to the grub config.
  -n, --numbers  Show only menu item sequence numbers.
  -t, --titles   Show only menu item names.
  -c, --check=   Specify menu item to validate.
  -V, --version  Show script version and exit.
  -h, --help     Show this help message and exit.
EOF
	exit 0
}

show_version() {
	cat <<-EOF
$progname version 1.0
Copyright (C) 2019, ALT Linux Team
EOF
	exit 0
}

show_usage() {
	[ -z "$*" ] || echo "$*" >&2
	echo "Try '$progname --help' for more information." >&2
	exit 1
}

parse_args() {
	local opts="+f:,n,t,c:,V,h"
	local longopts="config:,numbers,titles,check:,version,help"

	opts=$(getopt -n "$progname" -o "$opts" -l "$longopts" -- "$@") ||
		show_usage "Invalid command-line arguments."
	eval set -- "$opts"
	while [ $# -gt 0 ]; do
		case "$1" in
		-f|--config)	shift; grubmenu="$1";;
		-n|--numbers)	numbers_only=1; titles_only=0;;
		-t|--titles)	numbers_only=0; titles_only=1;;
		-c|--check)	shift; search_item="$1";;
		-V|--version)	show_version;;
		-h|--help)	show_help;;
		--)		shift; break;;
		-*)		show_usage "Unrecognized option: '$1'";;
		*)		break;;
		esac
		shift
	done
	[ $# -eq 0 ] || show_usage "Unrecognized arguments: '$*'"
}

show_menu() {
	local mode title number prefix entry=0 itemno=0

	cat "$grubmenu" | sed \
		-re '/^\s*(menuentry\s+|submenu\s+|})/!d' \
		-re "s/^\s*menuentry\s+'([^']+)'.*\$/M\t\1/g" \
		-re 's/^\s*menuentry\s+"([^"]+)".*$/M\t\1/g' \
		-re "s/^\s*submenu\s+'([^']+)'.*\$/S\t\1/g" \
		-re 's/^\s*submenu\s+"([^"]+)".*$/S\t\1/g' \
		-re "s/^\s*}\s*\$/E\t-/g" |
	while read mode title; do
		case "$mode" in
		M)	if [ $numbers_only -ne 0 ]; then
				echo -e "${number}${itemno}"
			elif [ $titles_only -ne 0 ]; then
				echo -e "${prefix}${title}"
			else
				echo -e "${number}${itemno}\t${prefix}${title}"
			fi
			itemno=$(($itemno + 1))
			entry=1
			;;
		S)	number="${number}${itemno}>"
			prefix="${prefix}${title}>"
			itemno=0
			;;
		*)	if [ $entry -ne 0 ]; then
				entry=0
			elif [ -n "$number" ]; then
				number="${number%>}"
				prefix="${prefix%>}"
				case "$number" in
				*">"*)	itemno="${number##*>}"
					number="${number%>*}>"
					prefix="${prefix%>*}>"
					itemno=$(($itemno + 1))
					;;
				*)	itemno=$number
					itemno=$(($itemno + 1))
					prefix=
					number=
					;;
				esac
			fi
			;;
		esac
	done
}

check_item() {
	local cnt

	numbers_only=1; titles_only=0
	cnt=$(show_menu | grep -swc "$search_item" ||:)
	[ "$cnt" != "1" ] || exit 0

	numbers_only=0; titles_only=1
	cnt=$(show_menu | grep -swc "$search_item" ||:)
	[ "$cnt" != "1" ] || exit 0

	[ -z "$cnt" -o "$cnt" = "0" ] &&
		echo "$search_item: menu item not found." >&2 ||
		echo "$search_item: duplicate items found." >&2
	exit 1
}


parse_args "$@"
[ -r "$grubmenu" ] || show_usage "$grubmenu: config file not found."
[ -z "$search_item" ] || check_item
show_menu


[-- Attachment #3: grub-entries.8 --]
[-- Type: text/plain, Size: 1145 bytes --]

.\" Copyright 2019 ALT Linux Team
.\" Lincensed under GPLv2+
.TH GRUB-ENTRIES 8 "Febrary 2019" "grub-entries (ALT Linux Team)"
.SH NAME
grub-entries \- simple script for show grub menu and check menu items
.SH SYNOPSIS
.B grub-entries
[\fIoptions\fP]

.SH DESCRIPTION
.B grub-entries
parse specified or default grub config file, list all grub menu items in the one of the three forms.
Also can search specified item in menu and returns 0, if this item exists, otherwise returns non-zero
value. By default, \fI/boot/grub/grub.cfg\fP config file used.

.SH OPTIONS
.TP 5
.BI \-f "\fR, \fP" \-\-config " filename"
Specify path to the grub config.
.TP 5
.BI \-n "\fR, \fP" \-\-numbers
Show only menu item sequence numbers.
.TP 5
.BI \-t "\fR, \fP" \-\-titles
Show only menu item names.
.TP 5
.BI \-c "\fR, \fP" \-\-check " menuitem"
Specify menu item to validate.
.TP 5
.BI \-V "\fR, \fP" \-\-version
Show script version and exit.
.TP 5
.BI \-h "\fR, \fP" \-\-help
Show help message and exit.

.SH FILES
.PD 0
.B /boot/grub/grub.cfg
.PD
.SH AUTHORS
Leonid Krivoshein <klark@altlinux.org>
.SH "SEE ALSO"
.BR grub-reboot (8),
.BR grub-set-default (8)

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2019-02-08 20:52 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-05 12:13 [sisyphus] grub-reboot и grub-set-default: --list и проверка ввода Sergey
2019-02-05 13:08 ` Leonid Krivoshein
2019-02-05 15:40   ` Sergey
2019-02-05 19:43     ` Leonid Krivoshein
2019-02-05 19:54         ` Leonid Krivoshein
2019-02-05 20:14               ` Leonid Krivoshein
2019-02-05 21:11                   ` Sergey
2019-02-05 21:08               ` Sergey
2019-02-05 22:07                 ` Leonid Krivoshein
2019-02-06  5:35                   ` Sergey
2019-02-06  5:54                   ` Sergey
2019-02-06  8:03                   ` Sergey
2019-02-07 11:53                   ` Sergey
2019-02-07 12:15                       ` Sergey
2019-02-08  7:37                           ` Sergey
2019-02-08 20:52                             ` Leonid Krivoshein
2019-02-05 21:32               ` Sergey
2019-02-05 22:37               ` Leonid Krivoshein
2019-02-05 21:12         ` Sergey

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git