Файловий метод підміни (overlay)¶
Огляд¶
Коренева файлова система UBports містить набір типових конфігураційних файлів для різноманітних функцій та компонентів, в т.ч. для масштабування екрана, для звуку, блютуз та ін.. Ці файли не можуть бути прив’язаними до окремих функцій та компонентів цільового пристрою (на який робиться порт) і тому їх слід підлаштувати. Ба більше, можливо буде необхідно ще додати інші конфігураційні файли, наприклад, скрипти для певних потреб. Оверлейний файл (підміни) забезпечує можливість заміни наявних або додавання нових файлів до файлової системи.
Серед різних методів збірки, різних версій Ubuntu Touch так само існують різні методи, як саме впроваджена підміна файлів.
Як працює підміна файлів через монтування (mount)¶
Ви можете підміняти окремі файли, а також замінювати чи об’єднувати наявні каталоги, фактично не змінюючи базову файлову систему. Це працює для кореневого розділу Ubuntu Touch (root), а також для розділів Android.
Якщо підкаталог містить спеціальний файл з назвою
.halium-override-dir, цей каталог замінить цільове дерево каталогів, тобто вміст основного каталогу та його підкаталоги більше не будуть доступні.Якщо підкаталог містить спеціальний файл з назвою
.halium-overlay-dir, він буде об’єднаний з цільовим каталогом. Будь-який оригінальний файл у підкаталозі чи його піддереві буде доступним, якщо файли з таким самими назвами та шляхами у каталозі підміни відсутні. Файли чи цілі каталоги, які містяться лише у каталозі підміни будуть доступні за відповідними шляхами. Це досягнуто через використання файлової системи overlayfs (технічні деталі див. у документації overlayfs).Файли у каталогах, без жодного з наведених вище спеціальних файлів, монтуються за допомогою bind-mount з абсолютним шляхом, отриманим після видалення наведеного вище префіксу. Підкаталоги будуть оброблені відповідно до описаних правил.
Примітка
Якщо версія Вашого ядра не нова, для функціонування такої підміни можуть знадобитися латки/патчі. Без них можна буде підміняти окремі файли, але підміна/поєднання каталогів може викликати помилки під час монтування.
Примітка
Для увімкнення підміни файлів на базі монтування потрібно до deviceinfo Вашого порту додати таку опцію: deviceinfo_use_overlaystore="true".
Специфіка того, як працює підміна файлів чи тек, залежить від використовуваної системи збирання та буде описана нижче.
Приклад¶
Вміст overlay/system/halium:
overlay
└── system
└── halium
└── etc
├── foo
│ ├── .halium-overlay-dir
│ ├── conf.d
│ │ ├── 50-drivers.conf
│ │ └── 90-local.conf
│ └── foo.conf
├── bar
│ ├── .halium-override-dir
│ └── bar.conf
└── bazrc
Вміст основного образу файлової системи:
/etc
├── foo
│ ├── conf.d
│ │ ├── 10-global.conf
│ │ ├── 20-system.conf
│ │ └── 90-local.conf
│ └── foo.conf
├── bar
│ ├── bar.conf
│ └── baz.conf
└── bazrc
В результаті комбінована файлова система виглядатиме так:
/etc
├── foo
│ ├── .halium-overlay-dir
│ ├── conf.d
│ │ ├── 10-global.conf
│ │ ├── 20-system.conf
│ │ ├── 50-drivers.conf (added)
│ │ └── 90-local.conf (replaced)
│ └── foo.conf (replaced)
├── bar (replaced)
│ ├── .halium-override-dir
│ └── bar.conf
└── bazrc (replaced)
Каталог /etc/foo об’єднаний, а тека /etc/bar та файл /etc/bazrc замінені.