Проблема решена!
Включить собственную xterm прокрутку мыши в tmux
, много Wiki, сайта Q & A, сообщение в блоге предлагает добавить строку как:
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
кому: ~/.tmux.conf
. И это - преступник.
Для разрешения xterm заголовков в окне терминала также необходимо добавить XT
флаг, что-то вроде этого:
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@"
Источник: http://opennomad.com/content/goodbye-screen-hello-tmux
Благодарю за ответы, они были полезны, но я нашел свое решение.
Воссоздание образа initrd можно выполнить с помощью fakeroot-ng (а также, вероятно, с помощью fakeroot).
Основная идея инструментов заключается в том, чтобы обернуть все системные вызовы, поэтому все программы, выполняемые в среде fakeroot, думают, что они запускаются root.
Я вызываю часть своего скрипта в среде fakeroot - распаковываю initramfs, выполняю все изменения и снова упаковываю.
Все привилегии установлены правильно, root является владельцем всех файлов.
Fakeroot-ng доступен по адресу: http://fakeroot-ng.lingnu.com/index.php/Home_Page
Эти ошибки возникают из-за того, что ваш пользователь не имеет права создавать узлы. Только root может создавать узлы, отличные от fifos и сокетов (см. документацию mknod в разделе EPERM
)
При повторной упаковке initrd, этого специального файла там не будет.
Для переупаковки initrd существует опция с именем --владелец
, которая может быть использована для установки владельца для всех файлов. Но , только root может использовать эту опцию.
Единственный способ, который я вижу, это копирование initrd на другую систему, где у вас есть root доступ и выполнение операций там. После этого скопируйте его обратно.
Поскольку вы используете cpio, вы фактически создаете initramfs , а не initrd . Initrd будет храниться как образ файловой системы, а не как архив cpio. Initrd и initramfs имеют схожие роли в процессе загрузки Linux, чтобы предоставить некоторые файлы, которые доступны до истинной корневой файловой системы (и которые используются для монтирования настоящей корневой файловой системы); они обрабатываются по-разному под капотом, но здесь это не имеет значения. Initrd старше и несколько устарел в пользу initramfs. Многие системы сборки по-прежнему используют имя файла initrd
, даже несмотря на то, что они переключили содержимое на initramfs.
Корневые образы обычно содержат узлы устройств и файлы, которым требуются определенные разрешения. Команда cpio
может только сгенерировать архив на основе файлов, которые существуют в вашей файловой системе, и вам нужны права root для создания узлов устройств или файлов, принадлежащих root. Исходный код ядра содержит инструмент usr / gen_init_cpio
и сценарий оболочки scripts / gen_initramfs_list.sh
, которые предназначены именно для генерации initramfs без необходимости создания всех файлов в файловой системе, и таким образом, чтобы сгенерировать initramfs без каких-либо привилегий. Эти программы задокументированы в дереве исходных текстов ядра в Documentation / filesystems / ramfs-rootfs-initramfs.txt
и Documentation / early-userspace / README
.
Обычный способ создания initramfs описан в ramfs-rootfs-initramfs.txt
в разделе «Заполнение initramfs». Вы пишете текстовый файл, содержащий список путей для создания с их типом (каталог, обычный, узел устройства и т. Д.), Разрешениями и другими атрибутами. Для обычных файлов вы даете имя локальному файлу с содержимым. Затем запустите usr / gen_init_cpio
для этого файла. Если при сборке ядра вы установите параметр CONFIG_INITRAMFS_SOURCE
для имени файла, initramfs будет сгенерирован путем вызова usr / gen_init_cpio
для этого файла.
Если у вас уже есть образ initramfs и вы хотите его изменить, используйте cpio -tv
, чтобы перечислить его, и воссоздать файл описания ramfs на его основе. Если возможно, получите файл описания initramfs из исходного кода ядра, чтобы сэкономить время. Извлеките содержимое обычных файлов только в какой-то каталог. Затем измените обычные файлы и файл описания ramfs и, наконец, запустите usr / gen_init_cpio
, чтобы сгенерировать новый initramfs.
Если вам нужно распаковать initramfs и перепаковать его позже, вы можете использовать параметры -s / -i для сохранения среды fakeroot в файле.
$ mkdir initrd
$ cd initrd
$ zcat ../initrd.gz | fakeroot -s ../initrd.fakeroot cpio -i
Теперь у вас есть файл со средой fakeroot, содержащий что-то вроде этого:
…
dev = fe05, ino = 20326044, mode = 120777, uid = 0, gid = 0, nlink = 1 , rdev = 0 dev = fe05 , ino = 20326045 , mode = 20664, uid = 0, gid = 0, nlink = 1, rdev = 1281 {{ 1}} dev = fe05, ino = 20326046, mode = 20664, uid = 0, gid = 0, nlink = 1, rdev = 259 dev = fe05, ino = 20326047, mode = 100644, uid = 0 , gid = 0, nlink = 1, rdev = 0
…
Посмотрите на свои файлы:
$ stat dev/console
File: 'dev/console'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fe05h/65029d Inode: 20326045 Links: 1
Я не копал глубже, но кажется, что вы можете создать необходимые узлы только с помощью
$ touch <file>
$ stat <file>
$ # put info about file into your fakeroot environment with your own params
Для сборки initramfs вы просто запустите
$ find | fakeroot -i ../initrd.fakeroot cpio -o -H newc | gzip -c > ../initrd.gz