Переделал автоматический инсталлятор для Devcon. Или куча ворчания.

Делал, чтоб клиенту меньше ручками работать. Теперь не надо самому определять версию винды, и вытаскивать нужный devcon из архива соответственно.

Предыдущий я сделал на Inno Setup, но Inno Setup оказался той еще заразой, нихрена он версию Винды толком определить не мог, и тихой сапой подкладывал во все винды один и тот же devcon, который подходит для Windows 7 и выше. От чего у клиента с виндой XP x64 произошел адский баттхерт, так, что забрызгало пол-Петербурга, аж до моей деревни брызги долетели. Видимо, клиент меня проклял, потому что мне на ногу упал топор (слава Ктулху обухом), у меня упали форточки, точнее форточка, но стеклянная и на пол, ко мне какого-то черта приперлась лесная охрана и стала [РОСКОМНАДЗОР], и я после этого [РОСКОМНАДЗОР] в результате, теперь страдаю [МИНЗДРАВ].

Новый сделал на NSIS, но как оказалось — NSIS тоже [РОСКОМНАДЗОР], точнее, не сам NSIS, он мне как раз понравился, за исключением одного странного недокументированного глюка, о котором как-нибудь расскажу, и скрипт-язык, вполне себе такая помесь Бейсика с Башем. А вот документация, это, товарищи, лютый [РОСКОМНАДЗОР] в последней стадии.

Русский мануал к популярному инсталл-мэйкеру писали сто лет назад какие-то [ДАННЫЕ УДАЛЕНЫ] с OSZone.net, еще и назвали свое творение «справочником», хотя что-что а справочники так не делают. Просто плохо структурированные статьи, которые на [РОСКОМНАДЗОР] запихнули в chm-файл. [РОСКОМНАДЗОРКА], поучитесь у того же Исзелиона с wasm.ru, как нужно делать справочники и мануалы. На туториале Исзелиона сотня-другая студентов если не аспирантами стали, так свой зачет по ассемблеру точно получили. Аффтар еще и жалуется на форуме, типа, «ну на[РОСКОМНАДЗОР] обновлять мануал, если его никто не читает, и очевидные вопросы задает». Так [РОСКОМНАДЗОРКА], [РОСКОМНАДЗОРКА], ты так написал этот мануал, что кошка [РОСКОМНАДЗОРОМ] по клавиатуре лучше напишет. Но ладно, я много захотел, русского мануала. Да, согласен. Но теперь «поговорим о влажности в номере», точнее об оригинальной вики от разработчиков.

Оригинальная вики тоже [РОСКОМНАДЗОРНЫЙ], [РОСКОМНАДЗОР] твою мать, [РОСКОМНАДЗОР]. Причем, я вполне себе уверен, что там есть все описания функций языка NSIS, вот только отдельной категории для списка функций нет. Функции потом ищутся гуглем, который выводит на страницу-сироту с вполне нормальным описанием, но [РОСКОМНАДЗОР] знает, почему на эту страницу нельзя попасть из самой вики. В навигации [РОСКОМНАДЗОР] не валялся, в общем без стакана не разобраться. А еще пишут, что «хорошо документированный продукт». Документирован он может и хорошо, но найти в документации что-то конкретное, это как в ГОРФ пойти к чиновнику: «вы мне справку ЕПРСТ-1488 принесли, а надо было ЖПЧШЦ-666», и [РОСКОМНАДЗОР] знает где это написано.

Даже есть мысль как-нибудь выкачать эту вики себе на комп, сделать нормально, попытаться перевести и выпустить в виде справочника.

Впрочем, инсталлер сделал:

Скачать с Mega.nz
С GitHub
Исходник (файлы devcon_all.nsi и gvv.nsi)

ШОК: Семь капитанов искали РУБЛЬ

И никакой конспирологии…

Тут некоторые задаются вопросом, что семь капитанов первого ранга искали на секретной подлодке в глубине северных морей. Есть совсем уж русофобские и конспирологические версии, что они хотели устроить всем суверенный Рунет, обрубив трансатлантический кабель.

