Я использую vagrant + puppet для предоставления precise32
Сервер VirtualBox для программного добавления пользователей. У меня все работает, но я не могу автоматически установить пароль с помощью марионетки. Вот мой кукольный сценарий:
package { "ruby-shadow":
name => "libshadow-ruby1.8",
ensure => installed,
}
user { 'biff':
home => '/home/biff',
shell => '/bin/bash',
uid => 201,
managehome => 'true',
password => '$6$kxHLEuHW$zHRAZcVLu0XzukqU79bT.PEg./FfcloJiWmlH2rf.Lmnyke7uAaHkQTXvErqikWeraSiHFBwDSMDV4hRImqjr7.',
groups => ['sudo', ],
requires => Package['ruby-shadow'],
}
Чтобы получить хеш $6$kx...
, Я вошел в виртуальную машину, запустил sudo passwd biff
установить пароль в системе, а затем скопировать хешированный пароль (второе поле в /etc/shadow
) в сценарий марионетки выше. После удаления пользователя для сброса пароля и повторного запуска марионеточного скрипта пароль не установлен, и я вообще не могу войти в систему:
[precise32]$ sudo grep biff /etc/shadow
biff:!:15862:0:99999:7:::
На самом деле, похоже, что пользователь biff
был заблокирован вне системы (/ etc / shadow объяснение). Правильный ли у меня хэш установлен как password
переменная? Как понять, что это такое?
Похоже, что одним из подходов может быть запуск usermod
после факта установить пароль, но, похоже, это противоречит самой сути использования марионетки. Любые идеи?
Puppet не сможет установить пароль, если libshadow
gem присутствует, так как это требуется для работы с теневыми паролями. IIRC есть сообщение об ошибке провайдера. libshadow
требует mkmf.rb
для установки, которые можно найти в пакетах libruby2.0, ruby1.9.1-dev или ruby1.8-dev (в зависимости от вашей рубиновой версии)
В моем манифесте есть следующее:
package {
"ruby1.9.1-dev":
ensure => installed;
"libshadow":
ensure => installed,
require => Package['ruby1.9.1-dev'],
provider => gem;
}
Бродячий ящик, который вы используете, может использовать библиотеки ruby в /opt/vagrant_ruby/lib/1.8/
и не использовать какие-либо системные библиотеки Ruby. Проверьте, есть ли у вашего бродячего ящика файл по адресу /etc/profile.d/vagrant_ruby.sh
. Если да, то это главное puppet
использовать команду, которая затем определяет, какие библиотеки Ruby использовать. Попробуйте удалить этот файл;) Если все по-прежнему работает (после установки puppet и libshadow-ruby в систему), перепакуйте коробку с помощью vagrant package
и используйте это как свой precise32
коробка.
Я уверен, что было много веских причин для использования usr /opt/vagrant_ruby
, но в нем отсутствует довольно важная библиотека, и это немного сбивает с толку при использовании других инструментов внутри коробки, которые извлекают библиотеки ruby.