ISO изображение

Сравняване на ISO изображения

Сравняване на ISO изображения
За да настроят и поддържат изчислителни устройства, дистрибуторите на Linux редовно предоставят ISO изображения за своите издания. Това опростява поддържането на нашите системи актуализирани с помощта на пълна компилация от софтуер, който всъщност се вписва заедно, в идеални условия.

Представете си, че имате няколко от тези ISO изображения, съхранявани локално. Как да разберете, че извлечените ISO изображения са автентични? В тази статия ще ви покажем как да проверите целостта и автентичността на ISO изображение, изтеглено преди това, и как да разберете какви са разликите между действителното съдържание на две ISO изображения. Това ви помага да проверите процеса на изграждане за ISO изображението и ви позволява да видите какво може да се е променило между две компилации или налични версии.

Формати на изображения

Форматът на дисковите изображения има своя собствена история [11]. Общият стандарт е ISO 9660 [12], който описва съдържанието на оптичния диск като цяло. Използва се разширението на файла .iso, за да идентифицира файл с изображение (клонирано копие).

Оригиналният формат ISO 9660 идва с редица ограничения, като например 8 нива на директория, както и дължината на имената на файловете. Тези ограничения са намалени чрез въвеждането на редица разширения като Rock Ridge [13] (запазване на разрешения на POSIX и по-дълги имена), Joliet [14] (съхранение на Unicode имена в UCS-2) и Apple ISO 9660 Extensions [15], който въведе HFS поддръжка.

За да получите повече подробности относно файл с изображение, използвайте командата 'file', последвана от името на файла с данни, както следва:

.Листинг 1: Показване на подробности за ISO файл

$ файл *.изо
debian-10.1.0-amd64-netinst.iso: DOS / MBR сектор за зареждане;
дял 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
начален сектор 3808, 5664 сектора
xubuntu-18.04.3-desktop-amd64.iso: DOS / MBR сектор за зареждане;
дял 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
startsector 11688, 4928 сектора $

Проверка на изтеглени ISO файлове

Доверените доставчици на софтуер винаги ви предлагат две неща за изтегляне - действителното ISO изображение, както и съответната контролна сума на изображението, за да направите проверка на целостта на изтегления файл. Последният ви позволява да потвърдите, че вашият локален файл е точно копие на файла, присъстващ на сървърите за изтегляне, и нищо не се обърка по време на изтеглянето. В случай на грешка по време на изтеглянето, локалният файл е повреден и може да предизвика случайни проблеми по време на инсталацията [16].

Освен това, в случай че ISO изображението е компрометирано (както се случи с Linux Mint в началото на 2016 г. [17]), двете контролни суми няма да съвпадат. Можете да изчислите контролните суми, използвайки 'md5sum' (оттеглено, вече не се препоръчва) и 'sha256sum', както следва:

.Листинг 2: Изчисляване на контролната сума за ISO файлове

$ md5sum *.изо
b931ef8736c98704bcf519160b50fd83 debian-10.1.0-amd64-netinst.изо
0c268a465d5f48a30e5b12676e9f1b36 xubuntu-18.04.3-desktop-amd64.изо
$ sha256sum *.изо
7915fdb77a0c2623b4481fc5f0a8052330defe1cde1e0834ff233818dc6f301e debian-10.1.0-amd64-netinst.изо
3c9e537ee1cf64088251e56b4ca1694944ad59126f298f24a78cd43af152b5b3 xubuntu-18.04.3-desktop-amd64.изо
$

Можете да извикате сравнението между предоставения файл с контролна сума и локално съхраняваното ISO изображение, както е показано в списък 3. Изходът на OK в края на ред сигнализира, че и двете контролни суми са еднакви.

.Листинг 3: Сравнете предоставените контролни суми

$ sha256sum - проверете sha256sum.txt xubuntu-18.04.3-desktop-amd64.iso: Добре
$

Сравняване на два локално съхранени ISO файла