Да конспирология это все, причем, довольно низкого пошиба. Чем у нас могут заниматься военные, да еще и в первых чинах, на дне, причем, проводя батиометрические исследования, т.е. исследования того самого дна.

Да рубль они на дне искали.

А почему у них бомбануло, ну, знаете ли, океанская кора тонкая, и куда там рубль провалится…

Устранение ошибки драйверов USB 3.0 при установке Windows 7 с флэшки с помощью установщика Windows 8/8.1

Преамбула

При установке Windows 7 на компьютер с USB 3.0 можно столкнуться с ошибкой «Не найден необходимый драйвер для дисковода оптических дисков.«, на самом деле, дисковод оптических дисков тут не при чем, особенно, если установка производится с загрузочной флэшки с дистрибутивом «семерки». В Windows 7 и его установочном окружении просто нет драйверов для контроллеров USB 3.0.

Самый простой вариант, когда в BIOS/UEFI удается переключить USB-контроллер в legacy-режим. Но на многих системах это самое legacy реализовано весьма коряво. Например, live-дистрибутивы Linux могут в таком режиме видеть и контроллер, и подключенные накопители, а вот установщик Windows 7 (и сама винда) нет.

На днях попался такой ноутбук, в котором примерно так и получалось, и вот, хочу рассказать об интересном способе это побороть.
Конечно, можно поступить стандартно — создать отдельный дистрибутив для такого компьютера, внедрив нужные драйвера, или же скачать какую-нибудь «колхозную» сборку. Но есть и другой способ — воспользоваться установочным окружением от Windows 8/8.1 в котором драйвера для USB 3.0 есть.

Минус способа — в установленной Windows 7 драйвера для USB 3.0 будут отсутствовать, как, наверняка, и драйвера от сетевой карты, и возникнет проблема, как их туда затолкать.

В источнике есть способ сделать это с помощью консоли восстановления с получившейся флэшки, у меня же получилось еще проще. Кривое ноутбучное legacy поддерживалось Linux’ом с System Rescue CD, так что на этом моменте я останавливаться не буду.

Что понадобится

1. Образ установщика Windows 7
2. Образ установщика Windows 8/8.1
3. Флэшка 🙂

Как сделать

1. Закатываем на флэшку дистрибутив Windows 8/8.1, например, с помощью программы Rufus, особых подробностей я рассказывать не буду, но я сначала переключил UEFI ноута в режим Legacy BIOS (хоть он работал нормально и, главное, был), снес б-гмерзкое GPT, а потом установил в Rufus «Схема раздела и тип системного интерфейса» в значение «MBR для компьютеров с BIOS или UEFI«.

