То, что можно сделать, ограничить сумму поддерживаемых локалей только к локалям UTF-8.
http://www.fifi.org/cgi-bin/man2html/usr/share/man/man5/locale.gen.5
Исходный способ сделать это использовало hostid
.
Страница справочника отмечает, что это:
32-разрядный идентификатор... обычно Интернет-адрес DARPA для локальной машины
т.е. это - IP-адрес машины в шестнадцатеричном числе.
Это означает, что не изменится просто, потому что кто-то должен был заменить поврежденную сетевую плату.
Это также означает, что это, как гарантируют, не будет уникально, например, если сети не будут настроены, или машина использует частный IP-адрес.
На самом деле это даже не могло бы быть установлено и может быть изменено суперпользователем, использующим sethostid
или sysctl
.
Я не могу найти ничего большого использования в sysctl -a
вывод, кроме того, kern.hostid
.
На OpenBSD существует hw.uuid
, но это не доступно на FreeBSD.
После этого существует несколько команд, которые могли бы помочь, включая:
Большинство из них работает путем вызова ioctl
на соответствующем устройстве.
Если необходимо сделать это в C, проверьте исходный код для вышеупомянутых команд для получения дополнительной информации.
Вы могли также посмотреть на libvolume_id
или libblkid
получить идентификатор корневой файловой системы. Поскольку они - порты, очевидно, ни один из тех не является частью основной системы, но один или другой мог бы быть установлен как часть стандартной настольной установки.
См. также: Получение уникального идентификатора от подобной Unix системы.
Linux имеет инструмент, названный 'dmidecode', который может вытянуть S/Ns от большого количества существующих аппаратных средств, включая модули памяти (если обеспечено через DMI), диски, центральные процессоры и т.д. Это могло помочь - но понять, что многие из них могут измениться, на самом деле не изменяя машину!
Я не знаю наверняка, если FreeBSD имеет тот же инструмент, но я положителен, что у них есть что-то для заполнения той ниши.
DmideCode доступен для FreeBSD, я установил DmideCode-2.12 в моем выпуске FreeBSD 8.2.
Это дает полную аппаратную информацию как машины Linux.
sysctl -a | host
– penguin359 28.04.2011, 23:44