Може да се случи, че сте изтеглили два ISO файла и бихте искали да разберете дали те са напълно еднакви. Командата 'sha256sum' е полезна отново и ви препоръчваме да капсулирате тази проверка в скрипт на обвивката. В Листинг 4 виждате скрипт според bash, който комбинира четирите команди 'sha256sum', 'cut', 'uniq' и 'wc', за да отдели първата колона за всички изходни редове, да ги обедини, в случай че са идентични , и пребройте броя на останалите редове. Ако двата (или повече) ISO файла са еднакви, тогава контролните му суми са идентични, ще остане само един ред и bash скриптът ще изведе съобщението „файловете са еднакви“, в крайна сметка:

.Листинг 4: Автоматично сравняване на контролни суми на ISO файлове, използвайки 'sha256sum'

#!/ bin / bash
 
if ['sha256sum *.iso | cut -d "-f1 | uniq | wc -l 'eq 1]
тогава
echo "файловете са еднакви"
друго
echo "файловете не са идентични"
fi

В случай, че скриптът върне, че двата файла са различни, може да се интересувате от точната позиция на неравенството. Сравнение по ред байтове може да се направи с помощта на командата 'cmp', която извежда първия байт, който се различава между файловете:

.Листинг 5: Вижте разликите между два или повече файла, използвайки 'cmp'

$ cmp *.изо
debian-10.1.0-amd64-netinst.iso xubuntu-18.04.3-desktop-amd64.iso различават: байт 433, ред 4
$

Сравняване на действителното съдържание

Досега направихме сравнение по ред байтове, а сега ще разгледаме по-отблизо - действителното съдържание на ISO файловете, които трябва да се сравняват помежду си. На този етап влизат в действие редица инструменти, които помагат за сравняване на отделни файлове, цели структури на директории, както и компресирани архиви и ISO изображения.
Командата 'diff' помага за сравняване на директория, използвайки двата ключа '-r' (съкратено от '-recursive') и '-q' (съкратено от '-brief'), последвано от двете директории, които да се сравняват помежду. Както се вижда в

Листинг 6, 'diff' съобщава кои файлове са уникални за някоя от директориите и ако файлът със същото име се е променил.

.Листинг 6: Сравняване на две директории с помощта на 'diff'

$ diff -qr t1 / t2 /
Само в t1 /: blabla.конф.
Файловете t1 / nsswitch.conf и t2 / nsswitch.conf са различни.
Само в t2 /: pwd.конф.
$

За да сравните две ISO изображения, просто монтирайте двата файла с изображения в отделни директории и отидете от там.
По-цветен изход в командния ред се осигурява от инструментите 'colordiff' [1,2] и 'icdiff' [18,19]. Фигура 1 показва изхода на 'icdiff', в който разликите между двата файла на 'nsswitch.conf 'са маркирани в зелено или червено.

Фигура 1: Сравняване на две директории с помощта на „icdiff“

Графичните инструменти за сравнение на директории включват „fldiff“ [5], „xxdiff“ [6] и „dirdiff“ [7]. „xxdiff“ е вдъхновен от „fldiff“ и затова изглеждат доста сходни. Записите с подобно съдържание идват с бял или сив фон, а различните се предлагат със светложълт фон. Записите с яркожълт или зелен фон са уникални за дадена директория.

Фигура 2: Сравняване на две директории с помощта на 'fldiff'

'xxdiff' показва разликите във файловете в отделен прозорец, като щракнете върху запис (вижте фигура 3).

Фигура 3: Сравняване на две директории с помощта на 'xxdiff'

Следващият кандидат е „дирдиф“. Той надгражда функционалността на 'xxdiff' и може да сравнява до пет директории. Файловете, които съществуват във всяка директория, са маркирани с X. Интересното е, че цветовата схема, която се използва за изходния прозорец, е същата като тази на „icdiff“ (вижте фигура 4).

Фигура 4: Сравняване на две директории с помощта на „dirdiff“