2. Итак, у нас получилась флэшка с Windows 8/8.1, переходим на нее, заходим в каталог sources и удаляем оттуда файлы install.wim и/или install.esd.
3. Теперь из образа Windows 7 вытаскиваем файл install.wim (он тоже лежит в подкаталоге sources образа). Если у вас образ AIO, т.е. «все в одном», образ, из которого можно установить сразу несколько версий Windows, например, Starter, Home и Professional, то необходимо из образа Windows 7 вытащить файлы sources/*.clg, например, install_Windows 7 Home Basic x64.clg, install_Windows 7 Home Premium x64.clg и т.д. Также можно попробовать скопировать папку $OEM$, но не везде срабатывает, т.е. иногда конкретный дистрибутив может ее проигнорировать.
4. Теперь копируем все, что вытащили из дистрибутива Windows 7 в каталог sources на флэшке.
5. ФАНФАРЫ!

Примерное объяснение, как все это работает.

Загрузчик установщика Windows современных версий сначала загружает файл boot.wim, который представляет из себя хитрый архив (виртуальный диск, наподобие initrd в Linux), содержащий необходимые для процесса установки драйвера, основные файлы и саму программу-установщик. Далее окружение предустановки ищет дополнительные компоненты на диске с boot.wim, в частности install.wim, виртуальный диск с файлами операционной системы, которая должна быть установлена. Тут мы просто оставили предустановочное окружение, подсунув ему ОС другой версии.

Источник

1. Как избавиться от ошибки «Не найден необходимый драйвер для дисковода оптических дисков” при установке Windows 7

Знаменитый визг свиньи Касперского.

Мне периодически задают вопрос, а где взять тот самый Визг Свиньи, которым визжал ранее Антивирус Касперского при обнаружении зловреда?

Вот, выдрал специально для вас из какой-то старой версии (еще под Win98) KAV’а.
Насколько я понимаю, сам по себе звук некопирайтный, ибо Евгений Валентинович его сам откуда-то сгайдарил и счубайсил. Так что смело качайте, ставьте на будильник, звонок или СМС.

https://youtu.be/esP4sg-JqOk

Файл в формате WAV

Включение и отключение сетевой активности с помощью DEVCON.EXE

Преамбула

Когда-то давно в этом блоге упоминалось про замечательную консольную утилиту devcon от Microsoft, это консольный аналог «Диспетчера устройств», причем бесплатный и с открытым исходным кодом.
В прошлый раз мы находили и включали/отключали конкретную сетевую карту. В этот раз будем искать все сетевые устройства, а также массово включать и отключать всю сетевую активность на локальной машине.

Получение списка всех сетевых устройств

devcon.exe findall =net

Команда найдет и выведет на экран все сетевые устройства, включая виртуальные адаптеры, например, TUN/TAP от Openvpn или виртуальные адаптеры VMWare, а также те устройства, которые в данный момент не активны (отключены, или у них нет драйверов).

devcon.exe find =net

Выводятся только активные устройства.

Пример вывода devcon.exe findall =net:

Отключение всей сетевой активности

devcon.exe disable =net

Включение сетевой активности

devcon.exe enable =net

Внимание! devcon необходимо запускать с админскими правами!

Скачать набор devcon’ов

devcon’ы входят в разные пакеты SDK, отличающиеся гигантским размером. Я тут подобрал разные версии devcon’ов для разных ОС в одном архиве, ну и плюс батники для включения/отключения сети.

Содержимое архива:
batchfiles — пакетные файлы для включения и отключения сетевой активности
с помощью devcon, а также для получения списка сетевых устройств.

x64 — devcon для Windows7-10 для 64-разрядных версий Windows.
x86 — devcon для Windows7-10 для 32-разрядных версий Windows.
XP\x64 — devcon для Windows XP 64-разрядной, работает только в WinXP x64.
XP\x86 — devcon для Windows XP 32-разрядной, работает в WinXP x32 и,
возможно, в Win Vista x32.

Скачать с Mega.nz (ZIP)
Автоматический установщик

Источники

DevCon — диспетчер устройств в командной строке Windows.

C#: Определение версии, названия, сервис-пака и архитектуры Windows.

Преамбула

Вот уж не думал, что данная задача будет достойна заметки, но оказалось, что нормально определить версию (а главное, удобоваримое название и архитектуру) просто так не получится.

Подробности под катом

Исходники

Класс VersionDetect.cs
Весь пример целиком

Источники

Win32_OperatingSystem class
Тема на Киберфоруме
Вопрос на stackowerflow

Небольшой обзор на сайты, отображающие IP и различную информацию про него.

Преамбула

Понадобилось тут для одного проекта получать внешний IP, да еще желательно и из нескольких источников.

Критерии были такие:

— сайт не должен быть заскриптован и засран капчей наглухо, в идеале, чтобы просто содержал страничку с внешним IP, а еще лучше, чтоб с IP, которые «протекают» через прокси, которую без бубна можно высосать хоть тем же wget’ом.
— чтоб не требовал куки и не пугался странных идентификаторов браузера (последнее, конечно, легко решается на уровне клиента, но ведь лень).
— более-менее стабильная работа
— анализ не должен требовать сложного парсинга, в идеале, IP вытаскиваются простой регуляркой.

Лучшие

https://api.myip.com/ — выдает IP и краткие данные в формате JSON. Бесплатный и стабильный (правда в прошлом месяце все-таки вышел из строя на два дня из-за каких-то технических проблем).
https://2ip.ru — наверное, самый известный сервис в рунете. Несмотря на требования включить javascript, информацию об IP отдает и просто так. Бесплатный, стабильный (вообще не видел, чтоб он когда-нибудь падал). IP на странице встречается несколько раз, посему, при составлении списка выкидываем одинаковые. Минус — русский сервис.
https://yandex.ru/internet/ — ВНЕЗАПНО, Яндекс. Плюсы и минусы такие же, как у предыдущего сайта.
https://hidemyna.me/ru/ip/ — Информация о IP на сайте VPN-сервиса HideMy.name. Сам сервис какой-то подозрительный, а страничка с информацией об IP вполне себе соответствует всем требованиям, правда, насчет надежности особо не тестировалась.
https://whatleaks.com/ru/ — в стабильности не уверен, в остальном, вполне соответствует.
http://whatismyip.host/my-ip-address-details — простой зарубежный сервис, отображающий IP и краткую информацию. Насчет надежности особо не тестировалось, остальное соответствует, плюс сервис не российский.

Чуть похуже

Похуже, в данном случае, значит, что требуют более продвинутого парсинга, а при простом выдирании со страницы всего, что похоже на IP, выдают паразитные данные.

https://2ip.ua/ua/ — на самом деле, я бы поставил этот сервис на второе место, после https://api.myip.com/, если бы не маленький минус — со странички выкачивается и адрес самого сервера.
http://www.findmyip.org/ — дает кучу паразитных IP

Совсем бяка.

Read more…

Эти хороши, только для того, чтобы посмотреть IP через браузер (и то, я бы не советовал). Реагируют различными ошибками на нестандартный идентификатор браузера, если не принимаешь куки, и/или если не грузишь с сайта какие-то картинки.

Отдельной категорией в список непопадают жадные буржуи, которые в 21 веке не могут себе позволить хостинг с безлимитным трафиком (даже я могу).

Альтернативный вариант

Не заморачиваться, и установить себе на хостинг скрипт, например такой, просто получающий IP из всех заголовков HTTP, такой, с геолокацией, или такой, с симпатичным оформлением.

Репозиторий на GitHub

Узнать, как сделано, можно прочитать записи по тегу ip-detect копия озаглавленные «Определение IP и местоположения посетителя сайта».

Молодой поэт.

Вечный Junior, он же [info]chronos@ljr, он же Виктор Багров из г. Кондопоги, офигенный молодой поэт, качающий завораживающие верлибры, наверное, прямо из ноосферы или информационного поля Вселенной. Так что я ничего пиарить не буду, просто оставлю это здесь.

***

сегодня он стоит в поле, и завтра он
тоже там
в поле
среди разъяснений
стоит
думает
слушает
а вчера: куски объяснимого
сваи

04 06 19
Ссылка на оригинал

***

я допускаю Быть: и тебе и друг
ому
т изымает
я
в отвесном письме
стороны среза двоятся
вдвойне
у предгорья их всплески
сквозное сечение
в памяти
рассекаем план (кто. он?)
после в завтра никто не укажет
на место
заведомо ложного поиска в эхо
не помнить

04 06 19
Ссылка на оригинал

***

и книга здесь остановится, и вина
пока что здесь незнакомая
при отсеке
при вывихе
вкладышем развернется
в необратимом
обратном разборе
висеть останется: слово: и эта: (па
п
ка)мешек: в снова

03 06 19
Ссылка на оригинал

***

собирали картинки, а они под столом
подо льдом: всё в смещенном
пока (ты) (й)
вне поля: подвижен скворец
голос
голос
квадраты
в мишени:

03 06 19
Ссылка на оригинал

Интерактивный скрипт, устанавливающий Syslinux

А так же ISO-образ Acronis True Image и Puppy Slacko.

Преамбула

Попросили превратить мою заметку про то, как можно пользоваться Acronis True Image без его акронисовского «восстановления при загрузке», превратить в интерактивный скрипт, который делает все то, что описано в заметке, но сам, задавая пользователю наводящие вопросы.

Сделал, чо. Правда, скрипт, наверняка, дичайший быдлокод, но работает без ошибок. Единственное что, предварительно надо создать основной раздел ext2/ext3 на жестком диске, и он должен идти первым. Потом установить винды, сделать линуксовый раздел активным, а потом уже запускать скрипт со всеми потрохами.

Скрипт дико большой, и отдельно его описывать мне откровенно влом, впрочем, в виде отдельных заметок, все самое основное я в этом блоге уже обсуждал.

Основная заметка

Эмуляция восстановления при загрузке Acronis True Image с помощью syslinux/extlinux Копия

Список заметок по теме

1. Создание списков (из файлов в каталоге) Копия
2. Простой интерактив в bash-скриптах (запрос Y/N и запрос строки) Копия
3. Простой интерактив в bash-скриптах (меню, списки) Копия
4. Проверка, установлен ли флаг раздела «активный» Копия
5. Определение файловой системы раздела диска в Linux Копия
6. Поиск загрузчика Windows Копия
7. Получение MBR ID и номера раздела, для передачи управления другому загрузчику Копия
8. Число или строка в переменной BASH Копия

Скрипт и готовые «пакеты» с Syslinux и модулями

На GitHub

Поскольку, наверняка набыдлокодил, то исправления и дополнения приветствуются.

Пемза

Продолжаем заниматься прикладным геоложеством, тем более, что этот минерал в не таком далеком прошлом и правда прикладывали, даже с силой, можно сказать, терли об свой организм. А точнее, использовали вместо скраба. Итак, знакомьтесь, пемза — пепел давно потухшего вулкана. И этот образец откопал я лично на даче у друга, так что я прям геолог, геолог прям. Примерно вот по этим координатам: 62.257657, 34.439260. Могу налюбить вас эдак на километров 10, тому ще GPS-навигатор я благополучно в городе оставил, а теперь восстанавливаю поездку по гугл-картам. Вроде, нашел похожее на правду озеро. Если что, поеду еще раз, подкорректирую координаты.
Особенность обработки участка в том, что у них на огороде нет привозной земли от слова совсем, так что, что было из огорода выкопано, то там и лежало с тех времен, когда в Карелии еще были действующие вулканы. Ближайшие к точке в Лижме, и чуть дальше — в Гирвасе:

Лижма, если по дороге, ~ в 19 км, если спрямить, наверное, будет километров 15, т.е. для вулкана фигня — доплюнуть мог.

До более известного Гирвасского вулкана — напрямую ~55 км, еще и через озеро Сандал. Мог он туда доплюнуть или нет, не ведаю.

Сам минерал легкий, пористый (навскидку, весит примерно столько же, сколько гораздо меньший по объему кусочек шунгита), у него, наверное, внутри еще есть газы той земной атмосферы :). А еще он легко разделяется на довольно толстые пластины. Этот кусок я не трогал, но над другими мы экспериментировали, плюс находили практически ровные пластины пемзы в земле.




Еще фото под катом

Другие фото:

1 2 3 4 5 6 7

Так что вот, такая занимательная геология, не отходя от дачи.

Раритетная метеорологическая таблица (для определения видимости)

Ездили мы на днях с поэтами в славный город С., где поэты выступали, а я зарулил на местную метеостанцию и сфотографировал там раритетную таблицу для определения видимости. Собственно, таблицу меня запрягли осовременивать, пришлось делать ее копию в Excel’е, а таблица древнючая — 70х годов прошлого века. Так что сегодня у нас артерфакт метеорологический.

Лицевая сторона:



Другие фото

1 2 3

Оборотная сторона:

Еще фото под катом

Удаление кривого активатора ODIN.

Преамбула

Позвали тут в дружественную конторку, где после очередных обновлений перестал работать какой-то очередной русский инновационный криптопровайдер (не Крипто Про, с ним вроде такой беды не случалось). Оказалось, программулина конфликтовала с кривым активатором ODIN, да-да, винда почему-то тоже оказалась нелицензионной, несмотря на государственный статус этой самой конторки. Пришлось удалять.
А активатор кривой тому ще подсовывает в винду патченное ядро, дабы установить драйвер без цифровой подписи, нужный для эмуляции таблицы SLIC.

Простой способ (который не сработал)

На рутрекере, кстати, в хорошей и обстоятельной теме про активацию семерки, предлагали просто создать BAT-файл со следующим содержимым, и запустить его с правами администратора, после чего перезагрузиться:

del "%windir%\system32\drivers\oem-drv64.sys"
del "%windir%\system32\xNtKrnl.exe"
del "%windir%\system32\xOsLoad.exe"
del "%windir%\System32\ru-RU\xOsLoad.exe.mui"
del "%windir%\System32\en-US\xOsLoad.exe.mui"
%windir%\system32\bcdedit.exe /set {current} path \Windows\system32\winload.exe
%windir%\system32\bcdedit.exe /deletevalue {current} kernel
%windir%\system32\bcdedit.exe /deletevalue {current} nointegritychecks
%windir%\system32\bcdedit.exe /deletevalue {current} custom:26000027
reg delete HKLM\SYSTEM\CurrentControlSet\services\oem-drv64 /va /f

Кому-то может и поможет, но мне не повезло, файлы активатора не удалились, reg delete не сработал, потому я просто нашел в дистрибутиве их виды «автоматический установщик» активатора, и просто провернул последовательность действий в обратном порядке.

Удаление параметров Реестра и конфигурации загрузчика

Получился такой вот CMD-файл
В каталоге с этим батником должен быть подкаталог data, со следующим содержимым:
1. Утилита SetACL.exe, которая будет менять права доступа к ключам Реестра, и восстанавливать их после редактирования. Утилиту взял из того же дистрибутива.
2. Утилитка sleep, но это так, для красоты, моя прихоть.
3. Файлы Реестра (*.reg) для x86 и x64 ОС, в которых прописано, какие ключи удалять anti-oem-drv64.reg anti-oem-drv86.reg

Далее я сделал RAR-SFX с таким сценарием:
;Расположенный ниже комментарий содержит команды SFX-сценария

Setup=Deactivator.cmd
TempMode="Удалить активатор?","Деактиватор"
Silent=1
Overwrite=1

И поставил галочку в дополнительных параметрах SFX, на запрос административного доступа.

Удаление файлов активатора

После перезагрузки можно удалить файлы активатора, таким вот CMD-файлом.

@ rem echo Этот файл должен быть запущен с правами администратора и после выполнения Deactivator'а
@ rem echo Чтобы окончательно удалить следы активатора нажмите любую клавишу, иначе CTRL+C!
@ rem pause

DEL "%windir%\system32\drivers\oem-drv64.sys"
DEL "%windir%\system32\xNtKrnl.exe"
DEL "%windir%\system32\xOsLoad.exe"
DEL "%windir%\System32\ru-RU\xOsLoad.exe.mui"
DEL "%windir%\System32\en-US\xOsLoad.exe.mui"
DEL "%windir%\system32\drivers\oem-drv86.sys"

@echo "Clean complete."
@pause

И SFX-сценарий к нему:

;Расположенный ниже комментарий содержит команды SFX-сценария

Setup=Cleaner.cmd
TempMode="Выполняйте только после исполнения Deactivator'а, если хотите окончательно удалить следы активации","Окончательная очистка"
Silent=1
Overwrite=1

Скачать

1. Deactivator.exe
2. Cleaner.exe

Репозиторий на GitHub

Большая статья о механизмах активации Windows 7

На Rutracker.org Копия в PDF

Шунгит

Сегодня в номере геологический атерфакт, образец породы шунгита, собственно, из месторождения близ Шуньги, деревни, которая и дала название минералу. Это практически сверхчистый образец, с повышенным содержанием фуллеренов, для использования в медицине и быту. Да, из него можно сделать фильтр для воды, но я лично не хочу портить камень, поэтому просто помещаю его в банку с водой на ночь, если мне вдруг хочется шунгитовой водички.
Если вдруг захотите себе такой же (хоть кило) — добро пожаловать в редакционный телеграм, у нас прямые поставки из Шуньги, а доставить можем по всему СНГ и РФ.


Остальные фото под катом

Передача управления другому загрузчику по MBR ID в Syslinux.

Преамбула

Раз уж в прошлой заметке зашла речь про chainloading, т.е. передачу управления другому загрузчику из Syslinux, был разобран стандартный способ указания загрузчика в виде записи hdX Y, и определен минус этого способа, то можно рассказать и про устранение этого минуса.

Согласно спецификации, управление другому загрузчику можно передать не только указав номер диска и раздела, но и в следующем формате:

mbr:<id> [<partition>]

где:
<id> - уникальный MBR ID
<partition> - номер раздела жесткого диска

Схема нумерации разделов жесткого диска

Эта схема, конечно, для предыдущего случая, но разделы (а не диски), в обоих случаях нумеруются одинаково. А вот вместо hd0 (hd1, hd2…) будет mbr:<id>.

Пример конфига

Вот часть измененного конфига syslinux.cfg, где chainloading используется для загрузки Windows со второго раздела на первом жестком диске, только теперь жесткий диск определяется не по номеру, а по MBR ID:

LABEL windows
   menu label Microsoft Windows 7
   kernel modules/chain.c32
   append mbr:0x31c5dff2 2

Получение номера раздела, MBR ID и формирование записи конфигурации для загрузчика Syslinux

Сделал весь процесс в отдельной функции get_slid(), куда первым параметром передается имя устройства (с номером раздела или без), например, /dev/sda2.

1. Получим имя устройства без пути:

T_BN=`basename $1`

2. Получим номер раздела, удалив из начала имени все латинские буквы:

T_VOLNUM=`echo "$T_BN" | sed 's/^[a-z]*//'`

