在 Vagrant 脚本中重新加载 VM
Reload VM in Vagrant script
简介
我正在使用 Vagrant 并想创建一个适合我需要的盒子。我目前正在构建我的供应脚本,但我遇到了一个问题,需要我重新登录。
我想要实现的目标
我想将语言环境设置为德语
我在做什么
使用 vagrant ssh
登录到我的 vagrant box 后,我 运行 以下命令
sudo apt-get update
sudo cp /var/www/projectfantasy/www/vagrant_ressources/locale.gen /etc/
sudo locale-gen de_DE.UTF-8
这些步骤是在 Debian's wiki 的帮助下完成的。最后一步是
To use the new settings with your programs, log out and back in.
现在我需要帮助了。在 vagrant 供应脚本中我将如何重新登录?当我不重新登录时,我在安装额外的软件包时收到以下 警告 。
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "de_DE.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
我的意思是,这些只是警告,应该不是问题,对吧?但我不想收到警告,想知道如何解决这个问题。
当我重新登录并尝试再次安装这些软件包时,它可以正常工作。
不幸的是,这并不是那么简单 - 如果您在配置脚本中发出 reboot
命令或 shutdown -r now
,VM 将重新启动(确实),但配置将不会继续。
幸运的是,有些人写了插件(https://github.com/exratione/vagrant-provision-reboot and https://github.com/aidanns/vagrant-reload)我用了第二个并且它有效
确保安装插件
$ vagrant plugin install vagrant-reload
在你的 vagrantfile 中,你的配置看起来像
config.vm.provision "shell", path: "vagrant_ressources/preparations.sh"
config.vm.provision :reload
config.vm.provision "shell", path: "vagrant_ressources/bootstrap.sh"
因此 preparations.sh 将执行,然后 VM 将重新加载并且 bootstrap.sh 将执行
在您的 preparations.sh 中,生成语言环境后,请确保在语言环境文件中设置了变量:
sudo locale-gen
echo -e 'LANG=de_DE.UTF-8\nLC_ALL=de_DE.UTF-8' > /etc/default/locale
sudo timedatectl set-timezone Europe/Berlin
PS :关于您使用 shell 配置的一条注释。默认情况下,配置是 运行 具有 root 权限,因此不需要所有 sudo
;如果你想 运行 作为 vagrant 用户 运行 配置它作为 config.vm.provision :shell, privileged: false ...
你将需要 sudo
我无法重现你的警告,但我发现这将允许你设置 LC_ALL:
sudo update-locale LC_ALL=de_DE.UTF-8
(来自 https://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale,但也适用于 debian jessie)
简介
我正在使用 Vagrant 并想创建一个适合我需要的盒子。我目前正在构建我的供应脚本,但我遇到了一个问题,需要我重新登录。
我想要实现的目标
我想将语言环境设置为德语
我在做什么
使用 vagrant ssh
登录到我的 vagrant box 后,我 运行 以下命令
sudo apt-get update
sudo cp /var/www/projectfantasy/www/vagrant_ressources/locale.gen /etc/
sudo locale-gen de_DE.UTF-8
这些步骤是在 Debian's wiki 的帮助下完成的。最后一步是
To use the new settings with your programs, log out and back in.
现在我需要帮助了。在 vagrant 供应脚本中我将如何重新登录?当我不重新登录时,我在安装额外的软件包时收到以下 警告 。
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "de_DE.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
我的意思是,这些只是警告,应该不是问题,对吧?但我不想收到警告,想知道如何解决这个问题。
当我重新登录并尝试再次安装这些软件包时,它可以正常工作。
不幸的是,这并不是那么简单 - 如果您在配置脚本中发出 reboot
命令或 shutdown -r now
,VM 将重新启动(确实),但配置将不会继续。
幸运的是,有些人写了插件(https://github.com/exratione/vagrant-provision-reboot and https://github.com/aidanns/vagrant-reload)我用了第二个并且它有效
确保安装插件
$ vagrant plugin install vagrant-reload
在你的 vagrantfile 中,你的配置看起来像
config.vm.provision "shell", path: "vagrant_ressources/preparations.sh"
config.vm.provision :reload
config.vm.provision "shell", path: "vagrant_ressources/bootstrap.sh"
因此 preparations.sh 将执行,然后 VM 将重新加载并且 bootstrap.sh 将执行
在您的 preparations.sh 中,生成语言环境后,请确保在语言环境文件中设置了变量:
sudo locale-gen
echo -e 'LANG=de_DE.UTF-8\nLC_ALL=de_DE.UTF-8' > /etc/default/locale
sudo timedatectl set-timezone Europe/Berlin
PS :关于您使用 shell 配置的一条注释。默认情况下,配置是 运行 具有 root 权限,因此不需要所有 sudo
;如果你想 运行 作为 vagrant 用户 运行 配置它作为 config.vm.provision :shell, privileged: false ...
你将需要 sudo
我无法重现你的警告,但我发现这将允许你设置 LC_ALL:
sudo update-locale LC_ALL=de_DE.UTF-8
(来自 https://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale,但也适用于 debian jessie)