Следващата стъпка е сравняването на компресирани архиви и цели ISO изображения. Въпреки че командата „adiff“ от пакета „atool“ [10] може вече да ви е известна, вместо това ще разгледаме командата „дифоскоп“ [8,9]. Той се описва като „инструмент за достигане до дъното на това, което прави файловете или директориите различни. Той рекурсивно разопакова архиви от много видове и трансформира различни двоични формати в по-разбираеми за човека форми, за да ги сравнява ”. Произходът на инструмента е The Reproducible Builds Project [19,20], който е „набор от практики за разработване на софтуер, които създават независима проверка на пътя от източника до двоичен код“. Освен всичко друго, той поддържа следните файлови формати:

* Android APK файлове и изображения за зареждане
* Файлове с база данни на Бъркли БД
* Образи на файловата система на Coreboot CBFS
* Debian .buildinfo и .променя файлове
* Източни пакети на Debian (.dsc)
* ELF двоични файлове
* Git хранилища
* ISO 9660 CD изображения
* MacOS двоични файлове
* OpenSSH публични ключове
* Архиви на пакети OpenWRT (.ipk)
* PGP подписани / криптирани съобщения
* PDF и PostScript документи
* RPM архивира лук

Фигура 5 показва изхода на „дифоскоп“ при сравняване на две различни версии на пакетите на Debian - точно ще видите направените промени. Това включва както имената на файловете, така и съдържанието.

Фигура 5: Сравняване на два пакета на Debian с помощта на „дифоскоп“ (откъс)

Листинг 7 показва изхода на „дифоскоп“ при сравняване на две ISO изображения с размер 1.9G всеки. В този случай двете ISO изображения принадлежат на Linux Mint Release 19.2 като има предвид, че единият файл с изображение е извлечен от френски сървър, а другият от австрийски сървър (оттук и буквите „fr“ и „at“). В рамките на секунди „дифоскоп“ заявява, че двата файла са напълно идентични.

.Листинг 7: Сравняване на две ISO изображения с помощта на „дифоскоп“

$ дифоскоп linuxmint-19.2-xfce-64bit.fr.iso linuxmint-19.2-xfce-64bit.в.изо
| ################################################### ### | 100% Време: 0:00:00
$

За да погледнем зад кулисите, помага да се извика „дифоскоп“ с двете опции „-debug“ и „-text -“ за по-подробен изход към терминала. Това ви позволява да научите какво прави инструментът. Листинг 8 показва съответния изход.

.Листинг 8: Зад кулисите на „дифоскоп“

$ diffoscope --debug --text - linuxmint-19.2-xfce-64bit.fr.изо
linuxmint-19.2-xfce-64bit.в.изо
2019-10-03 13:45:51 D: дифоскоп.основно: Стартиращ дифоскоп 78
2019-10-03 13:45:51 D: дифоскоп.локал: Нормализиране на локал, часова зона и др.
2019-10-03 11:45:51 D: дифоскоп.основно: Започване на сравнение
2019-10-03 11:45:51 D: дифоскоп.напредък: Регистрация < diffoscope.progress.ProgressBar object at 0x7f4b26310588> като наблюдател на напредъка
2019-10-03 11:45:52 D: дифоскоп.компаратори: Заредени 50 класа за сравнение 64bit.fr.iso ETA: -: -:--
2019-10-03 11:45:52 D: дифоскоп.компаратори.утили.специализира: Неидентифициран файл. Magic казва: DOS / MBR сектор за зареждане; дял 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsector 652, 4672 сектори
2019-10-03 11:45:52 D: дифоскоп.компаратори.утили.специализира: Неидентифициран файл. Magic казва: DOS / MBR сектор за зареждане; дял 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsector 652, 4672 сектори
2019-10-03 11:45:52 D: дифоскоп.компаратори.утили.сравнение: Сравняване на linuxmint-19.2-xfce-64bit.fr.iso (FilesystemFile) и linuxmint-19.2-xfce-64bit.в.iso (FilesystemFile)
2019-10-03 11:45:52 D: дифоскоп.компаратори.утили.файл: двоичен.has_same_content: < linuxmint-19.2-xfce-64bit.fr.iso> < linuxmint-19.2-xfce-64bit.в.iso>
2019-10-03 11:45:53 D: дифоскоп.компаратори.утили.сравнение: has_same_content_as върна True; пропускане на по-нататъшни сравнения
| ################################################### ### | 100% време: 0:00:01
2019-10-03 11:45:53 D: дифоскоп.tempfiles: Почистване на 0 temp файла
2019-10-03 11:45:53 D: дифоскоп.tempfiles: Почистване на 0 временни директории
$

