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.terraformrole orasdfversion 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 setupwill only install dependencies - Running
make installwill 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.golangfrom v1.2.1 to v2.0.0
Python
- Install Python 3.7.8 and 3.8.5
- Using local
pythonrole for installing distribution Python packages - Install Python using
python3andpython3-pippackages instead ofpythonandpython-pip - Upgrade
markosamuli.pyenvfrom v2.1.1 to v4.0.1
Node.js
- Upgrade
nvmfrom v0.35.1 to v0.35.3 - Upgrade
markosamuli.nvmfrom 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 helpto see the available commands. - Install shfmt and shellcheck as a dependency in the Makefile
- Use
pre-commitv2.7.0 - Use
flake8v3.8.3 to lint Python code - Use
pylintv2.6.0 to lint Python code - Use
ansible-lintv4.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.rustfrom v1.0.0 to v1.0.1 - Remove
rustup-initscript checksum verification
Homebrew
- Linuxbrew repositories have been migrated into the Homebrew repositories
- Upgrade
markosamuli.linuxbrewfrom v1.2.0 to v1.2.2
Windows Subsystem for Linux (WSL)
Fixes for WSL2:
- Detect WSL2 installations using
/run/WSLdirectory
Ubuntu 20.04 LTS
Fixes for Ubuntu 20.04 LTS:
- Install
makeas it was missing on my environment - Set
ansible_python_interpretertoautoto 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
shellcheckfrom Snap
Configuration
- Use the correct
nvm_shell_initvariable instead ofnvm_init_shellin the
machine.msk.yamlconfig file
Development
Fixes in the development tools:
- Prevent pre-commit from being upgraded to version 2
- Suppress errors in
Makefilewhenpyenvis 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.terraformrole
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
bashexecutable instead ofshwith Ansible on WSL environments to
get around Windows directory white spaces on the PATH. Fixes issues with
zzet.rbenvrole no longer using bash for executing shell commands. - Fix
update-roles.pyscript not working if using master as version in
requirements.ymlfile.
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_shelloption 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
GOPATHfrom~/Projects/golangto~/go - Add
GO111MODULESenvironment 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-updatescript 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
python3overpython2during 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 helpcommand. - Added
setupcommand for runningsetupscript with the default options. - Removed
setup-ansibleandsetup-ansible-pypiMakefile commands. - Added
install-ansibleMakefile 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
linuxbrewMakefile command. - Renamed
rolesMakefile command toinstall-rolesand removed-fargument. - Renamed
updateMakefile command toupdate-roles. - Added
clean-rolesMakefile command for runningclean_roles.pyscript. - Added
latest-rolesMakefile 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 localmachinePython package.
Development and coding style improvements
- Added new pre-commit workflow in GitHub Actions
- Removed
autopep8in favour of usingyapffor formatting Python code - Added
pylintpre-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.pyscript for removing outdated Ansible roles. - Move development requirements from
requirements.txtinto a separate
requirements.dev.txtfile to avoid installing those during normal usage.
v1.0.0
First release.