3. Получим имя устройства, с полным путем, но без номера раздела:

T_DSKNAM=`echo "$1"|sed 's/[0-9]\+$//'`

4. Проверим, не получилась ли пустая строка (может случиться, если в первый параметр что-то не то положили):

if [ -z "$T_DSKNAM" ]; then
    return 1 #error
fi

5. Получаем идентификатор MBR, способ указан в руководстве по chain.c32 [1]:

T_MBRID=`hexdump -s 440 -n 4 -e '"0x%08x\n"' "$T_DSKNAM"`

т.е. hexdump читает из MBR устройства 4 байта идентификатора, и выдает их в виде строки требуемого формата.

6. Формируем строку для конфигурации Syslinux:

SL_ID="mbr:$T_MBRID $T_VOLNUM"

7. Пример вызова функции:

if [ -z "$1" ]; then
    echo "Use "`basename $0` "<device>"
    exit
fi

get_slid "$1"

if [ "$?" -ne 0 ];then
    echo "Error!"
else
    echo "$1: $SL_ID"
fi

Скрипт целиком

На PasteBin
На GitHub

Источники

1. Comboot/chain.c32
2. Syslinux (Русский)

Преобразование имени раздела и устройства в формат SYSLINUX

Преамбула

Меня спрашивают, а где на практике можно применить «номер буквы в алфавите», про получение которого в bash-скрипте было недавно написано. Вот пример такого практического применения. Известно, что в Linux дисковые устройства представлены в виде /dev/sda, /dev/sdb, /dev/sdc и т.д., а разделы диска в виде /dev/sda1, /dev/sda2
SYSLINUX, точнее его модуль chain.c32, который может передавать управление другим загрузчикам, использует другой формат:

hdD P
где:
D — номер устройства (диска) в BIOS
P — номер раздела на диске
Отсчет дисков ведется с 0, разделов — с 1 (0 — главная загрузочная запись диска)
Например, hd0 2 — загрузка должна производиться со 2 раздела первого диска, hd1 1 — с 1 раздела второго жесткого диска, hd3 0 — необходимо передать управление главной загрузочной записи (MBR) четвертого диска.

Вот часть конфига syslinux.cfg, где chainloading используется для загрузки Windows со второго раздела на первом жестком диске:

LABEL windows
   menu label Microsoft Windows 7
   kernel modules/chain.c32
   append hd0 2

Некоторые минусы

— Минус, связанный с BIOS. Если вдруг порядок устройств в BIOS поменяется, то загрузчик SYSLINUX «заблудится» и попытается передать управление не туда.
— Некоторые линуксы меняют порядок именования жестких дисков, т.е. /dev/hda может и не соответствовать первому загрузочному диску. Тут уже зависит от конкретного дистрибутива.

Первый минуса можно избежать, используя вместо номера диска MBR ID, но это уже тема для отдельной заметки.

Получаем ID для chain.c32

Я организовал это в отдельной функции get_sysl_hd(), чтобы было удобно утащить в другой скрипт, буде понадобится. Первый параметр функции — имя устройства, например, /dev/sda1