Е, засега, добре. Следващите тестове са направени върху изображения от различни версии и с различен размер на файла. Всички те доведоха до вътрешна грешка, която се проследява до командата 'diff', свършваща от вътрешната памет. Изглежда, че има ограничение за размера на файла от около 50 милиона. Ето защо съм изградил две по-малки изображения с по 10 милиона и ги предадох на „дифоскоп“ за сравнение. Фигура 6 показва резултата. Резултатът е дървовидна структура, съдържаща файла 'nsswitch.conf 'с подчертаните разлики.

Фигура 6: Сравняване на две ISO изображения с помощта на „дифоскоп“

Също така може да се предостави HTML версия на изхода. Фигура 7 показва изхода като HTML файл в уеб браузър. Постижимо е чрез превключвателя

'--html изход.html '.

Фигура 7: Сравняване на две ISO изображения с помощта на „дифоскоп“ (HTML изход)

В случай, че не харесвате стила на изход или искате да го съчетаете с фирмената идентичност на вашата компания, можете да персонализирате изхода от вашия собствен CSS файл, използвайки стила на ключа -css.css ', който зарежда стила от реферирания CSS файл.

Заключение

Намирането на разлики между две директории или дори цели ISO изображения е малко сложно. Показаните по-горе инструменти ви помагат да овладеете тази задача. И така, щастливо хакване!

Благодаря ти
Авторът би искал да благодари на Аксел Бекерт за помощта при подготовката на статията.

Връзки и референции

* [1] colordiff
* [2] colordiff, пакет Debian,
* [3] разсейва
* [4] diffutils, пакет Debian,
* [5] fldiff
* [6] xxdiff
* [7] дирдиф
* [8] дифоскоп
* [9] дифоскоп, пакет Debian
* [10] atool, пакет Debian
* [11] Кратко въвеждане на някои често срещани файлови формати на изображения
* [12] ISO 9660, Уикипедия
* [13] Рок Ридж, Уикипедия
* [14] Джолиет, Уикипедия
* [15] Разширения на Apple ISO 9660, Уикипедия
* [16] Как да проверите ISO изображения, Linux Mint
* [17] Пазете се от хакнати ISO, ако сте изтеглили Linux Mint на 20 февруари!
* [18] icdiff
* [19] icdiff, пакет Debian
* [20] Проектът за възпроизводими сгради
* [21] Проектът за възпроизводими компилации, Debian Wiki

Как да инсталирате League Of Legends на Ubuntu 14.04
Ако сте фен на League of Legends, това е възможност за вас да тествате League of Legends. Имайте предвид, че LOL се поддържа на PlayOnLinux, ако сте п...
Инсталирайте най-новата стратегия за игра OpenRA на Ubuntu Linux
OpenRA е Libre / Free Real Time стратегия за игра, която пресъздава ранните игри на Westwood като класическата Command & Conquer: Red Alert. Разпредел...
Инсталирайте най-новия Dolphin Emulator за Gamecube & Wii на Linux
Dolphin Emulator ви позволява да играете избраните от вас игри Gamecube & Wii на Linux Personal Computers (PC). Като безплатно достъпен и емулатор на...