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.
Prerequisites
- 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:
- pam-devel
- openssl-devel
Walkthrough
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 created /root/downloads/omi-1.0.8/output … 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 total 7504 -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:
#! /bin/sh ### 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"
export OMI_HOME=/opt/omi-1.0.8/ DESC="omiserver" NAME=omiserver PIDFILE=/opt/omi-1.0.8/var/run/omiserver.pid SCRIPTNAME=/etc/init.d/$NAME
# Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions
# # Function that starts the daemon/service # do_start() { /opt/omi-1.0.8/bin/omiserver -d }
# |
Comments
- Anonymous
January 01, 2003
@Bartosz - the "pull" mode is not (yet) supported in this initial CTP release of Desired State Configuration for Linux - Anonymous
January 01, 2003
The Snover RT from TW, something about flying monkeys. I would add when pigs fly. Air Bacon ! Yummy!
It has happened, well he hinted forever that DSC was going to be for many platforms... - Anonymous
January 01, 2003
This should be fun to play with! - Anonymous
January 01, 2003
Nice news!
Why in root user? Where sudo? - Anonymous
January 01, 2003
@_organicit: a few errors in these steps have now been corrected, including moving the contents of /dsc/ up a level and a missing "make" step before "make reg." Thanks for pointing these out! - Anonymous
January 01, 2003
The comment has been removed - Anonymous
January 01, 2003
@Ravikanth - good catch, the file name for the tar operation has been corrected. - Anonymous
January 01, 2003
@Arty: you should be able to compile OMI and the DSC "Local Configuration Manager" for Mac. However, the "resource" providers are pretty-specific to Linux and would likely need a good bit of modification to work on a Mac. - Anonymous
January 01, 2003
@_organicit: Debian/Ubuntu are completely viable with this DSC release. The only difference should be the prerequisite packages. Using apt-get to install the following should allow you to build on Debian/Ubuntu:
build-essential
pkg-config
python
python-dev
libpam-dev
libssl-dev - Anonymous
May 19, 2014
I see this is RHEL specific for using yum to add supporting bits to make this work. What's the story on the debian side and running this on Ubuntu?? - Anonymous
May 19, 2014
What are the pros and cons of DSC on linux compared to guix or the nix package manager assuming that one never needs to target non-linux platforms? - Anonymous
May 19, 2014
The comment has been removed - Anonymous
May 19, 2014
Would this work for Macs? - Anonymous
May 20, 2014
Following the above instructions exactly on CentOS 6.5. It seems I'm missing a file. I get an error running 'make reg' as root: /root/downloads/omi-1.0.8/output/bin/omireg: cannot read provider library: /root/downloads/omi-1.0.8/output/lib/libdsccore.so
Anyone else? - Anonymous
May 20, 2014
Whoops looks like the instructions have been modified to include a 'make' before 'make reg'
Works now. Thanks! - Anonymous
May 20, 2014
The command "tar -xvf PSDSCLinux.tar" should be "tar -xvf PSDSCLinux.tar.gz" - Anonymous
May 20, 2014
Thanks for the quick turn around Kris!! - Anonymous
May 30, 2014
I'm trying to use the nxFile cmdlet to copy a directory - but I keep getting "Loading the instance document from the pending location did not succeed". Can you include an example of how to copy an entire directory using DSC? - Anonymous
September 18, 2014
The comment has been removed - Anonymous
October 23, 2014
Steve, if you've got a decent build environment set up, you should be able to install the necessary packages on a build server and create a custom package for OMI which can be deployed to the other servers you wish to manage.