1. Получаем имя устройства без пути к нему.
T_DN=`basename $1`

2. Можно проверить, соответствует ли имя устройства формату имени дисков, а то вдруг нам CD-ROM подсунули 🙂
Имя диска начинается с первой буквы s или h на некоторых пожилых дистрибутивах, далее следует буква d, далее — латинская буква a-z, потом могут следовать цифры (номера разделов). Можно сообразить вот такое простенькое регулярное выражение:

^[sh]d[a-z][1-9]*$

Далее пропускаем результат работы basename через grep, и проверяем выхлоп в переменной. Если переменная пустая, подсунули что-то не то.

T_DN=`basename $1|grep '^[sh]d[a-z][1-9]*$'`
if [ -z "$T_DN" ]; then
	return 1
fi

Но на самом деле, эта проверка не очень-то и нужна, можно пропустить этот пункт

3. Получаем третью букву в имени диска с помощью команды expr:
expr substr pos len

где:
substr — операция получения подстроки
pos — позиция символа в строке (отсчет ведется с единицы)
len — длина подстроки

T_3LET=`expr substr $T_DN 3 1`

4. Получаем номер буквы в алфавите. Я воспользовался вторым копия из ранее описанных способов.

S_CODE=`printf '%d' \'$T_3LET`
A_CODE=`printf '%d' \'a`
SYSL_ID="hd"`expr $S_CODE - $A_CODE`

