Cloning: Difference between revisions

m heading correction
introduce an article for cloning DO droplet
Line 1: Line 1:
When first written, this article was about copying a physical hardware system. Nowadays, few systems are physical, and "cloud" is pervasive.  Read about [[Cloning/Droplet]] for an updated version.
Once you have [[backups]], you can and should test the ability to restore those backups to a new hardware environment.  The restore procedure is going to depend on what you used to create your "image" in the first place.  Independent of the notion of backups, a system administrator (or even an experienced user) will want to "clone" a computer system.  That is make an identical copy or nearly identical copy of a computer on different hardware.  The most widespread use-case for this is when a person gets a new computer and wants to migrate the old computer software and data to the new hardware.  From the system administrator's perspective, the common use case is different: it's when you have to build out a cluster, provide redundancy, or otherwise scale a hardware/software platform.
Once you have [[backups]], you can and should test the ability to restore those backups to a new hardware environment.  The restore procedure is going to depend on what you used to create your "image" in the first place.  Independent of the notion of backups, a system administrator (or even an experienced user) will want to "clone" a computer system.  That is make an identical copy or nearly identical copy of a computer on different hardware.  The most widespread use-case for this is when a person gets a new computer and wants to migrate the old computer software and data to the new hardware.  From the system administrator's perspective, the common use case is different: it's when you have to build out a cluster, provide redundancy, or otherwise scale a hardware/software platform.


Line 5: Line 7:
While cloning is never a real-time operation, synchronization can be. For system architectures that require high availability, or scalability, you will need some form of [[synchronization]] for various components of the system (disk, databases, etc.)
While cloning is never a real-time operation, synchronization can be. For system architectures that require high availability, or scalability, you will need some form of [[synchronization]] for various components of the system (disk, databases, etc.)


== dpkg --set-selections ==
==dpkg --set-selections==
One way to do this on Debian-based systems (including Ubuntu) is to use <code>dpkg</code> get/set-selections in combination with <code>apt-get</code> using it's dselect-upgrade option:
One way to do this on Debian-based systems (including Ubuntu) is to use <code>dpkg</code> get/set-selections in combination with <code>apt-get</code> using it's dselect-upgrade option:


Line 11: Line 13:
the following:
the following:


=== on System A ===
===on System A===
<source lang="bash">
<source lang="bash">
sudo dpkg --get-selections > package-list.txt
sudo dpkg --get-selections > package-list.txt
Line 17: Line 19:
copy package-list.txt from System A to System B
copy package-list.txt from System A to System B


=== on System B ===
===on System B===
<source lang="bash">
<source lang="bash">
sudo dpkg --set-selections < package-list.txt
sudo dpkg --set-selections < package-list.txt
Line 33: Line 35:
There are other tools to do the job too, and the tools you want to use for this depend on how automated you aim for this task to be, and how much you need/want to be able to customize each machine as it's being installed.
There are other tools to do the job too, and the tools you want to use for this depend on how automated you aim for this task to be, and how much you need/want to be able to customize each machine as it's being installed.


== KickStart ==
==KickStart==


'''[http://fedoraproject.org/wiki/Anaconda/Kickstart Kickstart]''' is a Red Hat package that deploys Red Hat to multiple installation targets with minimal customisation.  Aside from the wiki, it is also covered in [http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.3/html/Installation_Guide/index.html the Installation Guide for RedHat Enterprise Linux]
'''[http://fedoraproject.org/wiki/Anaconda/Kickstart Kickstart]''' is a Red Hat package that deploys Red Hat to multiple installation targets with minimal customisation.  Aside from the wiki, it is also covered in [http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.3/html/Installation_Guide/index.html the Installation Guide for RedHat Enterprise Linux]


== System Imager ==
==System Imager==


SystemImager is a third-party tool that does a better job. http://systemimager.org/
SystemImager is a third-party tool that does a better job. http://systemimager.org/


== Fully Automated Install ==
==Fully Automated Install==


'''[http://www.informatik.uni-koeln.de/fai/ fai]''' (fully automated install) is a Debian-based tool to do likewise.  Like System Imager, it's suitable for building clusters.  See the  
'''[http://www.informatik.uni-koeln.de/fai/ fai]''' (fully automated install) is a Debian-based tool to do likewise.  Like System Imager, it's suitable for building clusters.  See the  
* [http://www.informatik.uni-koeln.de/fai/ project website] and the
* [http://faiwiki.informatik.uni-koeln.de/index.php/Main_Page wiki].
* [http://www.slideshare.net/henningsprang/automated-installations-and-infrastructure-management-with-fai-presentation presentation]
* [[File:Fai_poster_a4.pdf|600px|thumb|right|Fully Automated Install (FAI) Poster]]


== Replicator ==  
*[http://www.informatik.uni-koeln.de/fai/ project website] and the
*[http://faiwiki.informatik.uni-koeln.de/index.php/Main_Page wiki].
*[http://www.slideshare.net/henningsprang/automated-installations-and-infrastructure-management-with-fai-presentation presentation]
*[[File:Fai_poster_a4.pdf|600px|thumb|right|Fully Automated Install (FAI) Poster]]
 
==Replicator==  


'''Replicator''' seems like it could use some volunteers to expand. http://replicator.sourceforge.net/ It tries to do some customization for differences in hard disk sizes, video cards, etc.  You may want to check it out.
'''Replicator''' seems like it could use some volunteers to expand. http://replicator.sourceforge.net/ It tries to do some customization for differences in hard disk sizes, video cards, etc.  You may want to check it out.


== Partition Image ==  
==Partition Image==  
'''[http://www.partimage.org/   Partition Image]''' is a semi-automated tool for replicating a Linux partition to multiple targets.  It is particularly useful as a system cloning tool, and has many uses for data backup and archiving of whole disks or partitions.
'''[http://www.partimage.org/ Partition Image]''' is a semi-automated tool for replicating a Linux partition to multiple targets.  It is particularly useful as a system cloning tool, and has many uses for data backup and archiving of whole disks or partitions.


== Replicating a PHP installation ==
==Replicating a PHP installation==
With the PHP CLI installed, you can use <code>php -m</code> to get a list of the compiled-in modules for your PHP installation.  This is the same as you would find by using the <code>phpinfo();</code> function in a script, except that you get exactly the info you need, in a list format that you can use.  That list can show you what you might need to install on another host to ensure that each host is compatible for the software you're running.  However, it won't show you the name of the actual packages that you need to install.  So, if you want to know what PHP packages are installed, you can do the following
With the PHP CLI installed, you can use <code>php -m</code> to get a list of the compiled-in modules for your PHP installation.  This is the same as you would find by using the <code>phpinfo();</code> function in a script, except that you get exactly the info you need, in a list format that you can use.  That list can show you what you might need to install on another host to ensure that each host is compatible for the software you're running.  However, it won't show you the name of the actual packages that you need to install.  So, if you want to know what PHP packages are installed, you can do the following
<source lang="bash">
<source lang="bash">