setup for use with vagrant-nixos
This commit is contained in:
parent
27993a5f78
commit
2339979240
30
README.md
30
README.md
|
@ -1,12 +1,10 @@
|
|||
OS Image build scripts
|
||||
======================
|
||||
NixOS Image build scripts
|
||||
=========================
|
||||
|
||||
Cycle's OS is based on [NixOS](http://nixos.org), a linux distribution with a purely functional
|
||||
[NixOS](http://nixos.org) is a linux distribution with a purely functional
|
||||
package manager.
|
||||
|
||||
These scripts build .box images that can be used by [vagrant](http://vagrantup.com) for development, and other images suitable for production.
|
||||
|
||||
See [CycleSDK](https://bitbucket.org/oxdi/cycle-sdk) for the complete development environment (which makes use of the images generated here).
|
||||
These scripts build .box images that can be used by [vagrant](http://vagrantup.com) with the [vagrant-nixos](http://github.com/oxdi/vagrant-nixos) plugin for development, and other images suitable for production.
|
||||
|
||||
|
||||
Building the images
|
||||
|
@ -22,21 +20,17 @@ packer build template.json
|
|||
|
||||
The .box image is now ready to go. Install it into Vagrant via:
|
||||
|
||||
Updating the public box image
|
||||
-----------------------------
|
||||
|
||||
`s3put` is handy tool for copying files to Amazon S3, it's part of the [boto](https://github.com/boto/boto) library.
|
||||
|
||||
Install boto:
|
||||
|
||||
```bash
|
||||
pip install boto
|
||||
vagrant box add nixos-14.02-x86_64 nixos-14.02-x86_64-virtualbox.box
|
||||
```
|
||||
|
||||
Push the .box image to S3 via s3put
|
||||
Using the images
|
||||
----------------
|
||||
|
||||
Vagrant does not have a nixos guest plugin by default, so you'll need to install [vagrant-nixos](http://github.com/oxdi/vagrant-nixos).
|
||||
|
||||
```bash
|
||||
s3put -a $AWS_ID -s $AWS_KEY -b oxdi -g public-read --prefix `pwd` cycle-xx.xx-x86_64-virtualbox.box
|
||||
vagrant plugin install vagrant-nixos
|
||||
vagrant init nixos-14.02-x86_64
|
||||
vagrant up
|
||||
```
|
||||
|
||||
The box will then be available at http://amazonaws.com/oxdi/cycle64-virtualbox.box
|
||||
|
|
|
@ -1,26 +1,18 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
#
|
||||
# This file should only be a list of imports managed by whichever provisioner
|
||||
# is building the environment.
|
||||
#
|
||||
# You should not be editing this by hand.
|
||||
#
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./guest.nix
|
||||
./users.nix
|
||||
./vagrant.nix
|
||||
];
|
||||
|
||||
# we want our nixpkgs repo to take priority
|
||||
environment.shellInit = ''
|
||||
export NIX_PATH='nixpkgs=/etc/nixos/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels/nixos'
|
||||
'';
|
||||
|
||||
# we always want git and vim
|
||||
environment.systemPackages = with pkgs; [
|
||||
git
|
||||
vim
|
||||
];
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -11,9 +11,17 @@
|
|||
boot.loader.grub.version = 2;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
|
||||
# load missing module (should be fixed by 14.02 propper)
|
||||
boot.kernelModules = [ "vboxsf" ];
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
services.openssh.enable = true;
|
||||
services.openssh.permitRootLogin = "yes";
|
||||
users.extraUsers.root.openssh.authorizedKeys.keys = [ "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" ];
|
||||
|
||||
# Vagrant cannot yet handle udev's new predictable interface names.
|
||||
# Use the old ethX naming system for the moment.
|
||||
# http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
|
||||
networking.usePredictableInterfaceNames = false;
|
||||
|
||||
}
|
||||
|
|
37
nixos/users-vagrant.nix
Normal file
37
nixos/users-vagrant.nix
Normal file
|
@ -0,0 +1,37 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
#
|
||||
# This file is used by the vagrant-nixos plugin
|
||||
#
|
||||
|
||||
{
|
||||
# Creates a "vagrant" users with password-less sudo access
|
||||
users = {
|
||||
extraGroups = [ { name = "vagrant"; } { name = "vboxsf"; } ];
|
||||
extraUsers = [ {
|
||||
description = "Vagrant User";
|
||||
name = "vagrant";
|
||||
group = "vagrant";
|
||||
extraGroups = [ "users" "vboxsf" "wheel" ];
|
||||
password = "vagrant";
|
||||
home = "/home/vagrant";
|
||||
createHome = true;
|
||||
useDefaultShell = true;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
||||
];
|
||||
} ];
|
||||
};
|
||||
|
||||
security.sudo.wheelNeedsPassword = false;
|
||||
security.sudo.configFile = ''
|
||||
Defaults:root,%wheel env_keep+=LOCALE_ARCHIVE
|
||||
Defaults:root,%wheel env_keep+=NIX_PATH
|
||||
Defaults:root,%wheel env_keep+=TERMINFO_DIRS
|
||||
Defaults env_keep+=SSH_AUTH_SOCK
|
||||
Defaults lecture = never
|
||||
root ALL=(ALL) SETENV: ALL
|
||||
%wheel ALL=(ALL) NOPASSWD: ALL, SETENV: ALL
|
||||
'';
|
||||
|
||||
}
|
|
@ -1,39 +1,7 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
#
|
||||
# This file configures the OS for use with vagrant by setting up the
|
||||
# vagrant user, keys etc.
|
||||
# This file is used by the vagrant-nixos plugin
|
||||
#
|
||||
|
||||
{
|
||||
|
||||
# Creates a "vagrant" users with password-less sudo access
|
||||
users = {
|
||||
extraGroups = [ { name = "vagrant"; } { name = "vboxsf"; } ];
|
||||
extraUsers = [ {
|
||||
description = "Vagrant User";
|
||||
name = "vagrant";
|
||||
group = "vagrant";
|
||||
extraGroups = [ "users" "vboxsf" "wheel" ];
|
||||
password = "vagrant";
|
||||
home = "/home/vagrant";
|
||||
createHome = true;
|
||||
useDefaultShell = true;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
||||
];
|
||||
} ];
|
||||
};
|
||||
|
||||
security.sudo.wheelNeedsPassword = false;
|
||||
security.sudo.configFile = ''
|
||||
Defaults:root,%wheel env_keep+=LOCALE_ARCHIVE
|
||||
Defaults:root,%wheel env_keep+=NIX_PATH
|
||||
Defaults:root,%wheel env_keep+=TERMINFO_DIRS
|
||||
Defaults env_keep+=SSH_AUTH_SOCK
|
||||
Defaults lecture = never
|
||||
root ALL=(ALL) SETENV: ALL
|
||||
%wheel ALL=(ALL) NOPASSWD: ALL, SETENV: ALL
|
||||
'';
|
||||
|
||||
}
|
||||
{}
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
set -e
|
||||
|
||||
# rebuild (which should now use our nixpkgs)
|
||||
# Switch to non ssl channel as there are issues with certs
|
||||
# TODO: fix this propperly by including the root certs.
|
||||
nix-channel --remove nixos
|
||||
nix-channel --add http://nixos.org/channels/nixos-unstable nixos
|
||||
nixos-rebuild switch --upgrade
|
||||
|
|
|
@ -18,8 +18,9 @@
|
|||
"nixos-generate-config --root /mnt<enter><wait>",
|
||||
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/configuration.nix > /mnt/etc/nixos/configuration.nix<enter><wait>",
|
||||
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/guest-virtualbox.nix > /mnt/etc/nixos/guest.nix<enter><wait>",
|
||||
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/users-vagrant.nix > /mnt/etc/nixos/users.nix<enter><wait>",
|
||||
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/vagrant.nix > /mnt/etc/nixos/vagrant.nix<enter><wait>",
|
||||
"nix-env -i git && (cd /mnt/etc/nixos && git clone git://github.com/oxdi/nixpkgs.git) && nixos-install && reboot<enter>"
|
||||
"nixos-install && reboot<enter>"
|
||||
],
|
||||
"guest_additions_mode": "disable",
|
||||
"guest_os_type": "Linux_64",
|
||||
|
@ -33,7 +34,7 @@
|
|||
"ssh_wait_timeout": "20m",
|
||||
"virtualbox_version_file": ".vbox_version",
|
||||
"vboxmanage": [
|
||||
["modifyvm", "{{.Name}}", "--memory", "2048"],
|
||||
["modifyvm", "{{.Name}}", "--memory", "1024"],
|
||||
["modifyvm", "{{.Name}}", "--cpus", "2"]
|
||||
]
|
||||
}
|
||||
|
@ -48,7 +49,7 @@
|
|||
"post-processors": [
|
||||
{
|
||||
"type": "vagrant",
|
||||
"output": "cycle-14.02-x86_64-{{.Provider}}.box"
|
||||
"output": "nixos-14.02-x86_64-{{.Provider}}.box"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue