juju bootstrap терпит неудачу с местной средой, почему?

Как Муру говорит , типичное использование sudo - запуск только одной команды. Вам не нужно передавать флаг -c, как это было бы с большинством оболочек или командой su.

Однако, в зависимости от того, какой результат вы хотите запустить mkdir qq, вы можете также пропустить флаг -i. Если вы запускаете sudo -i без аргумента команды для запуска оболочки или с аргументом команды (sudo -i command...) для запуска одной команды, sudo -i имитирует среду, которую вы получите , если вы войдете в систему как целевой пользователь . Если целевой пользователь не указан, это пользователь root, домашний каталог которого - /root. Вход в систему как пользователь помещает вас в их домашнюю директорию, поэтому sudo -i делает это тоже, хотя только для запуска оболочки или запуска одной команды.

Таким образом, запуск sudo -i mkdir qq фактически запускает mkdir qq как root из /root. Поскольку qq является относительным путем , каталог, который создает команда, на самом деле является /root/qq, то есть каталогом с именем qq внутри каталога /root. Если это то, что вы хотите, отлично! Но если вы действительно хотите создать каталог с именем qq, где бы вы ни находились прямо сейчас, вам следует вместо этого сделать одну из следующих вещей:

  • Для создания каталога обычно нет причин, по которым вы нужна полная среда входа в систему root. Таким образом, вы можете просто сбросить флаг -i и запустить sudo mkdir qq.
  • В весьма маловероятном случае вам потребовалась среда входа в систему root для создания каталога - я не могу придумать причину, по которой вы это сделаете - тогда вы можете использовать полный путь к каталогу. Хотя я сомневаюсь, что вам это понадобится в этом случае, полезно знать, что вы используете полный путь в команде, которую вы запускаете с sudo -i, чтобы убедиться, что вы ссылаетесь на правильный файл или каталог. Например, если вашей целью было создать qq в /opt, вы могли бы запустить sudo -i mkdir /opt/qq. Опять же, хотя, для mkdir это не должно быть необходимым, просто отбросьте -i.
  • Если вам не нужно запускать команду от имени root или любого другого альтернативного пользователя, не делайте этого. Чтобы создать новый каталог там, где у вашего пользователя уже есть права на запись, лучше просто запустить mkdir qq без sudo. В частности, если в этом каталоге qq вы собираетесь установить программу мгновенного обмена сообщениями QQ для использования только вами, а не другими пользователями в системе, и вы создаете ее внутри своего домашнего каталога, то лучше не используйте sudo при установке или запуске программы. (Я не предполагаю, что это для QQ. Это просто пример.)

1
задан 17.04.2020, 00:50

1 ответ

TL; dr: у вас недостаточно свободного места. Сделайте как минимум 500 МБ доступными в домашнем разделе.


Ну, я начал ковыряться и обнаружил, что сценарий не выполняется service juju-db-braiam-local start. При ручном запуске это тоже не получается. Проверяя содержимое, я обнаружил следующее:

description "juju state database"
author "Juju Team <juju@lists.ubuntu.com>"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
normal exit 0

limit nofile 65000 65000
limit nproc 20000 20000

exec /usr/bin/mongod --auth --dbpath=/home/braiam/.juju/local/db --sslOnNormalPorts --sslPEMKeyFile '/home/braiam/.juju/local/server.pem' --sslPEMKeyPassword ignored --bind_ip 0.0.0.0 --port 37017 --noprealloc --syslog --smallfiles

Для каждого кода ошибки происходит сбой с помощью инструкции exec, поэтому я запустил ее вручную. Очевидно, он пишет в системный журнал, поэтому я нашел причину:

Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] options: { auth: true, bind_ip: "0.0.0.0", dbpath: "/home/braiam/.juju/local/db", noprealloc: true, port: 37017, smallfiles: true, sslOnNormalPorts: true, sslPEMKeyFile: "/home/braiam/.juju/local/server.pem", sslPEMKeyPassword: "<password>", syslog: true }
Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] journal dir=/home/braiam/.juju/local/db/journal
Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] recover : no journal files present, no recovery needed
Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] 
Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] ERROR: Insufficient free space for journal files
Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] Please make at least 422MB available in /home/braiam/.juju/local/db/journal or use --smallfiles
Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] 
Oct 20 02:41:05 vm-2 mongod.37017[5159]: Sun Oct 20 02:41:05 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating

Там, по-видимому, mongodb не читает --smallfiles, что в конце сценария ... странно. Освобождение 422 МБ должно было решить проблему, но mongodb должен иметь возможность начать в любом случае.

Исследуя далее, я обнаружил, что mongodb полностью игнорирует --smallfiles при использовании с другими параметрами. Я открыл сообщение об ошибке об этом, , чтобы исправить это, сделайте больше места доступным.

1
ответ дан 17.04.2020, 00:51

Теги

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