# Update packages on Ubuntu and Freebsd ## Summary * Updates _Ubuntu_ packages and OS with `apt`. * Updates _FreeBSD_ packages with `pkg`, and OS with `freebsd-update`. ## Setup & Usage ### Dependencies **macOS Dependencies** ```bash brew cask install vagrant virtualbox ; brew install git ansible ``` **Linux - Ubuntu Dependencies** Add this Ansible PPA and [Unofficial Vagrant Debian Repository](https://vagrant-deb.linestarve.com/) because [Vagrant is made by the excuse making developers at HashiCorp](https://github.com/hashicorp/vagrant-installers/issues/12#issuecomment-328379740). _If you use the Ubuntu Repository version of Vagrant, it is **very** behind release and will likely throw errors._ ```bash sudo add-apt-repository ppa:ansible/ansible ; sudo apt-get update ; sudo bash -c 'echo deb https://vagrant-deb.linestarve.com/ any main > /etc/apt/sources.list.d/wolfgang42-vagrant.list' && sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key AD319E0F7CFFA38B4D9F6E55CE3F3DE92099F7A4 && sudo apt-get update ``` Then install the dependencies. ```bash sudo apt install -y vagrant virtualbox ansible git rsync python-pip ``` _If you feel you **need** the latest VirtualBox you can [follow the Oracle instructions](https://www.virtualbox.org/wiki/Linux_Downloads) any time. **FreeBSD Dependencies** `root:#` ```bash pkg install --yes vagrant virtualbox-ose-nox11 ansible git rsync ca_root_nss ``` **Windows (TBD) Dependencies** ## :floppy_disk: Install and Use ```bash cd ; git clone https://github.com/stationgroup/ansible-experiments ; cd ~/ansible-experiments/package_updates ; ./setup-requirements ``` ## Details The Vagrant file being used is a copy from `https://github.com/stationgroup/vagrant-labs/tree/master/imperialspeculate`. Two roles are being used: debian-upgrade (an upstream Galaxy role) and freebsd-upgrade (a small role based on what was proposed in the comments of #1 and extended with proper support for check mode.) The upgrade process is contained in the playbook os_upgrade.yml, which will automatically create proper groups for Ubuntu and FreeBSD hosts. If unneeded, this first play can be left out, and the target hosts: in the second play can be replaced by the relevant groups you have in the inventory (e.g. ec2 tags.) A local ansible.cfg is defined, and needed for these scripts to run out of the box. This implies that all ansible commands must be run from the `ansible-experiments/package_updates` folder. A small script `setup-requirements` is provided, that initializes everything, including doing a vagrant up. It will generate an ssh-config for said vagrant boxes, download roles from galaxy, and make a base-install for the hosts (installing python dependencies, ansible itself on ubuntu1, a deploying an ssh key to all nodes to be used from the vagrant box `ubuntu1`, as ansible controller machine.) When deploying and setting up from the machine where vagrant runs, you need to add some extra arguments: `--ssh-extra-args "-F ./vagrant-ssh-config" --inventory hosts-vagrant` to ansible execution. These are not necessary once running ansible from `ubuntu1`.