Включаем adb на любой кастомной прошивке
Данный пост будет интересен тем, кто любит играться с прошивками android-смартфонов, и порой сталкивается с проблемой запуска скринридера при первоначальной настройке, или хочет иметь возможность подключения через adb для любых других действий с прошивкой сразу из коробки.
Никакого кликбейта кстати, adb появляется сразу, при первом старте прошивки.
Ниже изложенный гайд, к сожалению, сыроват, тестировался мной один раз на одном устройстве, и у вас разумеется что-то может не взлететь, но основной принцип я изложу, а дальше, при желании, вы сами сможете докрутить под свою задачу.
Сразу предупреждаю, что гайд подразумевает наличие неких знаний, например об основных принципах работы телефона и его загрузки, о смысле наличия рут-прав и т.п.
Иначе говоря, гайд рассчитан на тех, кто уже немного успел поковыряться с прошивками android-устройств и что-то в этом понимает. В любом случае вы всегда можете задавать вопросы в комментариях, поехали уже наконец.
Начну немного издалека: когда-то, очень много лет назад, телефоны поставлялись с обычной флеш-памятью, размеченной на обычные разделы, в которых вот так прям сразу лежала система.
Система, лежащая в разделе system, конечно была доступна только для чтения, но при наличии рут-прав можно было сделать что-то вроде
В команде выше / сработает на девайсах, где системный раздел монтируется как корневой (system-as-root), у меня был именно такой телефон, насколько мне известно, сейчас так делают все производители прошивок, как стоков, так и кастомов.
На ещё более ранних моделях, которых я в руках не держал, система монтируется в /system, и там перемонтировать нужно именно его, но это сейчас не столь важно.
Более того, при наличии кастомного recovery, например twrp, можно было загрузиться в него, смонтировать систему на запись, и произвести там необходимые манипуляции.
Так вот на подобных устройствах, где ещё не завезли super partition, и все разделы лежат наверху, работает следующая штука:
1. Шьём прошивку, вероятнее всего через twrp.
2. Включаем телефон, даём системе инициализироваться, если там нету скринридера, можно потыкать кнопку питания, вероятнее всего телефон будет блямкать звуком выключения экрана, и это будет значить, что первоначальная распаковка случилась, и раздел data инициализировался.
3. Снова загружаемся в twrp.
4. Ждём пока расшифруется раздел data, монтируем систему на запись.
5. Редактируем build.prop, прописывая туда некие строки для включения adb.
6. Подкладываем ключ от adb в раздел data.
7. Грузимся в прошивку, и телефон поднимает авторизованный adb!
Для описанного в шагах 5 и 6 я когда-то написал такой батник:
Этот код монтирует системный раздел, дописывает в build.prop параметры для включения отладки, и подкладывает публичный ключ adb-демона, чтобы adbd на телефоне не требовал авторизацию компьютера при подключении.
Очевидно, что ключ должен быть создан демоном перед данной процедурой, для этого достаточно хотя бы раз воспользоваться adb, или запустить демона командой
Способ работает на относительно старых телефонах без раздела super, но с некоторыми нюансами:
1. Это возможно, если для телефона имеется полноценное управляемое через adb recovery, по типу twrp.
2. Ключ получится подложить только в том случае, если рекавери умеет расшифровывать дата-раздел, с чем частенько бывают проблемы, ну или если в прошивке отключено шифрование.
UPD 2026-05-31, на самом деле батник для копирования ключей написал Бека (gozaltech), забыл упомянуть при написании, исправляюсь.
Данный пост будет интересен тем, кто любит играться с прошивками android-смартфонов, и порой сталкивается с проблемой запуска скринридера при первоначальной настройке, или хочет иметь возможность подключения через adb для любых других действий с прошивкой сразу из коробки.
Никакого кликбейта кстати, adb появляется сразу, при первом старте прошивки.
Ниже изложенный гайд, к сожалению, сыроват, тестировался мной один раз на одном устройстве, и у вас разумеется что-то может не взлететь, но основной принцип я изложу, а дальше, при желании, вы сами сможете докрутить под свою задачу.
Сразу предупреждаю, что гайд подразумевает наличие неких знаний, например об основных принципах работы телефона и его загрузки, о смысле наличия рут-прав и т.п.
Иначе говоря, гайд рассчитан на тех, кто уже немного успел поковыряться с прошивками android-устройств и что-то в этом понимает. В любом случае вы всегда можете задавать вопросы в комментариях, поехали уже наконец.
Начну немного издалека: когда-то, очень много лет назад, телефоны поставлялись с обычной флеш-памятью, размеченной на обычные разделы, в которых вот так прям сразу лежала система.
Система, лежащая в разделе system, конечно была доступна только для чтения, но при наличии рут-прав можно было сделать что-то вроде
mount -o rw,remount /, и системный раздел можно было модифицировать прямо на горячую.В команде выше / сработает на девайсах, где системный раздел монтируется как корневой (system-as-root), у меня был именно такой телефон, насколько мне известно, сейчас так делают все производители прошивок, как стоков, так и кастомов.
На ещё более ранних моделях, которых я в руках не держал, система монтируется в /system, и там перемонтировать нужно именно его, но это сейчас не столь важно.
Более того, при наличии кастомного recovery, например twrp, можно было загрузиться в него, смонтировать систему на запись, и произвести там необходимые манипуляции.
Так вот на подобных устройствах, где ещё не завезли super partition, и все разделы лежат наверху, работает следующая штука:
1. Шьём прошивку, вероятнее всего через twrp.
2. Включаем телефон, даём системе инициализироваться, если там нету скринридера, можно потыкать кнопку питания, вероятнее всего телефон будет блямкать звуком выключения экрана, и это будет значить, что первоначальная распаковка случилась, и раздел data инициализировался.
3. Снова загружаемся в twrp.
4. Ждём пока расшифруется раздел data, монтируем систему на запись.
5. Редактируем build.prop, прописывая туда некие строки для включения adb.
6. Подкладываем ключ от adb в раздел data.
7. Грузимся в прошивку, и телефон поднимает авторизованный adb!
Для описанного в шагах 5 и 6 я когда-то написал такой батник:
adb shell mount -o rw /system_root
adb shell sed -i '$ a\persist.service.adb.enable=1' /system_root/system/build.prop
adb shell sed -i '$ a\persist.service.debuggable=1' /system_root/system/build.prop
adb shell sed -i '$ a\persist.sys.usb.config=mtp,adb' /system_root/system/build.prop
adb push %userprofile%\.android\adbkey.pub /data/misc/adb/adb_keys
Этот код монтирует системный раздел, дописывает в build.prop параметры для включения отладки, и подкладывает публичный ключ adb-демона, чтобы adbd на телефоне не требовал авторизацию компьютера при подключении.
Очевидно, что ключ должен быть создан демоном перед данной процедурой, для этого достаточно хотя бы раз воспользоваться adb, или запустить демона командой
adb start-server.Способ работает на относительно старых телефонах без раздела super, но с некоторыми нюансами:
1. Это возможно, если для телефона имеется полноценное управляемое через adb recovery, по типу twrp.
2. Ключ получится подложить только в том случае, если рекавери умеет расшифровывать дата-раздел, с чем частенько бывают проблемы, ну или если в прошивке отключено шифрование.
UPD 2026-05-31, на самом деле батник для копирования ключей написал Бека (gozaltech), забыл упомянуть при написании, исправляюсь.
👍1
Кодерская мастерская
Включаем adb на любой кастомной прошивке Данный пост будет интересен тем, кто любит играться с прошивками android-смартфонов, и порой сталкивается с проблемой запуска скринридера при первоначальной настройке, или хочет иметь возможность подключения через…
Время шло, инженеры придумали раздел super, придумали новые способы шифрования и разметки, и на новых телефонах способ больше не работает.
Во-первых, система теперь лежит в логическом разделе внутри раздела super. И штука то вроде хорошая, она позволяет производителю более гибко обновлять прошивку, но часто там используется специальная файловая система EROFS (Enhanced Read-Only File System).
Как следует из названия, данная файловая система не подразумевает модификацию после создания, и перемонтировать что-то так просто уже не получится.
В кастомных прошивках, как я понял, используется ext4 внутри super-разделов, и их менять можно, но мне, например, это никак не помогло.
Я имею на руках телефон Poco f6, и то ли он достаточно свежий, то ли индусы обленились, но для этого телефона нет полноценного twrp.
Twrp для poco f6 не умеет монтировать подразделы внутри super на запись, не умеет не то что расшифровывать userdata, а даже монтировать его! Ну и, соответственно, не умеет ставить пакеты в систему.
Всё, что я смог там сделать, это установить magisk, и то он после загрузки в прошивку плевался и крыл рекавери трёхэтажным матом, отказываясь работать без правильной установки, которую, к счастью, он производит самостоятельно.
И так мы имеем комбо, прошивку можно поставить из рекавери, которое поставляется вместе с кастомом, но далее мы не можем модифицировать ни системный раздел, ни userdata.
Рекавери от прошивки, кстати, управляется с кнопок громкости и питания, что позволяет прошиться полностью вслепую, особенно если под рукой есть другой телефон.
С разделом super допустим можно заморочиться, его можно сначала выколупать из прошивки, потом распаковать, далее смонтировать system, внести изменения, заново собрать super и прошить через fastboot.
И, вероятнее всего, даже лазать в раздел userdata не обязательно, т.к., как я понял в build.prop можно прописать параметр, который заставит adbd принимать любой ключ, но я нашёл иной подход.
Подход базируется на возможностях magisk, который позволяет не только выдавать рут-права различным приложениям, но и запускать произвольные скрипты на различных этапах загрузки телефона.
Для начала немного теории:
При загрузке телефона выполняется много интересных этапов, например pbl, brom, abl и т.п., но я пропущу их, ибо во-первых сам плохо разбираюсь в теме, а во-вторых мы работаем на несколько уровней выше, и эта тема сейчас не важна.
Важно, что в какой-то момент у нас запускается ядро, которое что-то там поднимает, монтирует, читает конфиги, и в конечном итоге запускает самый первый, так называемый init-процесс.
init находится в небольшой файловой системе, так называемом ramdisk, который хранится в boot-разделе, и его легко можно прошить через fastboot.
То есть ядро читает и распаковывает в оперативку ramdisk, а затем запускает из него бинарник init.
init запускается с привилегиями root-пользователя, и начинает производить запуск всех остальных процессов, необходимых для работы android.
Разумеется большинство таких процессов запускаются уже без рут-прав, потому что они им не требуются, по крайней мере такова задумка разработчиков.
Если же мы, как пользователи ОС, хотим всё же рут-права получить, тогда и идут в дело инструменты по типу Magisk или kernel su.
Как же работает magisk?
magisk делает очень простую вещь, он патчит ramdisk, внедряется в бинарный файл init, или полностью подменяет его.
Когда ядро запускает init, magisk запускает исходный init, и система загружается как обычно, но также он намеренно оставляет лазейку, через которую преложения, не имеющие рута, могут поднять свои привилегии.
Magisk позволяет добавлять так называемые модули, которые патчат системные файлы, или запускают фоновые скрипты при загрузке устройства.
Однако модули устанавливаются в раздел userdata, поэтому в данном случае они бесполезны.
Но есть у magisk одна интересная фича, которой можно воспользоваться.
Как написал выше, magisk патчит ramdisk, который лежит в отдельном небольшом разделе, и в этот ramdisk можно подложить скрипты, которые будут запущены от рута!
Во-первых, система теперь лежит в логическом разделе внутри раздела super. И штука то вроде хорошая, она позволяет производителю более гибко обновлять прошивку, но часто там используется специальная файловая система EROFS (Enhanced Read-Only File System).
Как следует из названия, данная файловая система не подразумевает модификацию после создания, и перемонтировать что-то так просто уже не получится.
В кастомных прошивках, как я понял, используется ext4 внутри super-разделов, и их менять можно, но мне, например, это никак не помогло.
Я имею на руках телефон Poco f6, и то ли он достаточно свежий, то ли индусы обленились, но для этого телефона нет полноценного twrp.
Twrp для poco f6 не умеет монтировать подразделы внутри super на запись, не умеет не то что расшифровывать userdata, а даже монтировать его! Ну и, соответственно, не умеет ставить пакеты в систему.
Всё, что я смог там сделать, это установить magisk, и то он после загрузки в прошивку плевался и крыл рекавери трёхэтажным матом, отказываясь работать без правильной установки, которую, к счастью, он производит самостоятельно.
И так мы имеем комбо, прошивку можно поставить из рекавери, которое поставляется вместе с кастомом, но далее мы не можем модифицировать ни системный раздел, ни userdata.
Рекавери от прошивки, кстати, управляется с кнопок громкости и питания, что позволяет прошиться полностью вслепую, особенно если под рукой есть другой телефон.
С разделом super допустим можно заморочиться, его можно сначала выколупать из прошивки, потом распаковать, далее смонтировать system, внести изменения, заново собрать super и прошить через fastboot.
И, вероятнее всего, даже лазать в раздел userdata не обязательно, т.к., как я понял в build.prop можно прописать параметр, который заставит adbd принимать любой ключ, но я нашёл иной подход.
Подход базируется на возможностях magisk, который позволяет не только выдавать рут-права различным приложениям, но и запускать произвольные скрипты на различных этапах загрузки телефона.
Для начала немного теории:
При загрузке телефона выполняется много интересных этапов, например pbl, brom, abl и т.п., но я пропущу их, ибо во-первых сам плохо разбираюсь в теме, а во-вторых мы работаем на несколько уровней выше, и эта тема сейчас не важна.
Важно, что в какой-то момент у нас запускается ядро, которое что-то там поднимает, монтирует, читает конфиги, и в конечном итоге запускает самый первый, так называемый init-процесс.
init находится в небольшой файловой системе, так называемом ramdisk, который хранится в boot-разделе, и его легко можно прошить через fastboot.
То есть ядро читает и распаковывает в оперативку ramdisk, а затем запускает из него бинарник init.
init запускается с привилегиями root-пользователя, и начинает производить запуск всех остальных процессов, необходимых для работы android.
Разумеется большинство таких процессов запускаются уже без рут-прав, потому что они им не требуются, по крайней мере такова задумка разработчиков.
Если же мы, как пользователи ОС, хотим всё же рут-права получить, тогда и идут в дело инструменты по типу Magisk или kernel su.
Как же работает magisk?
magisk делает очень простую вещь, он патчит ramdisk, внедряется в бинарный файл init, или полностью подменяет его.
Когда ядро запускает init, magisk запускает исходный init, и система загружается как обычно, но также он намеренно оставляет лазейку, через которую преложения, не имеющие рута, могут поднять свои привилегии.
Magisk позволяет добавлять так называемые модули, которые патчат системные файлы, или запускают фоновые скрипты при загрузке устройства.
Однако модули устанавливаются в раздел userdata, поэтому в данном случае они бесполезны.
Но есть у magisk одна интересная фича, которой можно воспользоваться.
Как написал выше, magisk патчит ramdisk, который лежит в отдельном небольшом разделе, и в этот ramdisk можно подложить скрипты, которые будут запущены от рута!
Кодерская мастерская
Время шло, инженеры придумали раздел super, придумали новые способы шифрования и разметки, и на новых телефонах способ больше не работает. Во-первых, система теперь лежит в логическом разделе внутри раздела super. И штука то вроде хорошая, она позволяет производителю…
Скрипты могут выполнить произвольный код, и включить нам adb.
И так вот примерно как это можно сделать:
Для начала добываем раздел с рамдиском, ранее для загрузки использовался один раздел boot, который содержал и ядро, и ramdisk, в новых девайсах делают два раздела, boot содержит только ядро, а init_boot только ramdisk.
Такой подход позволяет разработчикам прошивок более гибко обновлять ядро и/или ramdisk, в чём проблема обновлять всё сразу я так и не понял, но им виднее.
То есть если в прошивке только boot, он и содержит ramdisk, а если есть init_boot, то рамдиск скорее всего там.
В моём случае всё было именно так, для вашего девайса / прошивки расклад может быть иным.
Разделы с файлами прошивки их авторами запаковываются во всякие интересные форматы, CRDroid на poco f6, например, содержит в себе файлик payload.bin.
Из такого файла разделы можно достать каким-нибудь распаковщиком, я пользовался otadump.
Он шустрый, написан на современном и популярном rust, ну и, собственно, решает поставленную задачу: достаёт разделы из payload.bin.
В доке написано, что прога работает напрямую с zip-файлами, но мне как-то не фартануло, поэтому я извлёк payload с помощью 7zip-а.
Последний релиз с exe-шником был выпущен 2 года назад, возможно zip будет хавать, если руками собрать из последнего коммита, но мне было лень этим заниматься.
Для распаковки выполняем что-то вроде:
init_boot я таким способом конечно извлёк, а через пару недель вдруг выяснил, что для CRDroid он постовляется отдельно, и его можно было просто скачать, пропустив эти увлекательные этапы с поиском распаковщика под винду и извлечением раздела.
Далее нам нужно установить magisk manager на любой телефон, наличие рута и разблокированного загрузчика не обязательно, менеджер нам нужен только для патчинга файла.
Отдельного инструмента, который работал бы на винде или линуксе я не нашёл, есть бинарник, который постовляется вместе с magisk, но он написан на смеси rust с c++, и отделить его для сборки под другую платформу и использования вне рутированного устройства не самая тривиальная задача.
Поэтому самым простым способом является установка менеджера на любой android.
Это можно сделать, даже если у вас всего один телефон, правда у вас не будет права на ошибку, ведь когда вы всё сломаете, и причиной фейла станет неправильно пропатченный рамдиск, патчить заново будет уже нечем, но мне трудно представить сценарий, в котором бут может быть пропатчен неправильно.
Однако файл можно перепутать с другим файлом, перезаписать, потерять, случайно удалить и тп., так что будьте аккуратнее.
Закидываем init_boot.img на телефон с менеджером, запускаем его, жмём на установку, выбираем способ установки - патчинг файла.
Затем выбираем ранее скинутый образ, патчим его, и получаем новый патченный образ, кажется magisk кладёт его рядом с исходным.
Теперь мы можем прошить прошивку, через fastboot зашить init_boot, и получить рутированную систему, но нам нужно сделать немного больше.
Сейчас мы получили образ, который содержит подменённый бинарь init, а также некоторые другие файлы magisk-а.
Для того, чтобы подложить туда кастомные скрипты, образ нужно разобрать.
Я использовал image kitchen, это некий комбайн для модификации прошивок, чего-то более простого, для модификации только рамдисков, я не нашёл.
Точнее модифицировать рамдиски умеет бинарник, поставляемый вместе с magisk, как по мне делать это всё на телефоне через adb будто бы не очень удобно, но если вдруг захочется, то это возможно, и рут вероятно для этого не нужен.
И так вот примерно как это можно сделать:
Для начала добываем раздел с рамдиском, ранее для загрузки использовался один раздел boot, который содержал и ядро, и ramdisk, в новых девайсах делают два раздела, boot содержит только ядро, а init_boot только ramdisk.
Такой подход позволяет разработчикам прошивок более гибко обновлять ядро и/или ramdisk, в чём проблема обновлять всё сразу я так и не понял, но им виднее.
То есть если в прошивке только boot, он и содержит ramdisk, а если есть init_boot, то рамдиск скорее всего там.
В моём случае всё было именно так, для вашего девайса / прошивки расклад может быть иным.
Разделы с файлами прошивки их авторами запаковываются во всякие интересные форматы, CRDroid на poco f6, например, содержит в себе файлик payload.bin.
Из такого файла разделы можно достать каким-нибудь распаковщиком, я пользовался otadump.
Он шустрый, написан на современном и популярном rust, ну и, собственно, решает поставленную задачу: достаёт разделы из payload.bin.
В доке написано, что прога работает напрямую с zip-файлами, но мне как-то не фартануло, поэтому я извлёк payload с помощью 7zip-а.
Последний релиз с exe-шником был выпущен 2 года назад, возможно zip будет хавать, если руками собрать из последнего коммита, но мне было лень этим заниматься.
Для распаковки выполняем что-то вроде:
otadump.exe -o . --partitions init_boot payload.bin
init_boot я таким способом конечно извлёк, а через пару недель вдруг выяснил, что для CRDroid он постовляется отдельно, и его можно было просто скачать, пропустив эти увлекательные этапы с поиском распаковщика под винду и извлечением раздела.
Далее нам нужно установить magisk manager на любой телефон, наличие рута и разблокированного загрузчика не обязательно, менеджер нам нужен только для патчинга файла.
Отдельного инструмента, который работал бы на винде или линуксе я не нашёл, есть бинарник, который постовляется вместе с magisk, но он написан на смеси rust с c++, и отделить его для сборки под другую платформу и использования вне рутированного устройства не самая тривиальная задача.
Поэтому самым простым способом является установка менеджера на любой android.
Это можно сделать, даже если у вас всего один телефон, правда у вас не будет права на ошибку, ведь когда вы всё сломаете, и причиной фейла станет неправильно пропатченный рамдиск, патчить заново будет уже нечем, но мне трудно представить сценарий, в котором бут может быть пропатчен неправильно.
Однако файл можно перепутать с другим файлом, перезаписать, потерять, случайно удалить и тп., так что будьте аккуратнее.
Закидываем init_boot.img на телефон с менеджером, запускаем его, жмём на установку, выбираем способ установки - патчинг файла.
Затем выбираем ранее скинутый образ, патчим его, и получаем новый патченный образ, кажется magisk кладёт его рядом с исходным.
Теперь мы можем прошить прошивку, через fastboot зашить init_boot, и получить рутированную систему, но нам нужно сделать немного больше.
Сейчас мы получили образ, который содержит подменённый бинарь init, а также некоторые другие файлы magisk-а.
Для того, чтобы подложить туда кастомные скрипты, образ нужно разобрать.
Я использовал image kitchen, это некий комбайн для модификации прошивок, чего-то более простого, для модификации только рамдисков, я не нашёл.
Точнее модифицировать рамдиски умеет бинарник, поставляемый вместе с magisk, как по мне делать это всё на телефоне через adb будто бы не очень удобно, но если вдруг захочется, то это возможно, и рут вероятно для этого не нужен.
Кодерская мастерская
Скрипты могут выполнить произвольный код, и включить нам adb. И так вот примерно как это можно сделать: Для начала добываем раздел с рамдиском, ранее для загрузки использовался один раздел boot, который содержал и ядро, и ramdisk, в новых девайсах делают…
Открываем предпочитаемый shell в директории image kitchen (это та, где батники лежат), и запускаем
Файл будет разобран в директорию image kitchen, это не очень удобно на мой взгляд, но так работает инструмент, и в общем-то на один раз сойдёт, а если использовать его часто, то можно под себя батники поправить.
Или можно использовать флаг --local, он как-то посредственно документирован, но как я понял, если добавить его первым аргументом, скрипт распакует образ в текущую рабочую директорию.
После распаковки мы получаем две директории, split_img и ramdisk.
В split_img лежат всякие сервисные файлы, которые используются kitchen-ом для реконструкции образа, а вот в ramdisk находится самое интересное.
Там лежат как раз те папки и файлы, которые получаются при распаковке рамдиска ядром, и мы можем внести нужные изменения.
Изменения нужно внести в директории overlay.d, если её нет в ramdisk, возможно наступил какой-нибудь 2125 год, и magisk больше не создаёт её, или вы распаковали не тот образ.
И так, magisk умеет запускать из overlay.d скрипты, которые пишутся на Android Init Language, в них можно использовать ограниченный набор команд, однако нам хватит его.
В теории можно из такого скрипта запустить полноценный sh скрипт, или любой другой бинарник, но там есть какие-то нюансы с se linux, с которыми я не стал разбираться, и пошёл по простому пути.
По сути нам нужно сделать всё те же две вещи, включить adb, и прописать наш публичный ключ.
Создаём в overlay.d файл custom.rc, и пишем в нём:
Вместо your-public-adbkey нужно подставить содержимое файла с публичным ключом, а точнее первую и единственную строку из него.
В винде ключ лежит по адресу
В конце строки после пробела указано имя компьютера и имя пользователя, который создал ключ, они как правило опциональны, и я не копировал его в rc-файл, чтобы получить аргумент без пробелов.
Из документации по этому мини-языку не очень понятно, как именно команда write относится к пробелам, поэтому я перестраховался, скорее всего она выполнится при любом варианте.
В общем этот скрипт устанавливает системные свойства для включения adb, пишет ключ в userdata и устанавливает права на него (без них не взлетит).
Триггер boot, по которому выполняются эти команды, срабатывает в самом конце последовательности загрузки, когда раздел data уже расшифрован и готов к записи.
После добавления файла, ramdisk нужно запаковать обратно, это можно сделать запустив
Он зачем-то запрашивает админские права, это единственное, что не нравится мне в image kitchen. Возможно там при распаковке на некоторые файлы выставляются права, с которыми при упаковке они не читаются, звучит сомнительно, но других теорий у меня нет.
После упаковки получаем файл ramdisk-new.cpio.lz4 - это чистый ramdisk, он нам не нужен, а также image-new.img, и это наш теперь уже дважды патченный образ.
На этом этапе всё готово к прошивке, берём, допустим, рекавери от вендора, зашиваем прошивку как положено.
Затем грузимся в fastboot, шьём в init_boot файл image-new.img.
И наконец загружаемся в прошивку, которая, если ничего не сломалось, успешно инициализируется и поднимет adbd, который с радостью пустит нас в систему.
unpackimg.bat с путём до патченного образа.Файл будет разобран в директорию image kitchen, это не очень удобно на мой взгляд, но так работает инструмент, и в общем-то на один раз сойдёт, а если использовать его часто, то можно под себя батники поправить.
Или можно использовать флаг --local, он как-то посредственно документирован, но как я понял, если добавить его первым аргументом, скрипт распакует образ в текущую рабочую директорию.
После распаковки мы получаем две директории, split_img и ramdisk.
В split_img лежат всякие сервисные файлы, которые используются kitchen-ом для реконструкции образа, а вот в ramdisk находится самое интересное.
Там лежат как раз те папки и файлы, которые получаются при распаковке рамдиска ядром, и мы можем внести нужные изменения.
Изменения нужно внести в директории overlay.d, если её нет в ramdisk, возможно наступил какой-нибудь 2125 год, и magisk больше не создаёт её, или вы распаковали не тот образ.
И так, magisk умеет запускать из overlay.d скрипты, которые пишутся на Android Init Language, в них можно использовать ограниченный набор команд, однако нам хватит его.
В теории можно из такого скрипта запустить полноценный sh скрипт, или любой другой бинарник, но там есть какие-то нюансы с se linux, с которыми я не стал разбираться, и пошёл по простому пути.
По сути нам нужно сделать всё те же две вещи, включить adb, и прописать наш публичный ключ.
Создаём в overlay.d файл custom.rc, и пишем в нём:
on boot
setprop persist.service.adb.enable 1
setprop persist.service.debuggable 1
setprop persist.sys.usb.config adb
write /data/misc/adb/adb_keys your-public-adbkey
chmod 0640 /data/misc/adb/adb_keys
chown 1000 2000 /data/misc/adb/adb_keys
Вместо your-public-adbkey нужно подставить содержимое файла с публичным ключом, а точнее первую и единственную строку из него.
В винде ключ лежит по адресу
c:\Users\user\.android\adbkey.pub.В конце строки после пробела указано имя компьютера и имя пользователя, который создал ключ, они как правило опциональны, и я не копировал его в rc-файл, чтобы получить аргумент без пробелов.
Из документации по этому мини-языку не очень понятно, как именно команда write относится к пробелам, поэтому я перестраховался, скорее всего она выполнится при любом варианте.
В общем этот скрипт устанавливает системные свойства для включения adb, пишет ключ в userdata и устанавливает права на него (без них не взлетит).
Триггер boot, по которому выполняются эти команды, срабатывает в самом конце последовательности загрузки, когда раздел data уже расшифрован и готов к записи.
После добавления файла, ramdisk нужно запаковать обратно, это можно сделать запустив
repackimg.bat.Он зачем-то запрашивает админские права, это единственное, что не нравится мне в image kitchen. Возможно там при распаковке на некоторые файлы выставляются права, с которыми при упаковке они не читаются, звучит сомнительно, но других теорий у меня нет.
После упаковки получаем файл ramdisk-new.cpio.lz4 - это чистый ramdisk, он нам не нужен, а также image-new.img, и это наш теперь уже дважды патченный образ.
На этом этапе всё готово к прошивке, берём, допустим, рекавери от вендора, зашиваем прошивку как положено.
Затем грузимся в fastboot, шьём в init_boot файл image-new.img.
И наконец загружаемся в прошивку, которая, если ничего не сломалось, успешно инициализируется и поднимет adbd, который с радостью пустит нас в систему.
Кодерская мастерская
Открываем предпочитаемый shell в директории image kitchen (это та, где батники лежат), и запускаем unpackimg.bat с путём до патченного образа. Файл будет разобран в директорию image kitchen, это не очень удобно на мой взгляд, но так работает инструмент, и…
Ну а там уж ставим talkback, синтезатор, включаем это дело, и в бой!
Сделать это можно примерно так:
Если в системе нет синтов, то достаточно поставить google tts, apk-шку которого можно найти на просторах интернета, должно само взлететь либо сразу, либо после ребута.
а если хочется что-то своё, то переключить можно так:
То есть значением переменной tts_default_synth нужно сделать имя пакета приложения синта. В примере я использовал espeak, но пока его заведёшь телефон настраивать дальше уже не захочется, поэтому лучше ставить что-то более стабильное.
Если по какой-то причине рут вам не нужен, после настройки достаточно прошить стоковый init_boot, adb, скорее всего, получится отключить стандартными средствами через ui.
Материалы по теме:
otadump: (https://github.com/crazystylus/otadump)
Тред по image kitchen, там же можно скачать его: https://xdaforums.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/
magisk developer guide (тут можно почитать про возможности magisk в целом, и про overlay в частности): https://topjohnwu.github.io/Magisk/guides.html
magisk tools (документация по поставляемым с magisk бинарникам, для перепаковки образов применяется утилита magiskboot): https://topjohnwu.github.io/Magisk/tools.html
Android Init Language: https://android.googlesource.com/platform/system/core/+/master/init/README.md
Сделать это можно примерно так:
adb shell settings put secure touch_exploration_enabled 1
adb shell settings put secure enabled_accessibility_services com.google.android.marvin.talkback/com.google.android.marvin.talkback.TalkBackService
Если в системе нет синтов, то достаточно поставить google tts, apk-шку которого можно найти на просторах интернета, должно само взлететь либо сразу, либо после ребута.
а если хочется что-то своё, то переключить можно так:
settings put secure tts_default_synth com.reecedunn.espeak
То есть значением переменной tts_default_synth нужно сделать имя пакета приложения синта. В примере я использовал espeak, но пока его заведёшь телефон настраивать дальше уже не захочется, поэтому лучше ставить что-то более стабильное.
Если по какой-то причине рут вам не нужен, после настройки достаточно прошить стоковый init_boot, adb, скорее всего, получится отключить стандартными средствами через ui.
Материалы по теме:
otadump: (https://github.com/crazystylus/otadump)
Тред по image kitchen, там же можно скачать его: https://xdaforums.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/
magisk developer guide (тут можно почитать про возможности magisk в целом, и про overlay в частности): https://topjohnwu.github.io/Magisk/guides.html
magisk tools (документация по поставляемым с magisk бинарникам, для перепаковки образов применяется утилита magiskboot): https://topjohnwu.github.io/Magisk/tools.html
Android Init Language: https://android.googlesource.com/platform/system/core/+/master/init/README.md
GitHub
GitHub - crazystylus/otadump: Extract partitions from Android OTA files.
Extract partitions from Android OTA files. Contribute to crazystylus/otadump development by creating an account on GitHub.
Кодерская мастерская
Снова докатилась, что думаете?
Ну что ж, с, кажется, четвёртого раза 24h2 всё же поставилась, занял этот процесс минут 40, за это время я бы вручную её воткнул с нуля, ещё бы и чай успел попить, ну да ладно.
После обновления она почему-то удалила с рабочего стола ярлык на Crazy party, а ещё решила, что 80 гигов на c ей мало, и без моего ведома включила сжатие системных файлов.
А ещё она решила, что на моём отдельном разделе с личными файлами самое место для временной папки на 5 гигов, которую удалять сама она не собирается.
ВОзможно это потому, что места свободного на ц действительно маловато, но ей бы хватило с запасом.
А, ну и чтобы я не расслаблялся, она изменила настройки bluetooth, и у меня отвалилась клавиатура, пришлось идти 5 метров до ноутбука и чинить, полезная фича в общем-то, позволяет сделать добровольно принудительную зарядку.
Конечно же есть ещё 100500 багов, которые не успел найти за первые 5 часов, поэтому о них как-нибудь в другой раз.
После обновления она почему-то удалила с рабочего стола ярлык на Crazy party, а ещё решила, что 80 гигов на c ей мало, и без моего ведома включила сжатие системных файлов.
А ещё она решила, что на моём отдельном разделе с личными файлами самое место для временной папки на 5 гигов, которую удалять сама она не собирается.
ВОзможно это потому, что места свободного на ц действительно маловато, но ей бы хватило с запасом.
А, ну и чтобы я не расслаблялся, она изменила настройки bluetooth, и у меня отвалилась клавиатура, пришлось идти 5 метров до ноутбука и чинить, полезная фича в общем-то, позволяет сделать добровольно принудительную зарядку.
Конечно же есть ещё 100500 багов, которые не успел найти за первые 5 часов, поэтому о них как-нибудь в другой раз.
🔥1
Я провалил тест от hh на базовое знание python, на два вопроса из 10 ответил не верно, последние два просрал по времени, и того 6 из 10, причём неверные не показываются, что, на мой взгляд, дичь какая-то.
На сегодня пока всё, скоро пост про установку ubuntu по сети.
На сегодня пока всё, скоро пост про установку ubuntu по сети.
Char Desc Merge
На днях сделал аддон для nvda, и забыл о нём написать. Исправляюсь.
Char Desc Merge - это дополнение, которое позволяет добавить в любую локаль nvda описания символов из любой другой локали nvda.
Объясню на примере, допустим вы используете английскую nvda, и читаете русский текст. Если попытаться получить описание буквы а, мы должны получить слово "Анна", но этого не происходит.
Так случается потому, что nvda ищет описания только для текущей, а затем для английской локали, то есть если локаль русская, то проверяются русские и английские символы, если локаль французская, то французские и английские, хотя у них у всех латиница вроде... Ну в общем вы поняли.
Дополнение решает эту проблему, его настройки встраиваются в настройки nvda, единственная опция - список флажков, в котором нужно отметить локали, и nvda станет искать описания символов в словарях выбранных локалей.
Аддон можно найти в магазине дополнений, он размещён в канале dev.
Издатель addonWorkshop - это я, все мои аддоны будут размещаться от этого имени, так сделано для решения технических проблем с автоматизацией выкладки аддонов в магазин.
А ещё не путайте с addonFactory, это уже не я, это Бека AKA Gozaltech, но его аддоны тоже заслуживают внимания.
Кстати Могу рассказать про автоматизацию публикации дополнений, пишите в комменты, интересна ли вам эта тема.
На днях сделал аддон для nvda, и забыл о нём написать. Исправляюсь.
Char Desc Merge - это дополнение, которое позволяет добавить в любую локаль nvda описания символов из любой другой локали nvda.
Объясню на примере, допустим вы используете английскую nvda, и читаете русский текст. Если попытаться получить описание буквы а, мы должны получить слово "Анна", но этого не происходит.
Так случается потому, что nvda ищет описания только для текущей, а затем для английской локали, то есть если локаль русская, то проверяются русские и английские символы, если локаль французская, то французские и английские, хотя у них у всех латиница вроде... Ну в общем вы поняли.
Дополнение решает эту проблему, его настройки встраиваются в настройки nvda, единственная опция - список флажков, в котором нужно отметить локали, и nvda станет искать описания символов в словарях выбранных локалей.
Аддон можно найти в магазине дополнений, он размещён в канале dev.
Издатель addonWorkshop - это я, все мои аддоны будут размещаться от этого имени, так сделано для решения технических проблем с автоматизацией выкладки аддонов в магазин.
А ещё не путайте с addonFactory, это уже не я, это Бека AKA Gozaltech, но его аддоны тоже заслуживают внимания.
Кстати Могу рассказать про автоматизацию публикации дополнений, пишите в комменты, интересна ли вам эта тема.
👍2
На случай если кто-то ещё безусловно верит ИИ, вот очередной пример его факапа.
Пишу я значит некую быстрописную штуку, которую надо сделать, использовать полтора раза и забыть про неё навсегда.
Решил использовать библиотеку requests, хочу задать дефолтный таймаут, vscode не очень торопится мне подсказывать.
Пытаюсь быстренько нарыть что-то в исходниках, и всё выглядит так, будто timeout в Session передать нельзя.
При попытке загуглить получаю сгенерированный ИИ ответ, что мол сетни в сессию атрибут timeout, и оно полетит.
Разумеется я не поверил, и провёл элементарнейший тест:
Не работает! А почему?
А потому что мы снова оказались в дивном новом мире галлюцинаций, точнее не мы, а ии, и не оказался, а всегда там был.
На всякий случай я использовал документированный способ, и всё сработало как надо.
Такие дела. Перепроверяйте ИИ.
Пишу я значит некую быстрописную штуку, которую надо сделать, использовать полтора раза и забыть про неё навсегда.
Решил использовать библиотеку requests, хочу задать дефолтный таймаут, vscode не очень торопится мне подсказывать.
Пытаюсь быстренько нарыть что-то в исходниках, и всё выглядит так, будто timeout в Session передать нельзя.
При попытке загуглить получаю сгенерированный ИИ ответ, что мол сетни в сессию атрибут timeout, и оно полетит.
Разумеется я не поверил, и провёл элементарнейший тест:
>>> s=requests.Session()
>>> s.timeout=0.0001
>>> s.get('https://danstiv.ru')
<Response [200]>
Не работает! А почему?
А потому что мы снова оказались в дивном новом мире галлюцинаций, точнее не мы, а ии, и не оказался, а всегда там был.
На всякий случай я использовал документированный способ, и всё сработало как надо.
>>> s.get('https://danstiv.ru', timeout=0.0001)
Traceback (most recent call last):
...
...
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='danstiv.ru', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x000002E3BC7E62A0>, 'Connection to danstiv.ru timed out. (connect timeout=0.0001)'))
Такие дела. Перепроверяйте ИИ.
Мне приснилась Джанга для девопсов:
2 или более участников логинятся на сервак, и по очереди выбивают процессы, кто уронил систему, тот проиграл.
Теперь мне непонятно одно: я это где-то прочитал и забыл, или на самом деле подсознание с нуля сгенерировало?..
2 или более участников логинятся на сервак, и по очереди выбивают процессы, кто уронил систему, тот проиграл.
Теперь мне непонятно одно: я это где-то прочитал и забыл, или на самом деле подсознание с нуля сгенерировало?..
👍2🔥1🤣1
Производители ноутбуков придумывают красивые и удобные страницы загрузки драйверов, кладут к ним специально написанные инсталляторы, которые проводят пользователя по всем шагам, сами поднимают привилегии до админа, сами предлагают перезагрузить винду и тому подобное.
Тем временем Infinix:
Да, вместе с драйвером поставляется простейший как палка батник, пользователь сам разберётся, что с ним делать 🙂
Да ещё и драйвера скачиваются с какого-то файлового хранилища средней всратости, спасибо, что скорость нормальная, и рекламу смотреть не надо.
PS:
Это всё не хорошо и не плохо, просто мне показалось интересным, главное, что дрова можно найти и скачать без танцев с бубном, в случае с каким нибудь чуви, например, всё гораздо веселее.
Тем временем Infinix:
cd /d "%~dp0"
pnputil /add-driver *.inf /subdirs /install
Да, вместе с драйвером поставляется простейший как палка батник, пользователь сам разберётся, что с ним делать 🙂
Да ещё и драйвера скачиваются с какого-то файлового хранилища средней всратости, спасибо, что скорость нормальная, и рекламу смотреть не надо.
PS:
Это всё не хорошо и не плохо, просто мне показалось интересным, главное, что дрова можно найти и скачать без танцев с бубном, в случае с каким нибудь чуви, например, всё гораздо веселее.
Установка Ubuntu через интернет
В этом гайде рассмотрен процесс установки ОС Ubuntu через интернет, подразумевается, что для повторения ниже описанного вы должны что-то понимать в линуксе и устройстве интернета.
Для чего это нужно?
Во-первых, в серверной убунте отсутствует скринридер из коробки, поэтому вслепую, традиционными методами её не поставить.
Можно вместо серверной ставить десктопную, но она заметно больше, и для некоторых сборок с малым размером хранилища это может быть критично.
Чистить систему от лишних пакетов после установки можно, но удовольствие сомнительное.
Во-вторых, Этот способ полезен, если нужно установить систему на машину без монитора и/или динамиков, тут даже наличие скринридера не поможет.
Почему ubuntu?
Лично я привык к этой системе, она кажется мне более дружественной и удобной по сравнению с debian, другие дистрибутивы не пробовал, я то ли слижком молод, то ли слижком стар для этого.
Также в ней встроен инструмент cloudinit, с помощью которого и производится сетевая установка, насчёт других дистрибутивов не в курсе, ибо ubuntu для меня - как раз то что нужно, и дальше я эту тему не стал исследовать.
В создании данного материала принимал широко известный в узких кругах Бека (aka Gozaltech), за что ему большое спасибо.
Бека слишком ле... слишком занят для того, чтобы выплёскивать в интернет тысячи буковок, поэтому пост пишется и публикуется мной, а Бека потом репостнёт его к себе.
Кстати можете подписаться на его канал, направленность техническая, посты выходят достаточно редко, выкладываются аддоны для nvda, различные продукты для android и т.п.
И так краткий обзор:
1. В инсталлятор серверной ubuntu подкладывается конфиг.
2. Ubuntu стартует, cloudinit вычитывает конфиг и поднимает ssh-сервер.
3. При подключении к ssh открывается псевдографический интерфейс, из которого можно выполнить установку системы или произвести восстановительные операции.
Выглядит просто, но на деле есть несколько нюансов:
1. cloudinit может не прочитать конфиг, если он неправильно передан.
2. ssh может неправильно сконфигурироваться.
3. Ну и самое главное, есть тысяча и одна причина, по которой может не подняться интернет.
То есть я опишу, что сработало у меня, но не факт, что вы сможете повторить с первого раза на своём оборудовании.
Начну с того, что никакого wi-fi, даже не думайте об этом.
Дело в том, что как-минимум нельзя заставить cloudinit поднять первый попавшийся wlan интерфейс, нужно точно знать его имя.
Может есть какая-то методика, по которой реально определить имя адаптера, у ядра ведь есть некие правила именования устройств, но в эту тему я не погружался, потому что помимо того, что нужно знать имя интерфейса, так ещё далеко не факт, что система в принципе умеет работать с вашим адаптером.
Или более новая, например ubuntu 24.04, будет видеть адаптер, а 22-я уже не будет, в моём случае так и было.
Поэтому тему подключения по wi-fi я не рассматриваю, только через ethernet, ну и будет бонусная часть для извращенцев с подключением через телефон, выступающий в роли модема.
В этом гайде рассмотрен процесс установки ОС Ubuntu через интернет, подразумевается, что для повторения ниже описанного вы должны что-то понимать в линуксе и устройстве интернета.
Для чего это нужно?
Во-первых, в серверной убунте отсутствует скринридер из коробки, поэтому вслепую, традиционными методами её не поставить.
Можно вместо серверной ставить десктопную, но она заметно больше, и для некоторых сборок с малым размером хранилища это может быть критично.
Чистить систему от лишних пакетов после установки можно, но удовольствие сомнительное.
Во-вторых, Этот способ полезен, если нужно установить систему на машину без монитора и/или динамиков, тут даже наличие скринридера не поможет.
Почему ubuntu?
Лично я привык к этой системе, она кажется мне более дружественной и удобной по сравнению с debian, другие дистрибутивы не пробовал, я то ли слижком молод, то ли слижком стар для этого.
Также в ней встроен инструмент cloudinit, с помощью которого и производится сетевая установка, насчёт других дистрибутивов не в курсе, ибо ubuntu для меня - как раз то что нужно, и дальше я эту тему не стал исследовать.
В создании данного материала принимал широко известный в узких кругах Бека (aka Gozaltech), за что ему большое спасибо.
Бека слишком ле... слишком занят для того, чтобы выплёскивать в интернет тысячи буковок, поэтому пост пишется и публикуется мной, а Бека потом репостнёт его к себе.
Кстати можете подписаться на его канал, направленность техническая, посты выходят достаточно редко, выкладываются аддоны для nvda, различные продукты для android и т.п.
И так краткий обзор:
1. В инсталлятор серверной ubuntu подкладывается конфиг.
2. Ubuntu стартует, cloudinit вычитывает конфиг и поднимает ssh-сервер.
3. При подключении к ssh открывается псевдографический интерфейс, из которого можно выполнить установку системы или произвести восстановительные операции.
Выглядит просто, но на деле есть несколько нюансов:
1. cloudinit может не прочитать конфиг, если он неправильно передан.
2. ssh может неправильно сконфигурироваться.
3. Ну и самое главное, есть тысяча и одна причина, по которой может не подняться интернет.
То есть я опишу, что сработало у меня, но не факт, что вы сможете повторить с первого раза на своём оборудовании.
Начну с того, что никакого wi-fi, даже не думайте об этом.
Дело в том, что как-минимум нельзя заставить cloudinit поднять первый попавшийся wlan интерфейс, нужно точно знать его имя.
Может есть какая-то методика, по которой реально определить имя адаптера, у ядра ведь есть некие правила именования устройств, но в эту тему я не погружался, потому что помимо того, что нужно знать имя интерфейса, так ещё далеко не факт, что система в принципе умеет работать с вашим адаптером.
Или более новая, например ubuntu 24.04, будет видеть адаптер, а 22-я уже не будет, в моём случае так и было.
Поэтому тему подключения по wi-fi я не рассматриваю, только через ethernet, ну и будет бонусная часть для извращенцев с подключением через телефон, выступающий в роли модема.
Telegram
Gozaltech blog
technoblog of Beka Gozalishvili AKA Gozaltech.
If you wish to make a donation, You can do it in the following ways:
https://yoomoney.ru/to/410011582597271
https://paypal.me/gozaltech
If you wish to make a donation, You can do it in the following ways:
https://yoomoney.ru/to/410011582597271
https://paypal.me/gozaltech
Кодерская мастерская
Установка Ubuntu через интернет В этом гайде рассмотрен процесс установки ОС Ubuntu через интернет, подразумевается, что для повторения ниже описанного вы должны что-то понимать в линуксе и устройстве интернета. Для чего это нужно? Во-первых, в серверной…
Часть первая: самый простой и тривиальный кейс установки.
Имеется некая headless машина, на которую нужно установить серверную убунту, машина подключена к маршрутизатору патчкордом, ей выдаётся статический адрес.
Статика не обязательна, но лучше, когда она есть, в таком случае мы знаем и ip, и порт, а следовательно можем сразу тыкаться туда, когда запустим это дело, и понимать, живая ли система.
В случае же, когда dhcp отдаёт динамический адрес, сначала нужно будет искать новую аренду в роутере, что немного усложнит задачу.
Для начала качаем релиз убунты, я тестил 20, 22 и 24, с 18 в теории должно сработать, но мне за эти гайды никто не платит, и вообще у неё основная поддержка закончилась, поэтому нафиг надо.
Удобно можно скачать с releases.ubuntu.com, там нужно выбрать релиз, а затем лайв-сервер, например
Файл раскатываем на флешку, после чего нужно добавить конфиг.
В корне флешки создайте директорию
В директории
Рядом с ним ещё один файл:
Не удаляйте комментарий
Уже не вспомню, почему именно такой набор параметров, ибо вопросом этим задавался ещё пару лет назад, читал много разных статей на разных ресурсах, но будто бы с таким конфигом всё работает.
Общий смысл такой, этим конфигом включается ssh и задаётся пароль от него.
Конфиг положили, теперь нужно отредактировать файл boot/grub/grub.cfg
В нём нужно найти строчку с ядром и его параметрами, она задаётся командой linux.
Выглядит примерно так:
Для того, чтобы nocloud понял, откуда ему читать конфиг, нужно указать его параметром ядра.
Есть и другие способы, но этот для нашей задачи самый простой.
Параметр такой: ds=nocloud\;s=/cdrom/nocloud/
Бэкслэш перед точкой с запятой нужен для её экранирования, т.к. grub воспринимает её по-своему.
Таким образом строка принимает вид:
Почему там иногда 2 пробела, и зачем 3 дефиса в конце я фиг его знает, но на всякий случай ничего не трогал.
В файле grub.cfg от 20 ubuntu есть параметр quite, и почему-то, когда он есть, cloudinit некорректно инициализируется (ssh поднимается, но пароль не подходит), если будете ставить и столкнётесь с этим, просто удалите quite из cmdline.
А также я отчётливо помню, что пару лет назад система не ставилась, ругаясь на несовпадение контрольных сумм.
Воспроизвести мне это не удалось, но если у вас возникнет такая ошибка, то пересчитайте md5 для grub.cfg, и обновите её в файле md5sum.txt.
А на этом неожиданно всё, можно сохранять файл, загружать машину с флешки (у вас должен быть какой-то способ это сделать), и запускать систему.
После запуска в течение нескольких минут должен подняться ssh сервер, зайдя на который под юзером installer можно будет выполнить установку в псевдографическом интерфейсе subiquity.
Пример:
Про работу в этом интерфейсе со скринридером я расскажу в конце поста, но заранее предупреждаю, что он достаточно блевотный, и по-хорошему по нему надо аудиогайд писать.
Имеется некая headless машина, на которую нужно установить серверную убунту, машина подключена к маршрутизатору патчкордом, ей выдаётся статический адрес.
Статика не обязательна, но лучше, когда она есть, в таком случае мы знаем и ip, и порт, а следовательно можем сразу тыкаться туда, когда запустим это дело, и понимать, живая ли система.
В случае же, когда dhcp отдаёт динамический адрес, сначала нужно будет искать новую аренду в роутере, что немного усложнит задачу.
Для начала качаем релиз убунты, я тестил 20, 22 и 24, с 18 в теории должно сработать, но мне за эти гайды никто не платит, и вообще у неё основная поддержка закончилась, поэтому нафиг надо.
Удобно можно скачать с releases.ubuntu.com, там нужно выбрать релиз, а затем лайв-сервер, например
ubuntu-24.04.2-live-server-amd64.iso.Файл раскатываем на флешку, после чего нужно добавить конфиг.
В корне флешки создайте директорию
nocloud.В директории
nocloud создайте пустой файл meta-dataРядом с ним ещё один файл:
user-data, в него нужно прописать конфиг:#cloud-config
password: rkbfc3465
ssh_pwauth: true
chpasswd:
expire: False
Не удаляйте комментарий
#cloud-config! Без него не взлетит!Уже не вспомню, почему именно такой набор параметров, ибо вопросом этим задавался ещё пару лет назад, читал много разных статей на разных ресурсах, но будто бы с таким конфигом всё работает.
Общий смысл такой, этим конфигом включается ssh и задаётся пароль от него.
Конфиг положили, теперь нужно отредактировать файл boot/grub/grub.cfg
В нём нужно найти строчку с ядром и его параметрами, она задаётся командой linux.
Выглядит примерно так:
linux /casper/vmlinuz ---Для того, чтобы nocloud понял, откуда ему читать конфиг, нужно указать его параметром ядра.
Есть и другие способы, но этот для нашей задачи самый простой.
Параметр такой: ds=nocloud\;s=/cdrom/nocloud/
Бэкслэш перед точкой с запятой нужен для её экранирования, т.к. grub воспринимает её по-своему.
Таким образом строка принимает вид:
linux /casper/vmlinuz ds=nocloud\;s=/cdrom/nocloud/ ---Почему там иногда 2 пробела, и зачем 3 дефиса в конце я фиг его знает, но на всякий случай ничего не трогал.
В файле grub.cfg от 20 ubuntu есть параметр quite, и почему-то, когда он есть, cloudinit некорректно инициализируется (ssh поднимается, но пароль не подходит), если будете ставить и столкнётесь с этим, просто удалите quite из cmdline.
А также я отчётливо помню, что пару лет назад система не ставилась, ругаясь на несовпадение контрольных сумм.
Воспроизвести мне это не удалось, но если у вас возникнет такая ошибка, то пересчитайте md5 для grub.cfg, и обновите её в файле md5sum.txt.
А на этом неожиданно всё, можно сохранять файл, загружать машину с флешки (у вас должен быть какой-то способ это сделать), и запускать систему.
После запуска в течение нескольких минут должен подняться ssh сервер, зайдя на который под юзером installer можно будет выполнить установку в псевдографическом интерфейсе subiquity.
Пример:
ssh installer@192.168.0.123Про работу в этом интерфейсе со скринридером я расскажу в конце поста, но заранее предупреждаю, что он достаточно блевотный, и по-хорошему по нему надо аудиогайд писать.
Кодерская мастерская
Часть первая: самый простой и тривиальный кейс установки. Имеется некая headless машина, на которую нужно установить серверную убунту, машина подключена к маршрутизатору патчкордом, ей выдаётся статический адрес. Статика не обязательна, но лучше, когда она…
Часть вторая: установка на сервер.
Бывают редкие ситуации, когда нет доступа к серверной панели, или после переустановки пароль хостер высылает на почту, к которой нет доступа.
Также сервер может быть не арендованным, а стоять в каком-то офисе, физический доступ к нему в моменте может отсутствовать, а систему нужно переставить вот прям уже вчера.
В таком случае можно переустановить систему в обход панели управления, пользуясь тем, что установлено на борту сейчас.
Конечно если система уже мёртвая, сделать с этим ничего не получится, но если сервер функционирует, провернуть нижеописанное вполне возможно.
Чтобы загрузиться в установщик нужно, чтобы у вашей системы было собственное ядро, т.е. OpenVz пролетает.
Запустить установку на сервере в чём-то даже проще, чем на собственной headless машине, ибо сеть там уже настроена, и скорее всего заработает из коробки.
Сложность только в том, что флешку в сервер не воткнуть, и нужно как-то модифицировать iso-файл.
Раскурив с пяток статей я понял, что задача перепаковки iso достаточно муторная и не самая тривиальная, так как человечество изобрело слишком много видов загрузчиков, и если что-то не учесть, можно получить нерабочий iso-файл.
Или же на вашей машине с UEFI он загрузится, а на другой, с легаси, не полетит.
Все тесты, кстати, я проводил именно с UEFI машинами, если будете повторять это на старом железе, возможно вылезут неучтённые мной нюансы, желаю вам хорошенько повеселиться с их решением.
И так пересобирать iso не очень хочется, но когда он станет загружаться, по-любому в какой-то момент будет загружено ядро, и в него совершенно точно можно передать какие-то параметры.
Cloudinit умеет считывать конфигурацию из параметров ядра, но будто бы это не относится к user-data.
Всё, что удалось найти в документации: "On the kernel command line, anything found between cc: and end_cc will be interpreted as cloud-config user-data."
В каком формате должна быть user-data, какие ограничения или особенности абсолютно непонятно, и нет ни единого примера.
Но в процессе гугления я нашёл исходник cloudinit парсера командной строки ядра, и в нём как раз разбирается конфиг между cc и end_cc.
Оказалось, что содержимое user-data нужно закодировать в percent-encoding, и поместить между токенами cc и end_cc.
Окей, мы можем передать user-data с настройками ssh, но как же это сделать?
Для загрузки iso-образа можно воспользоваться grub, в котором нужно создать новую menu entry.
И не забывайте о том, что вы ставитесь не с флешки, то есть образ нужно положить на тот раздел, который не будет затронут в процессе установки.
Если в сервере один диск, и он полностью отдан под систему, можно уменьшить файловую систему и под iso-файл сделать маленький раздел, после переустановки его можно будет удалить, и расширить системный раздел обратно.
Допустим вы скачали iso-файл установщика ubuntu и положили его на отдельный раздел, теперь нужно создать menuentry.
Для этого существует файл /etc/grub.d/40_custom, в который нужно добавить примерно следующее:
Вместо abc123 вам нужно задать идентификатор файловой системы в которой лежит iso, его можно получить с помощью dumpe2fs или blkid.
grub сам найдёт раздел, в котором лежит fs, и будет использовать её как root.
Также нужно поменять путь до iso-файла, затем сохранить файл и выполнить
Бывают редкие ситуации, когда нет доступа к серверной панели, или после переустановки пароль хостер высылает на почту, к которой нет доступа.
Также сервер может быть не арендованным, а стоять в каком-то офисе, физический доступ к нему в моменте может отсутствовать, а систему нужно переставить вот прям уже вчера.
В таком случае можно переустановить систему в обход панели управления, пользуясь тем, что установлено на борту сейчас.
Конечно если система уже мёртвая, сделать с этим ничего не получится, но если сервер функционирует, провернуть нижеописанное вполне возможно.
Чтобы загрузиться в установщик нужно, чтобы у вашей системы было собственное ядро, т.е. OpenVz пролетает.
Запустить установку на сервере в чём-то даже проще, чем на собственной headless машине, ибо сеть там уже настроена, и скорее всего заработает из коробки.
Сложность только в том, что флешку в сервер не воткнуть, и нужно как-то модифицировать iso-файл.
Раскурив с пяток статей я понял, что задача перепаковки iso достаточно муторная и не самая тривиальная, так как человечество изобрело слишком много видов загрузчиков, и если что-то не учесть, можно получить нерабочий iso-файл.
Или же на вашей машине с UEFI он загрузится, а на другой, с легаси, не полетит.
Все тесты, кстати, я проводил именно с UEFI машинами, если будете повторять это на старом железе, возможно вылезут неучтённые мной нюансы, желаю вам хорошенько повеселиться с их решением.
И так пересобирать iso не очень хочется, но когда он станет загружаться, по-любому в какой-то момент будет загружено ядро, и в него совершенно точно можно передать какие-то параметры.
Cloudinit умеет считывать конфигурацию из параметров ядра, но будто бы это не относится к user-data.
Всё, что удалось найти в документации: "On the kernel command line, anything found between cc: and end_cc will be interpreted as cloud-config user-data."
В каком формате должна быть user-data, какие ограничения или особенности абсолютно непонятно, и нет ни единого примера.
Но в процессе гугления я нашёл исходник cloudinit парсера командной строки ядра, и в нём как раз разбирается конфиг между cc и end_cc.
Оказалось, что содержимое user-data нужно закодировать в percent-encoding, и поместить между токенами cc и end_cc.
Окей, мы можем передать user-data с настройками ssh, но как же это сделать?
Для загрузки iso-образа можно воспользоваться grub, в котором нужно создать новую menu entry.
И не забывайте о том, что вы ставитесь не с флешки, то есть образ нужно положить на тот раздел, который не будет затронут в процессе установки.
Если в сервере один диск, и он полностью отдан под систему, можно уменьшить файловую систему и под iso-файл сделать маленький раздел, после переустановки его можно будет удалить, и расширить системный раздел обратно.
Допустим вы скачали iso-файл установщика ubuntu и положили его на отдельный раздел, теперь нужно создать menuentry.
Для этого существует файл /etc/grub.d/40_custom, в который нужно добавить примерно следующее:
menuentry 'ubuntuInstaller' {
insmod part_gpt
search --no-floppy --fs-uuid --set=root abc123
set isofile="/root/ubuntu-24.04.2-live-server-amd64.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz iso-scan/filename=${isofile} ds=nocloud cc: %23cloud-config%0Apassword%3A%20rkbfc3465%0Assh_pwauth%3A%20true%0Achpasswd%3A%0A%20%20expire%3A%20False%0A end_cc ---
initrd (loop)/casper/initrd
}
Вместо abc123 вам нужно задать идентификатор файловой системы в которой лежит iso, его можно получить с помощью dumpe2fs или blkid.
grub сам найдёт раздел, в котором лежит fs, и будет использовать её как root.
Также нужно поменять путь до iso-файла, затем сохранить файл и выполнить
update-grub.
Кодерская мастерская
Часть вторая: установка на сервер. Бывают редкие ситуации, когда нет доступа к серверной панели, или после переустановки пароль хостер высылает на почту, к которой нет доступа. Также сервер может быть не арендованным, а стоять в каком-то офисе, физический…
Теперь нужно перезагрузить сервер в установщик, и если там вдруг не UEFI, вероятно ничего не получится, и потребуется физический доступ.
Однако 2025 год на дворе, и UEFI достаточно давно и достаточно много где, как минимум на арендуемых серваках.
Поэтому выполняем grub-reboot ubuntuInstaller, и надеемся, что всё будет ок.
Команда произведёт некие магические модификации в UEFI env vars, но перезагрузку сама не выполнит, поэтому нужно ручками сделать reboot.
В мануале написано, что grub-reboot загружается в заданную entry только один раз, и при следующей загрузке снова загрузится дефолт, но в некоторых случаях выбранная entry может застрять, учитывайте это.
После ребута периодически тыкаемся ssh в 22 порт (он кстати должен быть открыть в фаерволе хостера), в какой-то момент должен подняться subiquity.
Часть третья: телефон как модем.
Допустим у вас есть телефон на android и headless машинка, к которой не подключено ничего кроме питания, и вы очень сильно хотите поставить на неё ubuntu.
Сделать нужно следующее:
1. Подготовить флешку по первой части.
2. Подключить телефон к машине usb-кабелем.
3. Начать загрузку с флешки, сразу же начать раздачу интернета с телефона.
4. Включить точку доступа на телефоне.
5. Подключиться к точке доступа телефона, через неё пролезть в ssh-сервер subiquity.
Вышеописанное сработает, если ваш телефон умеет одновременно подключаться к Wi-Fi и раздавать его же, иначе придётся использовать мобильные данные, так как при установке требуется интернет.
Имейте в виду, что все телефоны разные, и у вас маршрутизация может быть устроена иначе, я опишу мой вариант.
А расклад достаточно неприятный, при раздаче по проводу, я попадаю в подсеть 192.168.198.0/24, а при раздаче по Wi-Fi - 192.168.173.0/24.
Подсети меняются со временем, но суть в том, что они разные, и из одной в другую пролезть извне не получится.
Извне нельзя, но если в сам телефон залезть, то у нас будет доступ к обоим подсетям.
Включаем adb, переводим в tcp mode.
При подключении к телефону через его hotspot можно подключиться по adb сходив на шлюз и порт 5555, кстати шлюзом легко может быть адрес по типу 192.168.173.151, т.е. не ожидайте, что последним октетом будет единичка.
И так мы раздали Wi-Fi с телефона, подключились к нему и попали в shell телефона.
Теперь можно подключать телефон проводом, и у нас даже будет доступ в подсеть для usb-раздачи, но есть ещё один нюанс.
Я так и не нашёл свежесобранного ssh-клиента под android, а также я не уверен, что весь псевдографический мусор будет корректно передан через adb.
Поэтому проще пробросить порты на нашу машину, и работать полноценным клиентом через полноценный shell.
О пробросе портов через adb я вспомнил слишком поздно, сейчас уже нет возможности проверить, поэтому опишу способ без adb forward, а в будущем обновлю пост.
UPD из 2025-10-31, adb не умеет пробрасывать на произвольные адреса, так что оставляю всё как есть.
Единственный софт, который сработал - это тяжёленькая приложуха на go, весит около 20 мегабайт, умеет следующее:
Сейчас вам возможно покажется, что вы попали на aliexpress: The GoProxy is a high-performance http proxy, https proxy, socks5 proxy, ss proxy, websocket proxies, tcp proxies, udp proxies, game shield, game proxies. Support forward proxies, reverse proxy, transparent proxy, internet nat proxies, https proxy load balancing, http proxy load balancing , socks5 proxies load balancing, socket proxy load balancing, ss proxy load balancing, TCP / UDP port mapping, SSH transit, TLS encrypted transmission, protocol conversion, anti-pollution DNS proxy, API authentication, speed limit, limit connection.
Ну как, захотелось купить? Штука и правда имеет коммерческую версию, но нам она не понадобится.
Качаем билд под вашу архитектуру android со страницы релизов: https://github.com/snail007/goproxy/releases
Далее закидываем на телефон, причём просто на карточку класть смысла нет, оттуда запустить не получится.
Без рута доступна директория /data/local/tmp, в ней флаг executable не запрещён.
Поэтому пушим бинарник в /data/local/tmp,
Однако 2025 год на дворе, и UEFI достаточно давно и достаточно много где, как минимум на арендуемых серваках.
Поэтому выполняем grub-reboot ubuntuInstaller, и надеемся, что всё будет ок.
Команда произведёт некие магические модификации в UEFI env vars, но перезагрузку сама не выполнит, поэтому нужно ручками сделать reboot.
В мануале написано, что grub-reboot загружается в заданную entry только один раз, и при следующей загрузке снова загрузится дефолт, но в некоторых случаях выбранная entry может застрять, учитывайте это.
После ребута периодически тыкаемся ssh в 22 порт (он кстати должен быть открыть в фаерволе хостера), в какой-то момент должен подняться subiquity.
Часть третья: телефон как модем.
Допустим у вас есть телефон на android и headless машинка, к которой не подключено ничего кроме питания, и вы очень сильно хотите поставить на неё ubuntu.
Сделать нужно следующее:
1. Подготовить флешку по первой части.
2. Подключить телефон к машине usb-кабелем.
3. Начать загрузку с флешки, сразу же начать раздачу интернета с телефона.
4. Включить точку доступа на телефоне.
5. Подключиться к точке доступа телефона, через неё пролезть в ssh-сервер subiquity.
Вышеописанное сработает, если ваш телефон умеет одновременно подключаться к Wi-Fi и раздавать его же, иначе придётся использовать мобильные данные, так как при установке требуется интернет.
Имейте в виду, что все телефоны разные, и у вас маршрутизация может быть устроена иначе, я опишу мой вариант.
А расклад достаточно неприятный, при раздаче по проводу, я попадаю в подсеть 192.168.198.0/24, а при раздаче по Wi-Fi - 192.168.173.0/24.
Подсети меняются со временем, но суть в том, что они разные, и из одной в другую пролезть извне не получится.
Извне нельзя, но если в сам телефон залезть, то у нас будет доступ к обоим подсетям.
Включаем adb, переводим в tcp mode.
При подключении к телефону через его hotspot можно подключиться по adb сходив на шлюз и порт 5555, кстати шлюзом легко может быть адрес по типу 192.168.173.151, т.е. не ожидайте, что последним октетом будет единичка.
И так мы раздали Wi-Fi с телефона, подключились к нему и попали в shell телефона.
Теперь можно подключать телефон проводом, и у нас даже будет доступ в подсеть для usb-раздачи, но есть ещё один нюанс.
Я так и не нашёл свежесобранного ssh-клиента под android, а также я не уверен, что весь псевдографический мусор будет корректно передан через adb.
Поэтому проще пробросить порты на нашу машину, и работать полноценным клиентом через полноценный shell.
О пробросе портов через adb я вспомнил слишком поздно, сейчас уже нет возможности проверить, поэтому опишу способ без adb forward, а в будущем обновлю пост.
UPD из 2025-10-31, adb не умеет пробрасывать на произвольные адреса, так что оставляю всё как есть.
Единственный софт, который сработал - это тяжёленькая приложуха на go, весит около 20 мегабайт, умеет следующее:
Сейчас вам возможно покажется, что вы попали на aliexpress: The GoProxy is a high-performance http proxy, https proxy, socks5 proxy, ss proxy, websocket proxies, tcp proxies, udp proxies, game shield, game proxies. Support forward proxies, reverse proxy, transparent proxy, internet nat proxies, https proxy load balancing, http proxy load balancing , socks5 proxies load balancing, socket proxy load balancing, ss proxy load balancing, TCP / UDP port mapping, SSH transit, TLS encrypted transmission, protocol conversion, anti-pollution DNS proxy, API authentication, speed limit, limit connection.
Ну как, захотелось купить? Штука и правда имеет коммерческую версию, но нам она не понадобится.
Качаем билд под вашу архитектуру android со страницы релизов: https://github.com/snail007/goproxy/releases
Далее закидываем на телефон, причём просто на карточку класть смысла нет, оттуда запустить не получится.
Без рута доступна директория /data/local/tmp, в ней флаг executable не запрещён.
Поэтому пушим бинарник в /data/local/tmp,
chmod +x, и готовимся к установке.GitHub
Releases · snail007/goproxy
🔥 Proxy is a high performance HTTP(S) proxies, SOCKS5 proxies,WEBSOCKET, TCP, UDP proxy server implemented by golang. Now, it supports chain-style proxies,nat forwarding in different lan,TCP/UDP p...
Кодерская мастерская
Теперь нужно перезагрузить сервер в установщик, и если там вдруг не UEFI, вероятно ничего не получится, и потребуется физический доступ. Однако 2025 год на дворе, и UEFI достаточно давно и достаточно много где, как минимум на арендуемых серваках. Поэтому выполняем…
Если планируете ставить ubuntu ниже 24, или просто для перестраховки, можно добавить network-config для usb-устройства, иначе cloudinit проигнорирует сетевой интерфейс.
Почему-то из файла он загружать его не захотел, но загрузил из параметра ядра, выглядит это так:
network-config в данном случае - это конфиг в yaml формате, пожатый с помощью gzip и закодированный в base64, исходный конфиг такой:
Нейминг странный, конфиг расширял на основе примера из доки, не знаю, для чего добавлять zz в начало, будто бы имя секции может быть любым.
С таким конфигом раздача завелась на 20 и 22 ubuntu, другие не пробовал.
Подключаем телефон проводом к компьютеру, на котором будем ставить систему, загружаемся с флешки, сразу включаем раздачу по usb.
В процессе загрузки телефон может периодически решать, что устройство отключилось, и раздача может прекратиться, поэтому первые секунд 20 следите за ней, и включайте заново.
Если включить её потом, cloudinit может проигнорировать новый интерфейс, поэтому лучше включать как можно раньше.
Также подключаемся к hotspot-у телефона, заходим в shell через adb.
Теперь мониторим файл /proc/net/arp
Содержимое достаточно читаемое, представляет собой arp таблицу, в ней вы в какой-то момент должны увидеть новое устройство в подсети usb-tethering-а, это и есть наша ubuntu.
Далее запускаем proxy:
Подставьте в качестве целевого ip адрес вашей машины.
Прога поднимется, должны побежать логи.
Открываем второй терминал, в нём подключаемся по ssh, используя адрес вашего телефона и порт 1234, и да здравствует subiquity!
Теперь, главное, чтобы этот шайтан-мост не развалился в середине установки, и удачи, если решитесь повторить.
Немного о subiquity:
Буду краток, это достаточно мутная псевдографическая срань, в любой непонятной ситуации используйте горячку для просмотра текущей строки, в nvda это nvda+up, а также имейте в виду, что некоторые подменю разварачиваются как бы справа от главного меню, что добавляет немного веселья и безумия в скучный и унылый процесс установки.
Как подменю, например, открывается конфигурация разделов в конфигураторе дисков, и nvda одновременно видит куски из обоих интерфейсов, очень удобненько, всем рекомендую.
Почему-то из файла он загружать его не захотел, но загрузил из параметра ядра, выглядит это так:
ds=nocloud\;s=/cdrom/nocloud/ network-config=H4sIAIxzLGgC/5XLOwqAMBAE0F7IHaYOpBGr3CbGgRV0lWS18PSKWthazuftLHVcNKJ1DU1YlFaja4DjCGmaAvVOwCB57SKsbHyKOVmWdwQ0zYyg+q81+YVNvnqr/R993f0JKz7GMs4AAAA=
network-config в данном случае - это конфиг в yaml формате, пожатый с помощью gzip и закодированный в base64, исходный конфиг такой:
version: 2
ethernets:
zz-all-en:
dhcp4: true
match:
name: en*
zz-all-eth:
dhcp4: true
match:
name: eth*
zz-all-usb:
dhcp4: true
match:
name: usb*
Нейминг странный, конфиг расширял на основе примера из доки, не знаю, для чего добавлять zz в начало, будто бы имя секции может быть любым.
С таким конфигом раздача завелась на 20 и 22 ubuntu, другие не пробовал.
Подключаем телефон проводом к компьютеру, на котором будем ставить систему, загружаемся с флешки, сразу включаем раздачу по usb.
В процессе загрузки телефон может периодически решать, что устройство отключилось, и раздача может прекратиться, поэтому первые секунд 20 следите за ней, и включайте заново.
Если включить её потом, cloudinit может проигнорировать новый интерфейс, поэтому лучше включать как можно раньше.
Также подключаемся к hotspot-у телефона, заходим в shell через adb.
Теперь мониторим файл /proc/net/arp
Содержимое достаточно читаемое, представляет собой arp таблицу, в ней вы в какой-то момент должны увидеть новое устройство в подсети usb-tethering-а, это и есть наша ubuntu.
Далее запускаем proxy:
/data/local/tmp/proxy tcp -p ":1234" -T tcp -P "192.168.191.188:22"
Подставьте в качестве целевого ip адрес вашей машины.
Прога поднимется, должны побежать логи.
Открываем второй терминал, в нём подключаемся по ssh, используя адрес вашего телефона и порт 1234, и да здравствует subiquity!
Теперь, главное, чтобы этот шайтан-мост не развалился в середине установки, и удачи, если решитесь повторить.
Немного о subiquity:
Буду краток, это достаточно мутная псевдографическая срань, в любой непонятной ситуации используйте горячку для просмотра текущей строки, в nvda это nvda+up, а также имейте в виду, что некоторые подменю разварачиваются как бы справа от главного меню, что добавляет немного веселья и безумия в скучный и унылый процесс установки.
Как подменю, например, открывается конфигурация разделов в конфигураторе дисков, и nvda одновременно видит куски из обоих интерфейсов, очень удобненько, всем рекомендую.
Правый и левый каналы поменялись местами в моих беспроводных наушниках.
Я не менял никаких настроек в винде, просто в какой-то момент заметил, что они поменялись, ещё 3 часа назад всё было нормально, а 5 минут назад - уже нет.
Как же я это исправил?
Выключил и включил наушники, т.е. проблема случилась где-то между usb-свистком и самими наушниками, а винда тут, скорее всего, не виновата.
#ОноСломалось
Я не менял никаких настроек в винде, просто в какой-то момент заметил, что они поменялись, ещё 3 часа назад всё было нормально, а 5 минут назад - уже нет.
Как же я это исправил?
Выключил и включил наушники, т.е. проблема случилась где-то между usb-свистком и самими наушниками, а винда тут, скорее всего, не виновата.
#ОноСломалось
После обновления до 24h2 раз в несколько дней от проводника приходит следующее уведомление:
"При получении трассировки произошла ошибка."
Никаких проблем будто бы больше нет, но вот сегодня я решил от нефиг делать запустить стандартный механизм проверки и восстановления целостности системных файлов, он сказал, что чего-то там восстановил, и теперь у меня пропал поиск в меню пуск, а перезагружаться лень.
#ОноСломалось
"При получении трассировки произошла ошибка."
Никаких проблем будто бы больше нет, но вот сегодня я решил от нефиг делать запустить стандартный механизм проверки и восстановления целостности системных файлов, он сказал, что чего-то там восстановил, и теперь у меня пропал поиск в меню пуск, а перезагружаться лень.
#ОноСломалось
👍1
Кодерская мастерская
После обновления до 24h2 раз в несколько дней от проводника приходит следующее уведомление: "При получении трассировки произошла ошибка." Никаких проблем будто бы больше нет, но вот сегодня я решил от нефиг делать запустить стандартный механизм проверки и…
Я починил пуск, было достаточно перезапустить проводник!
А потом ещё раз перезапустить.
И ещё раз.
И после трёх перезапусков проводника поиск в пуске появился.
Точно цитату не помню, но смысл примерно такой: "Безумие - это многократное повторение одного и того же действия с одним и тем же результатом, в надежде получить что-то новое".
Но в случае с виндой выходит, что клин клином вышибать приходится.
А потом ещё раз перезапустить.
И ещё раз.
И после трёх перезапусков проводника поиск в пуске появился.
Точно цитату не помню, но смысл примерно такой: "Безумие - это многократное повторение одного и того же действия с одним и тем же результатом, в надежде получить что-то новое".
Но в случае с виндой выходит, что клин клином вышибать приходится.
👍1
Каждый раз, когда я ставлю незнакомый софт, я на сто раз проверяю, точно ли я устанавливаю не поддельную версию. Если это приложение в google play, смотрю на кол-во оценок и скачиваний (у фейка не будет высокого рейтинга и миллионов загрузок), если ставлю пакет из пакетного менеджера, несколько раз перепроверю написание, если ставлю что-то малоизвестное, до последнего буду пытаться найти официальный сайт продукта и т.п.
Например однажды минуты на 3 залип при установке яндекс музыки, когда увидел, что её выложил не яндекс, а какой-то Direct Cursus Computer Systems Trading LLC.
До этого момента думал, что моя паранойя чрезмерна, и я просто трачу время на фигню, но сейчас посмотрел видео, в котором как раз повествуется о том, как люди подобным образом подцепили поддельные бинарники сомнительного происхождения в свой арч-линукс.
Более мне добавить нечего, рекомендую и вам следить за тем, что и откуда вы ставите.
Видос на англ:
https://www.youtube.com/watch?v=rUzzBY-P3HE
Например однажды минуты на 3 залип при установке яндекс музыки, когда увидел, что её выложил не яндекс, а какой-то Direct Cursus Computer Systems Trading LLC.
До этого момента думал, что моя паранойя чрезмерна, и я просто трачу время на фигню, но сейчас посмотрел видео, в котором как раз повествуется о том, как люди подобным образом подцепили поддельные бинарники сомнительного происхождения в свой арч-линукс.
Более мне добавить нечего, рекомендую и вам следить за тем, что и откуда вы ставите.
Видос на англ:
https://www.youtube.com/watch?v=rUzzBY-P3HE
YouTube
Arch Linux Is Under Attack...
Arch linux is great, but the AUR is sort of scary. In this video we talk about malicious packages found in the AUR last week.
https://www.reddit.com/r/linux/comments/1m3wodv/malware_found_in_the_aur/
Go secure yourself online with Multi Factor Authentication…
https://www.reddit.com/r/linux/comments/1m3wodv/malware_found_in_the_aur/
Go secure yourself online with Multi Factor Authentication…
👍2❤1
Юристы имеются среди подписчиков?
Заказал товар в dns с предоплатой, постомат сломался, сотрудник вскрыл ячейку вручную и выдал коробку, в системе заказ продолжает отображаться как ожидающий получения.
Если отменить, фокус сработает и деньги вернуться, то нарушу ли я закон таким образом?
Вопрос гипотетический, ибо цена эксперимента - косарь рублей, но интересно всё же.
Заказал товар в dns с предоплатой, постомат сломался, сотрудник вскрыл ячейку вручную и выдал коробку, в системе заказ продолжает отображаться как ожидающий получения.
Если отменить, фокус сработает и деньги вернуться, то нарушу ли я закон таким образом?
Вопрос гипотетический, ибо цена эксперимента - косарь рублей, но интересно всё же.