Переменные окружения apt-get при порождении файла "правил debian" - PullRequest
0 голосов
/ 05 февраля 2010

Какие переменные среды доступны для debian/rules (часто make), когда порождаются apt-get во время установки пакета под Ubuntu?

Я специально изучаю переменные окружения, которые будут относиться к каталогам конфигурации Gnome. Мне бы хотелось избегать «жесткого кодирования» таких вещей, как ~/.conf/apps/ ..., так как мне сказали, что они могут измениться, как обычно ...

Я гуглил как сумасшедший!

Ответы [ 2 ]

1 голос
/ 06 февраля 2010

Вы ищете XDG_CONFIG_HOME и связанные ? В частности, обратите внимание, что XDG_CONFIG_HOME не должен существовать, и в этом случае предполагается значение ~ / .config.

Пример Python

import os
from os import path

app_name = "my_app"
home_config = path.join(
  os.environ.get("XDG_CONFIG_HOME") or path.expanduser("~/.config"),
  app_name,
)

print "User-specific config:", home_config

C ++ пример

#include <cstdlib>
#include <iostream>
#include <stdexcept>
#include <string>

std::string get_home_config(std::string const& app_name) {
  // also look at boost's filesystem library
  using namespace std;
  string home_config;
  char const* xdg_config_home = getenv("XDG_CONFIG_HOME");
  if (xdg_config_home && xdg_config_home[0] != '\0') {
    home_config = xdg_config_home;
  }
  else {
    if (char const* home = getenv("HOME")) {
      home_config = home;
      home_config += "/.config";
    }
    else throw std::runtime_error("HOME not set");
  }
  home_config += "/";
  home_config += app_name;
  return home_config;
}

int main() try {
  std::cout << "User-specific config: " << get_home_config("my_app") << '\n';
  return 0;
}
catch (std::exception& e) {
  std::clog << e.what() << std::endl;
  return 1;
}
1 голос
/ 05 февраля 2010

debian/rules вызывается во время сборки пакета (либо исходного, либо двоичного пакета). не вызывается во время apt-get.

Фактически, файл .deb (== двоичный пакет) больше не содержит копию debian / rules. Этот файл находится только в пакете с исходным кодом.

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

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

...