The term YAKSHA, is used to refer to "fairies", "demons" and "spirits" in Sanskrit; i.e. my automated daemons to save me from mundane Yak-Shaving the OS with DEVEL installation & management that should "just work", irrespective of cross-platform *nix OS, with multiple programming languages, updates, backups, bash scripts, dockerfiles, playbooks, dotfiles and configuration files!
Ofcourse, automating my development environment across multiple machines helps me keep track of packages, dep-hell and redundancy; unlike manual customization that was not only time-consuming but error-prone too. Wrestling with my OS was a huge time-sink that resulted in discrepancies with machines that worked differently, programs ran differently or broke unexpectedly and worse, dependency-hell. Hours wasted on a kaput OS can be very frustrating!
Initially, I had started with bash-shell scripts to manage the
apt-get install process but over the years there are newer devops methods, so its time to port these bash scripts and (slowly?) retire them. I am in the process of porting some parts of the installation to manage my dev environments to
ansible, an agentless distro-agnostic tool. You can find this repo on galaxy-ansible too. PS: The old shell/ bash scripts work, but are unsupported & unmaintained. Eg. many packages changed between Ubuntu 18.04 and 20.04 LTS, so was impractical to maintain individual scripts for multiple OS'es.
The standard disclaimer applies: Read the License & Disclaimer No warranty and/or guarantee for any particular use, express or implied and YOU USE ALL CONTENTS IN YAKSHA AT YOUR OWN RISK AND LIABILITY!
Installation processes have constantly evolved over the years, so there may be some legacy code that needs pruning or still needs to be ported to ansible. Hence, the constant CRUD sandbox status may break your dev machine (NB: currently used for all my DEV machines, not tested for production servers).
If you have NOT set the PATH environment variable for running Bash scripts from anywhere on your system, then:
$ cd yaksha/ubuntu #change directory into the ubuntu dir in the yaksha repo. $ chmod +x /yaksha/ubuntu/apt-install.sh # give it executable perms, if not already given.
. refers to the current directory and as
apt-install.sh in the current directory, you can easily run it with:
sudo apt update && sudo apt install ansible git
You can also use
pip to install ansible but I prefer the
apt-get package. Note that if you have a standalone machine this step is a manual process, else automated for the network installation.
[email protected]:svaksha/yaksha.gitvia the clone command:
git clone ssh://github.com/svaksha/yaksha.git
Alternatively, Github offers HTTPS (replace the ssh with https in the above command) as transfer protocols and the repo can be downloaded as a zip-file (latest 'master' branch).
$ cd yaksha # change directory into yaksha $ ansible-playbook -b -C -K -v yaksha.yaml # runs all Playbooks.
The above command runs all the playbooks listed in the
yaksha.yaml file. However, if you want to individually run specific playbooks, e.g. install only Ubuntu package-deps via apt, then run the ansible playbooks inside the /ubuntu folder, with a specific command, e.g.:
ansible-playbook -b -K ubuntu/ansible-imaging.yaml # install packages for OCR and imaging tasks.
Install Python3 scientific packages (via pip3) using ansible
The Python package (PyPI) installation deserves a longer rant, especially for Data Science. Pip3 is nice, but Anaconda (& no-frills miniconda) came by so now DS/ scientific python has multiple dep-installation methods, via 'apt' or 'pip/pip3' or 'conda' or the timeless 'source' installation. IMPO, while Conda made it easier to install all the scientific AI/ML packages it is its own beast with tons of unnecessary "pre-packaged" packages that I dont need. It works as a parallel PKG manager system to pip3, but for DS, but I have some qualms about 'an OS inside an OS' that only handles packages of ONE programming language and wonder if I need the extra packages. Why isnt dep hell as simple as Julia? TL;DR, I will stick to 'apt + pip3' here:
ansible-playbook -b -K python/main.yaml
All feedback and suggestions for improvements are welcome via BR's!
List of references and a list of people (repo'S) that have inspired me to learn and improve
Yaksha over time. It is amazing how much one can learn from other peoples code so lets share the credits: