As you know almost all VPS providers give you the option to install OS with one click. I want to perform some tasks after OS has been installed such as:
Setting root password
Disabling root and adding new user
Installing sudo, ufw, fail2ban etc.
Install and configure nginx
Install and configure mysql
Now I assume one way of doing it is to create a bash script that runs on start up and performs all the above functions. But the thing is not many VPS providers give the option to upload a startup script which means you have to manually run the script after VPS has been set up. Vultr is one provider (probably DO too) that gives you the option to run startup script while creating VPS so I was wondering if I can create a bash script that runs on start and do all these operations?
The second option is to create my own ISO with these preinstalled software and settings and use that ISO to install OS on VPS. My question is how can I create my own ISO?
Well, you can archive these pretty easy with a bash script that runs at the first boot, like what I did at NanoKVM.
VM gets cloned from a template, MAC + bridge gets set, DHCP allocates the VM a IP address.
Now the script can run, sets a new root password + some other stuff posts that to an API and you are set.
Yeah, I just do that and manually rsync the script over once the VM is deployed. Run the script and then it’s good to go. I also typically use a nice script from @Munzy which preps and sets itself up with snmp so it can be quickly added to librenms (if that’s part of your monitoring).
The idea is to create VPS using Vultr API (or any other provider which supports API) and then install softwares using bash so everything is automated.
Another way of doing it is to upload custom ISO using API and install OS containing everything. Now coming to first approach where we can use bash, will I need root password to perform these operations? Or I can simply write bash for e.g. “apt install nano” and set it as startup script and it will install nano!?
Coming to ISO (or template whatever it is called), how do I make one? Let’s say if I have Hyper V on Windows 10 and I create a new Debian 9 VM, install all required softwares etc. then how can I make ISO/template out of it?
You could also use something like saltstack, and if supported, salt cloud. Spins up and sets everything up to your needs, terraform is also something that should work pretty well.
Yeah, some people have told me salt is better designed than ansible. I haven’t tried it and stick with ansible because I’m used to it, but salt is probably worth looking into.