Releases: markosamuli/linux-machine
v3.0.0
Release targeting Ubuntu 20.04 LTS (Focal Fossa) and Debian buster releases running on Window Subsystem for Linux (WSL) 2.
Breaking changes
- Remove support for installing Python 2.7 using APT packages
- Require Python 3 or newer for local development and running any of the Python scripts
- Remove existing conflicting Terraform installations using the
markosamuli.terraform
role orasdf
version manager - The setup script and Ansible playbooks will require Ansible 2.8 to include support for installing software via snap packages
- I'm no longer testing the playbooks on Pengwin Linux environments
- I'm no longer testing the playbooks on WSL1 environments
- Running
make setup
will only install dependencies - Running
make install
will run the playbooks
Added
Shell
- Install Zsh
Debian
- Support for configuring Debian environments
Go
Install additional Go tools for development:
- errcheck is a program for checking for unchecked errors in go programs
- go-callvis is a development tool to help visualize call graph of a Go program using interactive view
- gopkgs is a tool that provides list of available Go packages that can be imported
- Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer interface
- guru is a tool for answering questions about Go source code
- staticcheck is a linter for Go source code
Development
- Install ShellCheck, a tool for analysing Bash scripts
- Install Terminus terminal application
- Install Meld, a visual diff and merge tool
Productivity
- Install LibreOffice productivity suite
Security
- Install ClamAV antivirus software
- Install Lynis v3.0.0 security tool for auditing the system
- Lynis custom configuration for WSL environments
Security hardening
Optional security hardening tools:
- passwdqc for password/passphrase strength checking and enforcement
- USBGuard for protecting system against rogue USB devices
- debsums tool for verification of installed package files against MD5 checksums
System monitoring
Optional system monitoring tools:
- GNU Accounting utilities for process and login accounting
- sysstat - Performance monitoring tools for Linux
Configuration
- Added my Linux configuration file
machine.msk.yaml
Changed
Ansible
- Install Ansible 2.9 as the default version
Golang
- Install Go version 1.15
- Upgrade
markosamuli.golang
from v1.2.1 to v2.0.0
Python
- Install Python 3.7.8 and 3.8.5
- Using local
python
role for installing distribution Python packages - Install Python using
python3
andpython3-pip
packages instead ofpython
andpython-pip
- Upgrade
markosamuli.pyenv
from v2.1.1 to v4.0.1
Node.js
- Upgrade
nvm
from v0.35.1 to v0.35.3 - Upgrade
markosamuli.nvm
from v1.4.1 to v1.4.2
Terraform
- Install Terraform with
tfenv
Development
These development tools are not required for setting up a system with my playbooks, but are required if making changes to the codebase to ensure consistent coding style.
- Changes to Makefile. Run
make help
to see the available commands. - Install shfmt and shellcheck as a dependency in the Makefile
- Use
pre-commit
v2.7.0 - Use
flake8
v3.8.3 to lint Python code - Use
pylint
v2.6.0 to lint Python code - Use
ansible-lint
v4.3.3 to lint Ansible playbooks and roles - Use shfmt v3 for formatting bash scripts
- Use Prettier for formatting JSON, Markdown and YAML files
- Format Python code with
black
Fixed
Setup
Fixes in the setup script:
- Update APT cache before installing Ansible, even if PPA packages are not being changed.
Rust
- Upgrade
markosamuli.rust
from v1.0.0 to v1.0.1 - Remove
rustup-init
script checksum verification
Homebrew
- Linuxbrew repositories have been migrated into the Homebrew repositories
- Upgrade
markosamuli.linuxbrew
from v1.2.0 to v1.2.2
Windows Subsystem for Linux (WSL)
Fixes for WSL2:
- Detect WSL2 installations using
/run/WSL
directory
Ubuntu 20.04 LTS
Fixes for Ubuntu 20.04 LTS:
- Install
make
as it was missing on my environment - Set
ansible_python_interpreter
toauto
to detect the Python 3 version correctly - Do not install Ansible from PPA as it's not available and the default APT package already has Ansible v2.9
- Do not install
shellcheck
from Snap
Configuration
- Use the correct
nvm_shell_init
variable instead ofnvm_init_shell
in the
machine.msk.yaml
config file
Development
Fixes in the development tools:
- Prevent pre-commit from being upgraded to version 2
- Suppress errors in
Makefile
whenpyenv
is not installed - Ignore Python 3.8.0 when creating virtualenv for local development
Removed
- Do not install Python 2.7 with
pyenv
- Remove unused
markosamuli.terraform
role
v2.0.0
Added
- Fix permissions in user home directory
- Install pass unix password manager
- Added aws-vault plugin for asdf version manager
Homebrew on Linux (aka Linuxbrew)
- Install Homebrew on Linux using markosamuli.linuxbrew v1.2.0
Lua
- Install Lua programming language and LuaRocks package manager for Lua
- Install luacheck rock using the custom luarocks module
Ruby
- Install rbenv and Ruby with zzet.rbenv v3.4.7
- Install rbenv v1.1.2
- Install Ruby v2.6.3
Rust
- Install Rust programming language with markosamuli.rust
Fixed
- Use
bash
executable instead ofsh
with Ansible on WSL environments to
get around Windows directory white spaces on the PATH. Fixes issues with
zzet.rbenv
role no longer using bash for executing shell commands. - Fix
update-roles.py
script not working if using master as version in
requirements.yml
file.
Changed
Ansible
- Require minimum Ansible version 2.7
- Install Ansible 2.8 as the default version
- Check that we're not using broken Ansible v2.8.6
- Check Ansible version when running playbooks
Setup script
- Rework on the setup script for improved Ansible installation when using
pyenv or virtualenv or calling Ansible with any non-system paths. - Support for installing Ansible in a local virtualenv from PyPI.
- Allow setting the default Ansible version with
MACHINE_ANSIBLE_VERSION
environment variable. - Added support for uninstalling existing Ansible installations.
- Added new long command line options in the setup script.
Default installation options
The following tools are no longer installed automatically but require to be
manually enabled:
- NeoVim
- Slack desktop application
- Vagrant and VirtualBox
- Packer
Terraform
- Remove Terraform installed with [markosamuli.terraform] if Terraform
installation with asdf version manager is found
asdf version manager
- Upgraded markosamuli.asdf from v1.0.0 to v1.1.0
- Added
asdf_init_shell
option for skipping shell configuration
Hyper
- Upgraded markosamuli.hyper from v1.1.0 to v1.2.0
Golang
- Upgraded markosamuli.golang from v1.0.0 to v1.2.1
- Optional shell script initialization
- Install common Go packages with the markosamuli.golang role
- Changed default
GOPATH
from~/Projects/golang
to~/go
- Add
GO111MODULES
environment variable into shell configuration
AWS tools
- Upgraded markosamuli.aws_tools from v1.0.1 to v2.1.0
- Install packages under
~/.aws-tools
- Added
aws-tools-update
script for updating packages in the virtualenv - Update cli53 to v0.8.16
- Update aws-vault to v4.7.1
The previous release installed packages under /opt/aws-tools
and created
symbolic links to /usr/local/bin
. These will be removed automatically.
Google Cloud SDK
- Upgraded markosamuli.gcloud from v1.1.1 to v2.1.2
- Install Google Cloud SDK from an archive file instead of the APT repository
- Cloud SDK release 271.0.0
- Option for preferring
python3
overpython2
during install
Node.js
- Upgraded markosamuli.nvm from v1.3.0 to v1.4.1
- Install NVM v0.35.1
- Load bash completion in shell scripts
Python
- Upgraded markosamuli.pyenv from v1.5.1 to v2.1.1
- Update to pyenv 1.2.15
- Update to Python 2.7.17
- Update to Python 3.7.5
Makefile
- Added Makefile with tasks for common playbooks.
- Self-documented Makefile and
make help
command. - Added
setup
command for runningsetup
script with the default options. - Removed
setup-ansible
andsetup-ansible-pypi
Makefile commands. - Added
install-ansible
Makefile command that doesn't enable or disable PyPI
and doesn't reinstall existing Ansible installations. - Playbook short commands in Makefile will automatically install missing Ansible
roles. - Added
linuxbrew
Makefile command. - Renamed
roles
Makefile command toinstall-roles
and removed-f
argument. - Renamed
update
Makefile command toupdate-roles
. - Added
clean-roles
Makefile command for runningclean_roles.py
script. - Added
latest-roles
Makefile command to update, clean and install required
Ansible roles to their latest versions.
Travis
- Fail fast on build errors
- Run builds with Ansible 2.7, 2.8 and 2.9
- Do not test manually installing PyPI
Python scripts
- Moved Python business logic and shared functionality from the Python scripts
into a localmachine
Python package.
Development and coding style improvements
- Added new pre-commit workflow in GitHub Actions
- Removed
autopep8
in favour of usingyapf
for formatting Python code - Added
pylint
pre-commit hooks for linting Python code - Format Python code with yapf pre-commit hook
- Validate shell scripts with shellcheck and improve coding style
- Format shell scripts with shfmt
- Setup virtualenv with pyenv for local development
- Added
clean-roles.py
script for removing outdated Ansible roles. - Move development requirements from
requirements.txt
into a separate
requirements.dev.txt
file to avoid installing those during normal usage.
v1.0.0
First release.