Рабочий 'архив локали сборки' заставляет мою ssh сессию завершаться

Можно использовать сервисы no-ip.org. Зарегистрируйте бесплатно адрес как my-laptop.noip.org, затем загрузите программное обеспечение на свой ноутбук и в любое время Ваши изменения IP, программное обеспечение обновит Ваш адрес для того, чтобы указывать на Ваш новый IP-адрес.

Только необходимо сделать соединение SSH к my-laptop.noip.org.

На самом деле у меня есть сервис, выполняющий этот путь.:D

3
13.04.2017, 15:36
2 ответа

Учитывая, что несвязанные процессы такой как snmpd и crond умирают, и наблюдение данного Joel Taylor это locale-gen может использовать большую память, Вы - жертва уничтожителя OOM.

Избегать OOM уничтожает, установите превышать возможности политику отключить чрезмерные обязательства: sysctl vm.overcommit_memory=2

Даже при отключении чрезмерных обязательств было бы лучше ограничить повреждение locale-gen путем ограничения, сколько памяти это может выделить.

(ulimit -v 100000; build-locale-archive)
3
27.01.2020, 21:23
  • 1
    Благодарность за ответ Gilles, но я не мог заставить это работать. Посмотрите мой обновленный вопрос. –  Red Cricket 12.09.2013, 18:25

Это вопрос, который я собирался разместить здесь несколько недель назад. Как и тердон , я понимал, что .bashrc поставляется только для интерактивных оболочек Bash, поэтому не должно быть необходимости для .bashrc проверять, работает ли он в интерактивной оболочке. Сбивает с толку, что все дистрибутивы, которые я использую (Ubuntu, RHEL и Cygwin), имели некоторый тип проверки (тестирование $ - или $ PS1 ) для обеспечения интерактивности текущей оболочки. Я не люблю грузовое культовое программирование , поэтому я начал понимать назначение этого кода в моем .bashrc .

Bash имеет особый случай для удаленных оболочек

После изучения проблемы я обнаружил, что удаленные оболочки рассматриваются по-разному. В то время как неинтерактивные оболочки Bash обычно не выполняют команды ~/.bashrc при запуске, особый случай делается, когда оболочка вызывается демоном удаленной оболочки :

Bash пытается определить, когда она выполняется со своим стандартным входом подключено к сетевому соединению, как при выполнении удаленной оболочкой демон, обычно rshd , или демон защищенной оболочки sshd . Если Баш определяет, что выполняется таким образом, считывает и выполняет команды из ~/.bashrc, если этот файл существует и доступен для чтения. Он не будет этого делать, если вызывается как sh . Параметр --norc может использоваться для запрета такого поведения, и параметр --rcfile может использоваться для принудительного чтения другого файла, но ни rshd , ни sshd обычно не вызывают оболочку с этими опциями или разрешить их указание.

Пример

Вставьте следующее в начале удаленного .bashrc . (Если .bashrc является источником .profile или .bash _ profile , временно отключите его во время тестирования):

echo bashrc
fun()
{
    echo functions work
}

Выполните следующие команды локально:

$ ssh remote_host 'echo $- $0'
bashrc
hBc bash
  • No i в $ - указывает, что оболочка является неинтерактивной .
  • Отсутствие ведущих - в $0 указывает на то, что оболочка не является оболочкой входа .

Функции оболочки, определенные в удаленном .bashrc , также могут выполняться:

$ ssh remote_host fun
bashrc
functions work

Я заметил, что ~/.bashrc является только источником, если команда указана в качестве аргумента для ssh . Это имеет смысл: когда ssh используется для запуска обычной оболочки входа, выполняется .profile или .bash _ profile .bashrc только при явном использовании одного из этих файлов).

Основное преимущество, которое я вижу в использовании .bashrc при выполнении (неинтерактивной) удаленной команды, заключается в возможности выполнения функций оболочки. Однако большинство команд в типичном .bashrc являются релевантными только в интерактивной оболочке, например, псевдонимы не расширяются, если оболочка не является интерактивной.

Удаленная передача файлов может завершиться ошибкой

