Исчерпал дисковое пространство в/usr/ports разделе, как я могу создать порты?

Ваш @reboot задание находится в crontab корня. Набор переменных в crontab только применяется в этом crontab, таким образом, настройки в /etc/crontab не имейте никакого влияния на задание, выполняемое crontab корня.

Оболочка по умолчанию в Кроне /bin/sh, и SHELL переменная среды установлена на /bin/sh если не переопределено. Таким образом, Tmux запускается с SHELL=/bin/sh.

Кажется что Ваш /bin/sh Bash 3.00. Подсказка указывает, что удар был запущен как оболочка входа в систему, и что никакой файл инициализации не установил PS1 (не было, вероятно, никакого файла инициализации вообще).

Если Вы устанавливаете default-shell в ~/.tmux.conf, это имеет приоритет по SHELL переменная среды. Я подозреваю, что Вы не показываете .tmux.conf в корневом каталоге корня, но в некотором другом месте, возможно, Ваш собственный корневой каталог.

У Вас есть выбор установки SHELL=/bin/bash в crontab корня, или пишущий a .tmux.conf файл в корневом каталоге корня.

4
11.10.2014, 19:15
2 ответа

Новые строки без кавычек в командных строках обрабатываются как места; Вот почему вы можете говорить такие вещи, как

command1  &&
command2

Ну, иногда новые строки без кавычек обрабатываются как точки с запятой. Но когда вы говорите

echo `cat ${log}`

все новые строки в файле журнала превращаются в места. Вы могли бы исправить это, сказав

echo "`cat ${log}`"

, но почему бы просто не сказать

cat ${log}

?

-121--114423-

В вашем примере запутанные команды создания сценариев оболочки. Вы должны обратить особое внимание на то, какой язык сценариев вы используете, а затем придерживаться синтаксиса его команд. В вашем примере вы используете turbo C shell (tcsh), однако затем вы смешиваетесь в командах и синтаксисах Bash/Bourne shell.

Если действительно требуется tcsh , можно использовать следующий подход. Предположим, что у меня был пример файла:

$ cat afile 
1
2
3
4
5

И этот сценарий:

$ cat cmd.csh 
#!/bin/tcsh

foreach i (`cat afile`) 
  echo "$i" 
end

Выполнение этого файла приведет к следующим выводам:

$ ./cmd.csh
1
2
3
4
5

Для выполнения задачи можно добавить команду mkdir после echo :

$ cat cmd1.csh 
#!/bin/tcsh

foreach i (`cat afile`) 
  echo "making directory: $i" 
  mkdir "$i"
end

Теперь, когда мы запускаем его:

$ ./cmd1.csh 
making directory: 1
making directory: 2
making directory: 3
making directory: 4
making directory: 5

В результате создаются каталоги:

$ ls -l
total 32
drwxrwxr-x. 2 saml saml 4096 Oct 16 18:58 1
drwxrwxr-x. 2 saml saml 4096 Oct 16 18:58 2
drwxrwxr-x. 2 saml saml 4096 Oct 16 18:58 3
drwxrwxr-x. 2 saml saml 4096 Oct 16 18:58 4
drwxrwxr-x. 2 saml saml 4096 Oct 16 18:58 5
-rw-rw-r--. 1 saml saml   11 Oct 16 18:47 afile
-rwxrwxr-x. 1 saml saml   86 Oct 16 18:56 cmd1.csh
-rwxrwxr-x. 1 saml saml   55 Oct 16 18:51 cmd.csh
-121--167050-

Создайте файл /etc/mk.conf со следующим:

WRKOBJDIR=/home/foo/build/ports
DISTDIR=/home/foo/build/distfiles
PACKAGE_REPOSITORY=/home/foo/packages

Путь может быть в любое место, поэтому, очевидно, замените /home/foo на нужный каталог. Нет необходимости создавать каталоги; они будут созданы автоматически при выполнении make .

Это рассматривается в FAQ: 15,3,3 - Конфигурация системы портов , с предлагаемым вариантом использования этого для создания дерева портов «только для чтения», так что/usr/ports могут находиться на диске/файловой системе «только для чтения», и вы по-прежнему можете строить из него, но, очевидно, все еще работает как обходной путь для любой ситуации, когда вы не можете записать в/usr/ports.

6
27.01.2020, 20:47

Ответ Гласса является лучшим вариантом, но в качестве альтернативы вы можете переместить его и создать симлинк.

mv /usr/ports /home/
ln -s /home/ports /usr/ports
5
27.01.2020, 20:47

Теги

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