Pull to refresh

Как я собрал свою операционную систему: AUFS, слои и деконструкция себя

Level of difficultyMedium
Reading time3 min
Views681

Пролог: Зачем разбирать себя на слои?

Когда я впервые настроил AUFS для контейнеров, осознал: люди — тоже union-монтирование. Мы — наложение паттернов, привычек и ролей. Решил применить это к себе.

Спонсор эксперимента — более 5 лет в IT и знание, что /proc/self/maps не показывает границы внутреннего ада.


Глава 1: AUFS как модель личности

Что такое AUFS в реальности?

Another Union File System — это объединение нескольких слоёв файловой системы в единое целое. Каждый слой может быть:

  • Read-only (базовые установки)

  • Read-write (один, верхний, текущие изменения)

  • Whiteouts (удалённые элементы, спрятанные, но не забытые)

Слоев для чтения может быть много, а для записи — только один. Это неизменное правило.


Моя "личность" в терминах AUFS

Монтирование себя

mount -t aufs -o br:/upper=rw:/lower1=ro:/lower2=ro,udba=reval none /mnt/current_self

Слои:

  1. /lower1/base (Read-only):

    • Детские травмы (/family_dysfunction)

    • Генетика (/biology/irish_depression)

    • Культурный код (/etc/russian_guilt.conf)

  2. /upper/changes (Read-write):

    • Привычки (/usr/bin/procrastinate.sh)

    • Навыки (/lib/modules/coding_skills)

    • Социальные маски (/dev/char/social_role)

  3. Whiteouts:

    • /.wh.deleted_sensitivity (подавленная эмпатия)

    • /.wh.killed_dreams (отказ от музыки в 15 лет)


Как собрать себя заново?

Шаг 1: Анализ слоёв

auplink /mnt/current_self list

/lower1/base/trauma_events.log
/upper/changes/new_beliefs.cfg

Шаг 2: Пересборка

mkdir -p /upper/patches/self_2024
cp /lower1/base/bad_patterns.c /upper/patches/self_2024/
vim /upper/patches/self_2024/bad_patterns.c

Шаг 3: Удаление через whiteout

touch /upper/changes/.wh.never_ask_for_help

Глава 2: Реальные кейсы переслоения

Кейс 1: Импровизация как Overlay

Проблема: страх публичных выступлений.
Код в /lower1/base/social_interaction.c:

if (audience > 1) {
    panic("They see through you!");
}

Решение: временный слой:

mount -t aufs -o br:/tmp/actor_mask=ro:/upper/changes=rw /mnt/stage_persona

Результат: теперь в /usr/bin/talk.py:

def speak():
    if self.mode == "public":
        execute(actor_mask.script)  # Имитация уверенности
    else:
        normal_mode()

Кейс 2: Миграция с Python 2 на 3 (aka идентичность 2.0)

  1. Бэкап слоя:

cp -a /lower1/base /lower1/base_python2_backup
  1. Постепенная замена:

- print "I'm worthless"
+ print("I'm work-in-progress")
  1. Проверка совместимости:

./configure --with-self-compassion=yes
make test

Глава 3: Технические проблемы самоAUFS'а

1. Конфликт слоёв

Симптом: зависания при переписывании базовых установок через /upper/changes
Пример:

echo new > /upper/changes/fear_of_abandonment

Ошибка: kernel panic: conflicting belief systems

Решение:

dmesg | grep -i conflict
echo 1 > /proc/sys/kernel/emotional_crash
reboot  # через терапию

2. Утечки памяти

cat /proc/self/status | grep -i anon

Anonymous memory: 8.7G (память о бывших, невысказанное, тревоги)

Фикс:

void release_memory(void *pain) {
    kfree(pain);
    trigger_grief();   // Плач
    trigger_writing(); // Дневник
}

3. Бесполезные whiteouts

Проблема: whiteout скрывает, но не очищает.

stat /mnt/current_self/.wh.need_for_approval

Size: 0 Blocks: 8

Вывод: suppression != deletion. Нужно пересобирать.


Эпилог: Что осталось в /var/log

Мой эксперимент показал: слои — не решение, а инструмент. Как и в AUFS, важно:

  • Делать auplink flush — синхронизировать и отпускать

  • Не бояться rmmod старых модулей

  • Помнить: даже read-only слои можно переосмыслить через mount

# А пока я переключился на:
mount -t overlay -o lowerdir=childhood,upperdir=init_attempt,workdir=/tmp/initramfs_rebuild none /mnt/boot_self

Сейчас пробую OverlayFS — он позволяет менять нижние слои. Видимо, пора лезть в initramfs детства.


P.S. Все скрипты из статьи — в моём GitHub. Там же конфиги для emotional_cgroupd — демона контроля ресурсов.

P.S.S. Мне 23, я разработчик. Эта статья — не просто метафора, а начало сборки настоящей ОС. Следующая — про init, rootfs, и загрузку своего первого слоя реальности.


P.S.S.S. Если вам откликаются мои размышления о слоистых системах, технологии и жизни, подписывайтесь на мой канал в Telegram "Консоль Души". Тут я делюсь своими мыслями и опытом в IT, говорю о том, как я пережил паузу в коде, и о том, как мы, как и операционные системы, можем быть многослойными.

Подписаться на канал

_____________________________
/ \
| mount -t aufs -o br=... |
| Монтирую личность... |
| |
| /lower/base: травмы |
| /upper/changes: опыт |
| /.wh: подавления |
| |
| >> /mnt/current_self |
\_______________________________/


|| ||
(o) (o)
| |
\___||___/
/ \
/ \
(__) (__)

⬢ Mozgolika v1.0 ⬢
"Self is mounted"


Tags:
Hubs:
+1
Comments3

Articles