5. Получим номер раздела, удалив sed‘ом все латинские буквы с начала имени устройства в переменной $T_DN:

T_VOLNUM=`echo "$T_DN" | sed 's/^[a-z]*//'`
if [ -z "$T_VOLNUM" ]; then
	T_VOLNUM=0
fi

Если переменная окажется пустой, значит нам подсунули устройство, без указания раздела — необходимо сослаться на MBR. Присваиваем T_VOLNUM значение 0.

6. Добавляем полученные данные в переменную SYSL_ID

SYSL_ID="$SYSL_ID $T_VOLNUM"

7. Пример вызова функции:

if [ -z "$1" ]; then
    echo "Use "`basename $0` "<device>"
    exit
fi

get_sysl_hd "$1"

if [ $? -ne 0 ];then
    echo "Bad device name!"
else
    echo "$1: $SYSL_ID"
fi

Скрипт целиком

На PasteBin
На GitHub

Источники

1. Syslinux (Русский)
2. Работа со строками
3. BASH: Получить номер буквы в латинском алфавите, более элегантное решение. Копия

Замечательные опечатки.

В околошкольной крипипасте:

сжечь ему эту погонь

Интересно, кого полагалось сжечь, местного военкома, или даже целого министра обороны?

За «погонью» идет ее сестра «серень», наверное, весьма зловонное растение.

На участке бабушки вовсю цвела серень

И, наконец, финалист нашего сегодняшнего хит-парада, мужыкальный, прям-таки инструмент из теста по музыке — сексофон.