PowerShell DSC for Linux, Step by Step
We are privileged to have a guest blogger on Building Clouds, Kristopher Bash. Kris is a Senior Program Manager in the Microsoft Open Source Technology Center. Last week at TechEd, Jeffrey Snover was a surprise guest in Don Jones’ presentation, where he demonstrated applying a configuration to a Linux box using PowerShell DSC through standards based management technology, WS-Man.
Kris has authored a step by step guide on the subject and we are lucky to have him share his work via BCB!
Building and Installing DSC for Linux
We have just announced the initial availability of a CTP for Windows PowerShell Desired State Configuration for Linux! This initial release is delivered as open-source code, and in this post, I will provide a detailed walkthrough for building and installing the DSC LCM on a Linux computer and applying your first configuration.
- Development tools (g++, GNU make)
- OMI 1.0.8 (https://collaboration.opengroup.org/omi/documents/30532/omi-1.0.8.tar.gz)
- Windows PowerShell Desired State Configuration for Linux source (https://github.com/MSFTOSSMgmt/WPSDSCLinux/releases/download/v1.0.0-CTP/PSDSCLinux.tar.gz)
- Python 2.5 or later and python-devel
Building OMI 1.0.8 requires the following packages:
In this walkthrough, I will build and install OMI and DSC on a CentOS 6 Linux computer.
· Firstly, I will install the required prerequisite packages to build OMI and the DSC components:
root@lab-dev-02 # yum groupinstall 'Development Tools'
root@lab-dev-02 # yum install pam-devel
root@lab-dev-02 # yum install openssl-devel
· Then, I can download and extract OMI 1.0.8 from The Open Group (https://collaboration.opengroup.org/omi/documents/30532/omi-1.0.8.tar.gz). I’ll use /root/downloads as my working directory for OMI and DSC:
root@lab-dev-02 # mkdir /root/downloads
root@lab-dev-02 # cd /root/downloads
root@lab-dev-02 # wget https://collaboration.opengroup.org/omi/documents/30532/omi-1.0.8.tar.gz
root@lab-dev-02 # tar -xvf omi-1.0.8.tar.gz
· Next, I’ll configure, build, and install OMI 1.0.8. By default, this will install OMI to /opt/omi-1.0.8/
root@lab-dev-02 # cd omi-1.0.8/
root@lab-dev-02 # ./configure
root@lab-dev-02 # make
root@lab-dev-02 # make install
Successfully installed under under: ///opt/omi-1.0.8
· OMI 1.0.8 is now installed on my computer, and I can move on to installing the DSC components (Local Configuration Manager and Resource Providers). I’ll install Python and download the DSC components:
root@lab-dev-02 # yum install python
root@lab-dev-02 # yum install python-devel
root@lab-dev-02 # cd /root/downloads
root@lab-dev-02 # wget https://github.com/MSFTOSSMgmt/WPSDSCLinux/releases/download/v1.0.0-CTP/PSDSCLinux.tar.gz
root@lab-dev-02 # tar -xvf PSDSCLinux.tar.gzroot@lab-dev-02 # mv ./dsc/* ./
root@lab-dev-02 # ls -l
-r-xr-xr-x. 1 3482 3482 78 May 12 09:53 configure
drwxrwxr-x. 2 3482 3482 4096 May 12 09:53 Example DSCs
-rw-r--r--. 1 root root 11862 May 15 08:41 index.html
drwxrwxr-x. 5 3482 3482 4096 May 12 09:53 LCM
-r--r--r--. 1 3482 3482 9144 May 12 09:53 license.txt
-r--r--r--. 1 3482 3482 183 May 12 09:53 Makefile
drwxr-xr-x. 46 root root 4096 May 15 08:45 omi-1.0.8
-rw-r--r--. 1 root root 3623018 May 15 08:41 omi-1.0.8.tar.gz
drwxrwxr-x. 9 3482 3482 4096 May 12 09:57 Providers
-rw-r--r--. 1 root root 4003840 May 12 10:58 PSDSCLinux.tar
-r--r--r--. 1 3482 3482 3958 May 12 09:53 README.txtroot@lab-dev-02 # make
root@lab-dev-02 # make reg
Now, both OMI and the Desired State Configuration components (Local Configuration Manager and Resource Providers) are installed.
Running OMI and the LCM
· The DSC installation performed in the previous steps registers the Local Configuration Manager as an OMI provider with OMI, so I simply need to run omiserver to enable DSC:
To run omiserver in an active tty (which is useful for debugging DSC):
root@lab-dev-02 # OMI_HOME=/opt/omi-1.0.8 /opt/omi-1.0.8/bin/omiserver
To run omiserver as a background process (daemon):
root@lab-dev-02 # OMI_HOME=/opt/omi-1.0.8 /opt/omi-1.0.8/bin/omiserver -d
· For ongoing management of the Linux system, we clearly want omiserver to run as a service and start on boot of the Linux computer. For that, we’ll need to create an init script. Here is an example init script:
### BEGIN INIT INFO
# Provides: omiserver
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: omiserver initscript
# Description: omiserver
### END INIT INFO
# Do NOT "set -e"
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
# Function that starts the daemon/service