Никакой/proc в находящемся в Busybox встроенном дистрибутиве Linux

Существует решение с помощью Vim.

Во-первых, нам нужен макрос Vim, который сделает большую часть работы, я сохраняю ее в ~/.vim/plugin/less.vim:

" :Less
" turn vim into a pager for psql aligned results 
fun! Less()
  set nocompatible
  set nowrap
  set scrollopt=hor
  set scrollbind
  set number
  execute 'above split'
  " resize upper window to one line; two lines are not needed because vim adds separating line
  execute 'resize 1'
  " switch to lower window and scroll 2 lines down 
  wincmd j
  execute 'norm! 2^E'
  " hide statusline in lower window
  set laststatus=0
  " hide contents of upper statusline. editor note: do not remove trailing spaces in next line!
  set statusline=\  
  " arrows do scrolling instead of moving
  nmap ^[OC zL
  nmap ^[OB ^E
  nmap ^[OD zH
  nmap ^[OA ^Y
  nmap <Space> <PageDown>
  " faster quit (I tend to forget about the upper panel)
  nmap q :qa^M
  nmap Q :qa^M
endfun
command! -nargs=0 Less call Less()

Во-вторых, для эмуляции пейджера я должен вызвать энергию так, чтобы она была:

  • считайте стандартный вход
  • но если аргумент дан на командной строке, считайте то, что прибывает туда
  • работа в режиме только для чтения
  • пропустите все init сценарии, но вместо этого выполните Меньше макроса, определенного выше

Я соединил это как сценарий помощника в ~/bin/vimpager:

#!/bin/bash
what=-
test "$@" && what="$@"
exec vim -u NONE -R -S ~/.vim/plugin/less.vim -c Less $what

В-третьих, я должен переопределить $PAGER переменной среды, но только для psql (добавьте это к моему ~/.bash_aliases):

if which vimpager &>/dev/null; then
  alias psql='PAGER=vimpager psql';
fi
4
31.12.2012, 22:55
4 ответа

После инициализации и монтирования корневой файловой системы, запускается Linux /sbin/init который продолжается с инициализациями пространства пользователя включая монтирование /proc

Скорее всего, Ваш rcS или безотносительно конфигурации init чтения не делают этого, и необходимо сказать это.

Если у Вас есть приглашение оболочки, можно смонтироваться /proc вручную с:

mount -t proc p /proc

Обратите внимание что /proc каталог должен существовать, прежде чем можно будет смонтировать что-то там. Необходимо включать его в корневое изображение.

5
27.01.2020, 20:50

2) вероятно из-за 1) - ps использование /proc получить информацию о выполнении процессов.

1) или потому что инициализация, как ожидают, не сделает это или потому что ей не удается сделать это. Проверьте то, что распределение, как предполагается, делает на начальной загрузке - как система должна быть поднята.

Вещи можно попробовать:

  • смонтироваться /proc, например: mount -t proc proc /proc - второй аргумент произволен (это - то, что показывает источником монтирования). Проверьте то, что работает с PID=1

  • регистрация /proc/cmdline какие параметры Ваше ядро получает на начальной загрузке. Если это содержит init=... Вы, возможно, должны были бы изменить его на, например. /sbin/init или удалите его, чтобы позволить ядру попытаться разрешить init, который будет выполнен сам. Необходимо сделать это в конфигурации загрузчика (для R-пи, это находится в некотором текстовом файле на SD-карте IIRC).

  • Проверьте, что желаемый init исполняемый файл существует - Busybox обычно имеет тонны символьных ссылок, указывающих на его двоичный файл так, чтобы можно было использовать command [args] вместо busybox command [args]. Ваш мог бы скучать по ним.

3
27.01.2020, 20:50

Первым делом смонтируйте его в /etc/inittab

То есть вы inittab должны начать с:

::sysinit:/bin/mount -t proc proc /proc

Это делается с помощью Buildroot 2017.02.

0
27.01.2020, 20:50

У меня была эта проблема с очень простым -контейнером Linux. Я обнаружил, чтоps(и другие вещи )не работали при первоначальном запуске контейнера, но все было в порядке, если контейнер перезапускался.

В моем образе контейнера не было пустого каталога /proc, поэтому busybox некуда было монтировать файловую систему proc. Тем не менее, он был создан позже (. Я предполагаю, что Busybox сделал это в какой-то момент ), что означало, что он существовал при последующих перезапусках и позволял ему успешно монтироваться.

Я воссоздал свой образ, включив в него /proc, и после этого все заработало.

Таким образом, похоже, что корневая файловая система должна содержать каталог /procдля монтирования busybox. Никаких дальнейших действий (ручное монтирование, записи inittab и т. д. )кажутся необходимыми (по крайней мере в контейнере ).

Несоответствие заключается в том, что busybox, кажется, счастлив создавать аналогичные каталоги, в которые ему нужно монтироваться, например /sys.

0
29.02.2020, 17:12

Теги

Похожие вопросы