Обычно это не является проблемой, когда rsh или ssh используются для запуска интерактивной оболочки входа или когда неинтерактивные оболочки используются для выполнения команд. Однако это может быть проблемой для таких программ, как rcp , scp и sftp , которые используют удаленные оболочки для передачи данных.

При использовании команды scp неявно запускается оболочка удаленного пользователя по умолчанию (например, Bash). Нет упоминания об этом на главной странице - только упоминание, которое scp использует ssh для передачи данных. Это приводит к тому, что , если .bashrc содержит какие-либо команды, выводимые на стандартный вывод, передача файлов не будет выполнена , например, Ошибка scp .

См. также этот связанный отчет об ошибке Red Hat от 15 лет назад, scp обрывается при наличии эхо-команды в/etc/bashrc (которая в конечном итоге была закрыта как WONTFIX ).

Почему scp и sftp не работают

SCP (защищенная копия) и SFTP (безопасный протокол передачи файлов) имеют собственные протоколы для обмена информацией о передаваемых файлах на локальном и удаленном концах. Любой непредвиденный текст с удаленного конца (ошибочно) интерпретируется как часть протокола, и передача не выполняется. В соответствии с Часто задаваемые вопросы из книги улиток

Что часто бывает, так это то, что есть утверждения в системные или пользовательские файлы запуска оболочки на сервере ( .bashrc , .profile , /etc/csh.cshrc , .login и т.д.), которые выводят текстовые сообщения при входе в систему, предназначался для чтения людьми (как фортуна , эхо «Привет там!» и т. д.).

Такой код должен выводить только при наличии интерактивных имен входа tty , подключенный к стандартному входу. Если он не делает этот тест, он будет вставить эти текстовые сообщения там, где им не место: в данном случае загрязняющие поток протокола между scp2 / sftp и sftp-server .

Причина, по которой файлы запуска оболочки являются релевантными, заключается в том, что sshd использует оболочку пользователя при запуске любых программ от имени пользователя (используя, например ,/bin/sh -c «command»). Это традиция Unix, и имеет преимущества:

  • Обычная настройка пользователя (псевдонимы команд, переменные среды, umask, и т.д.) действуют при выполнении удаленных команд.
  • Обычная практика установки оболочки учетной записи на/bin/false для отключения это не позволит владельцу выполнять какие-либо команды,должна ли аутентификация все-таки случайно преуспеть почему-то.

Сведения о протоколе SCP

Для тех, кто интересуется подробностями работы SCP, я нашел интересную информацию в разделе Как работает протокол SCP , который включает в себя сведения о работе scp с наборными профилями оболочки на удаленной стороне? :

Например, это может произойти, если добавить это в профиль оболочки на удаленная система:

эхо «»

Почему она просто висит? Это происходит из способа scp в режиме источник ожидает подтверждения первого сообщения протокола. Если он не двоичный 0, он ожидает, что это уведомление об удаленной проблеме и ожидает больше символов для формирования сообщения об ошибке до поступления новой строки. С тех пор Вы не напечатали еще одну новую строку после первой, ваш локальный scp просто остается в петле, заблокированной на чтение (2) . А пока после снаряда профиль обработан на удаленной стороне, запущен scp в режиме раковины, который также блокирует чтение (2) , ожидая двоичного нуля, обозначающего начало передачи данных.

Вывод/TLDR

Большинство операторов в типичном .bashrc полезны только для интерактивной оболочки - не при выполнении удаленных команд с rsh или ssh . В большинстве таких ситуаций установка переменных оболочки, псевдонимов и определяющих функций не требуется - а печать любого текста в стандартном режиме является активно вредной при передаче файлов с помощью таких программ, как scp или sftp . Выход после проверки неинтерактивности текущей оболочки является наиболее безопасным поведением для .bashrc .

-121--6849-

Проблема заключается в усечении файла языковых стандартов. Проверьте: http://bleachbit.sourceforge.net/forum/linux-fedora-core-15-usrliblocalelocale-archive-still-large-after-removing-all-one-locale

Поэтому, если вы просто скопируете файл языкового стандарта поверх файла шаблона и запустите build-locale-archive, все работает:

cp -f/usr/lib/locale/locale-archive/usr/lib/locale/locale-archive.tmpl build-locale-archive.

0
27.01.2020, 21:23

Теги

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