2013-08-02 3 views
3

Я новичок в развертывании программ, написанных на C/C++ в Linux, и мне интересно, что вы будете делать в этой ситуации.Развертывание исполняемого файла с конфигурационным файлом

У меня есть двоичный файл (скомпилированный с помощью GNU Make), которому необходимо прочитать конфигурационный файл (например, myprogram.conf). Но когда я пишу Makefile для развертывания этого файла до /usr/bin/, куда должен идти файл конфигурации? И как исполняемый файл знает, где он находится?

ответ

6

У вас есть бесконечные варианты, но лучший способ зависит от нескольких вещей. Во-первых, это пользовательский файл конфигурации или глобальный для всех пользователей?

Если это конкретный пользователь, вы можете, например, сохранить его в файле ~/.myprogram/config.file и проверить программу там. Как услуга для ваших пользователей, вам решать, что делать, если она не найдена - возможно, скопируйте конфигурацию по умолчанию там из другого места или создайте по умолчанию или используйте жестко заданные параметры по умолчанию или покажите мастер настройки , или просто терпит неудачу. Это полностью зависит от вас.

Если это глобально, традиционное место для его размещения в Linux находится в/etc, например. /etc/config.file или /etc/myprogram/config.file. См. Linux File System Structure. Обычно у вас всегда есть/etc в Linux. Обработка ситуации, когда файл не существует, такой же, как и выше, - нет «правильного» способа справиться с этим, он основан исключительно на том, как удобно вы хотите сделать это для пользователя.

То, что я обычно делаю для глобальных конфигурационных файлов, помещается в/etc/wherever при установке, по умолчанию программа загружает файл конфигурации из/etc/wherever, но также дает возможность командной строки переопределять файл конфигурации (особенно полезно для тестирования или в других ситуациях).

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

Надеюсь, что это поможет.

+1

+1 для «опции командной строки» - что-то я пропустил в своем ответе. –

+2

Собственно не забывайте переменные среды. Для тестирования, установки образца, перемещаемой установки и т. Д. Вы не можете бить переменные среды. Чтобы поддерживать воспроизводимые сборки, мы имеем Git repo, содержащее большое количество программного обеспечения 3rdparty, которое нам нужно, и потому, что любой данный пользователь может создать свое местное рабочее пространство git в любом месте, нам нужны вещи, которые можно переместить. Если программное обеспечение поддерживает переменные среды, чтобы указать, где находится конфигурация, вы можете написать небольшую оболочку оболочки оболочки вокруг нее, которая соответствующим образом устанавливает переменную среды, а затем вызывает реальное приложение. – MadScientist

0

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

Что касается того, как исполняемый файл найдет его, я передам путь файла конфигурации к исполняемому файлу в командной строке в качестве аргумента со значением по умолчанию «.». (который является текущим каталогом, тем, который вы используете при запуске исполняемого файла).

+0

, но файл конфигурации всегда требуется, и я бы хотел, чтобы он не пропускал его как аргумент каждый раз. могу ли я поместить их в/etc/myprogram /? Я не был уверен, что стандартный способ сделать это. – UXkQEZ7

+1

@everitt: ответ говорит, что путь по умолчанию - «.», Что означает, что вы не должны передавать его в качестве аргумента каждый раз. –

+1

@everitt: Стандартный способ - разместить их в/etc/myprogram. –

2

Это отчасти зависит от того, какие параметры конфигурации, и являются ли они «на систему» ​​или «на пользователя» или «на группу» или ...

конфигурации системы, как правило, живут где-то в /etc/.... В том же каталоге, в котором работает программа, тоже очень хорошее место.

Конфеты пользователей, в домашнем каталоге пользователя.

Конфигурации групп являются самыми сложными, так как вам, вероятно, придется придумать схему, в которой есть «файл конфигурации». /etc/myprog/groups/<groupname>/config или что-то подобное будет работать.

2

В Linux обычным местом для конфигурационных файлов является «/ etc», поэтому допустимо развернуть конфигурационный файл, например /etc/myprog.conf. Однако для этого требуются привилегии root.Другие полезные опции включают размещение файла конфигурации в домашнем каталоге пользователя, что делает его чем-то вроде ~/.myprog.conf или ~/.myprog/.conf, чтобы использовать папку, в которой вы можете иметь несколько файлов конфигурации, кеш или что-то еще, что вы хотите.

Что касается того, как исполняемый файл знает, где находится файл, одним из решений является поиск файла в нескольких общих местоположениях. Например, если вы решили разместить свою конфигурацию в домашнем каталоге пользователя, сначала найдите ее там, если не найдете, посмотрите под /etc. И разрешите специальный аргумент командной строки, который позволит загружать другой файл конфигурации. Так, например, вызов myprog может проверить файл конфигурации в домашней папке, но myprog -c /some/path/config будет использовать /some/path/config в качестве файла. Также неплохо иметь некоторые настройки по умолчанию, на которые вы можете вернуться, если нет допустимого файла конфигурации в любом месте.

+1

Корневой файл также требуется по умолчанию для размещения файлов в/usr/bin. Поскольку он сказал, что его приложение есть, это означает, что/etc доступно для его установщика. –

Смежные вопросы