Procedure to create a re-usable configuration export script to move a virtual machine configuration to a new one
linux logiciel-libre
The following procedure is about deprecating an old Linux server, and move crucial configuration to a new fresh install that has the desired configuration by cloning it, then applying the Old VM's configuration.
The steps will go as follows:
- Grab the original machine's configuration
- Clone the New VM that will replace the Old
- Disable the Old VM web application
1. Grab the original machine's configuration
The steps will create a tar file with the configurations.
- Connect to the production vm (morpheus) through the cloud provider console (e.g. vSphere client, or VCloud director webapp or Open Stack console)
- Connect through Putty, or your local development VM terminal the follwing lines (the console do not share the clipboard)
ssh username@morpheus.networkname.net
- Create this file
vi ~/make-migrate.sh
- Enter in vim paste mode
:set paste
- Paste this content
#!/bin/bash
cd ~
mkdir -p ~/migrate/etc/network
sudo cp /etc/network/interfaces ~/migrate/etc/network/
sudo cp /etc/hostname ~/migrate/etc/
sudo cp /etc/resolv.conf ~/migrate/etc/
mkdir -p ~/migrate/etc/ssh
sudo cp /etc/ssh/ssh_host* ~/migrate/etc/ssh/
mkdir -p ~/migrate/home/username/.ssh
cp ~/.ssh/* ~/migrate/home/username/.ssh/
mkdir -p ~/migrate/home/username/_prod/app/config
cp ~/_prod/app/config/parameters.ini ~/migrate/home/username/_prod/app/config
mkdir -p ~/migrate/etc/apache2/sites-available
sudo cp /etc/apache2/sites-available/* ~/migrate/etc/apache2/sites-available/
sudo cp /etc/resolv.conf ~/migrate/etc/
sudo chown -R username:username ~/migrate
tar cfz ~/migrate.tar.gz ~/migrate
mv migrate.tar.gz _prod/web/
- Execute it
/bin/bash ~/make-migrate.sh
- The latter moves into the
- Download https://morpheus.networkname.net/migrate.tar.gz
2. Clone the New VM that will replace the Old
This step is about cloning the functionnal VM.
Since it is specific to your cloud management system, I will not describe any way to do so.
Important points to consider while doing so, ensure that you:
- disable or isolate networking
- have access to an alternate console
Otherwise you might just create conflicts.
2. Render the production machine unavailable
You should have a copy of the original VM (e.g. morpheus-stg) with the config working the way you want.
This step is specific to the way you might commission or decomission your web app.
You may even not need to decomission it if you have multiple database servers not on the same host.
3. Prepare the New VM to use the Original VM
- Start the cloned VM
- Connect through the vCenter console
- Download the file, sorry, no cut in paste in the cloud provider console :(
- Assuming you are in
/home/username
pwd
/home/username
wget --no-check-certificate https://morpheus.networkname.net/migrate.tar.gz
- Get the migrate folder from the extracted archive (it will be in a 'home' folder after extracting)
tar xfz migrate.tar.gz
mv home/username/migrate .
rm -rf home
- Disable the network configuration
sudo /etc/init.d/networking stop
- Run the following commands:
- Echo the content of the files inside the
migrate/
folder, into their original locations - See the file listing:
- Echo the content of the files inside the
find migrate/ -type f
- Create the migrate file original contents
cd migrate
find . -type f > prepare.sh
- Warning, the following commands we will be using vim to prepare our import script, follow the keyboard types in that sequence:
vim prepare.sh
- (in the top left corner, where it starts), do:
- NOTE: FOLLOW BLINDLY THOSE VIM COMMANDS ... they written in the form of {modifier key}+{letter}, such as: CTRL+v, SHIFT+A, means the key combination like you would on a Graphical user interface, the + in this list is only to mean together.
dd
CTRL+v
100j
$
y
SHIFT+A
- Add a few spaces, to make the cursor go further than the longest line
ESC
p
- The following commands, you have to be in ESC mode, and press ENTER when finished:
:%s/ \./ /
:%s/\./cp \./
- All is done, write and quit
:wq
- Check the file
cat prepare.sh
- You will end up with a file similar to
cp ./home/username/_prod/app/config/parameters.ini /home/username/_prod/app/config/parameters.ini
cp ./home/username/.ssh/id_rsa /home/username/.ssh/id_rsa
cp ./home/username/.ssh/geritt_dsa.pub /home/username/.ssh/geritt_dsa.pub
cp ./home/username/.ssh/geritt_dsa /home/username/.ssh/geritt_dsa
cp ./home/username/.ssh/authorized_keys2 /home/username/.ssh/authorized_keys2
cp ./home/username/.ssh/config /home/username/.ssh/config
cp ./home/username/.ssh/known_hosts /home/username/.ssh/known_hosts
cp ./home/username/.ssh/id_rsa.pub /home/username/.ssh/id_rsa.pub
cp ./etc/ssh/ssh_host_rsa_key.pub /etc/ssh/ssh_host_rsa_key.pub
cp ./etc/ssh/ssh_host_dsa_key /etc/ssh/ssh_host_dsa_key
cp ./etc/ssh/ssh_host_dsa_key.pub /etc/ssh/ssh_host_dsa_key.pub
cp ./etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
cp ./etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key
cp ./etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key
cp ./etc/hostname /etc/hostname
cp ./etc/resolv.conf /etc/resolv.conf
cp ./etc/network/interfaces /etc/network/interfaces
- Execute that newly created script, first check you are in
/home/username/migrate
pwd
/home/username/migrate
- We'll run as root
sudo -s
- Echo a file or two, to test BEFORE->AFTER
cat /etc/network/interfaces
...
cat /etc/hostname
morpheus-stg
- Now, run the file
/bin/bash ./prepare.sh
- they should be different :)
cat /etc/network/interfaces
...
cat /etc/hostname
morpheus.networkname.net
- Make sure the
/etc/hosts
file reflects, and points at127.0.0.1
127.0.0.1 localhost morpheus.networkname.net morpheus
- You can use vim regex like so:
sudo vim /etc/hosts
:%s/morpheus-stg/morpheus/
:wq
- Use apache command tools to disable the old site and enable the prod ones:
sudo ll /etc/apache/sites-available
...
-rw-r--r-- 1 root root 1052 Feb 20 19:19 /etc/apache2/sites-available/default
-rw-r--r-- 1 root root 7469 Feb 6 2012 /etc/apache2/sites-available/default-ssl
-rw-r--r-- 1 root root 1917 Feb 20 15:48 /etc/apache2/sites-available/ssl
- Enable only
ssl
, anddefault
(NOT 'default-ssl
')
sudo a2dissite
10-project.local.conf
sudo a2ensite
default ssl
- Restart the server
sudo service apache2 restart
3. Decomission the original, use the new VM as the new Production
This is, again, specific to the way you might commission or decomission your web app