summaryrefslogtreecommitdiff
path: root/src/_posts/2018-05-07-sparrowdo-getting-started.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/_posts/2018-05-07-sparrowdo-getting-started.adoc')
-rw-r--r--src/_posts/2018-05-07-sparrowdo-getting-started.adoc239
1 files changed, 0 insertions, 239 deletions
diff --git a/src/_posts/2018-05-07-sparrowdo-getting-started.adoc b/src/_posts/2018-05-07-sparrowdo-getting-started.adoc
deleted file mode 100644
index cbe2201..0000000
--- a/src/_posts/2018-05-07-sparrowdo-getting-started.adoc
+++ /dev/null
@@ -1,239 +0,0 @@
----
-date: 2018-05-07 14:04:43
-tags: Tutorial Perl6 Sparrowdo Raku LoneStar
-description: >
- Nondescript
----
-= Sparrowdo - Getting started
-:toc: preamble
-
-https://github.com/melezhik/sparrowdo[Sparrowdo] is a Perl 6 project to
-facilitate automatic configuration of systems. There's a
-https://sparrowhub.org/[repository of useful modules] to make specific cases
-easier to work with, but the
-https://github.com/melezhik/sparrowdo/blob/master/core-dsl.md[Core DSL] can
-already take care of many tasks. In this tutorial, I'll guide you through
-setting up Sparrowdo, bootstrapping it onto your local system, writing a task
-and running it.
-
-== Install Sparrowdo
-Sparrowdo is a http://perl6.org/[Perl 6] project, so you'll need to have Perl 6
-installed. We'll also use the Perl 6 package manager
-https://github.com/ugexe/zef/[zef] to install Sparrowdo itself. Luckily for us,
-there's a stable distribution of Perl 6 with everything we need added to it,
-called https://rakudo.org/files[Rakudo Star]. And to make it easier for
-GNU+Linux users, I wrote a tool to fetch the latest Rakudo Star release, compile
-it and install it, called https://github.com/Tyil/lonestar[LoneStar]. Since this
-tutorial will aim at GNU+Linux users, I'll use that to install Perl 6.
-
-=== Installing Perl 6 with LoneStar
-LoneStar is a Bash application to download, compile and set up Perl 6. It's a
-standalone application, meaning you don't have to install it to your system. You
-can just run it from the source directory. First, we'll have to get the source
-directory, which we'll do using `git`.
-
-[source,sh]
-----
-mkdir -p ~/.local/src
-git clone https://github.com/tyil/lonestar.git ~/.local/src/lonestar
-cd !$
-----
-
-Now you have the LoneStar sources available in `~/.local/src/lonestar`. You can
-run the application using `./bin/lonestar`. Running it, you'll get some help
-output:
-
-[source]
-----
-$ ./bin/lonestar
-lonestar - Installation manager for Rakudo Star
-
-Usage: lonestar <action> [arguments...]
-
-Actions:
- help [action]
- init [version=latest]
- install [version=latest]
- path [version=latest]
- reinstall [version=latest]
- upgrade
-----
-
-We'll be needing the `install` action to get Perl 6 installed, and the `init`
-action to configure the `$PATH` environment variable. Depending on your
-hardware, `install` may take a couple minutes as it will compile Rakudo Perl 6
-and install some base modules. You might want to grab a drink during this
-period.
-
-[source]
-----
-$ ./bin/lonestar install
-$ eval $(./bin/lonestar init)
-$ perl6 -v
-This is Rakudo Star version 2018.04.1 built on MoarVM version 2018.04.1
-implementing Perl 6.c.
-----
-
-[NOTE]
-====
-If there's a newer version available of Rakudo Star, the version numbers given
-by `perl6 -v` will differ for you.
-====
-
-=== Installing Sparrowdo with zef
-Now that you have Perl 6 available and installed, you can continue on using
-`zef` to install Sparrowdo. `zef` is bundled with Rakudo Star, so you don't have
-to do anything to get it working.
-
-[source,sh]
-----
-zef install Sparrowdo
-----
-
-This will instruct `zef` to install Sparrowdo and all its dependencies. This can
-take a couple minutes, again depending on the hardware of your machine.
-
-== Bootstrapping your system
-The first step to working with Sparrowdo is bootstrapping the system you wish to
-use it with. In this case, that'll be the local system. There's a `--bootstrap`
-option to do this automatically.
-
-[source,sh]
-----
-sparrowdo --bootstrap
-----
-
-[TIP]
-====
-If you wish to bootstrap a remote system, you can use the `--host` option to
-specify the system. For example: `sparrowdo --host=192.168.1.2 --bootstrap`.
-====
-
-Now your system is ready to be configured automatically using Sparrowdo!
-
-== Sparrowfiles
-Sparrowfiles are the files that describe the tasks Sparrow should execute to
-get you the configuration you want. They are valid Perl 6 code, and call the
-subroutines (or _sparrowtasks_) that will handle the actual actions. By default,
-when running `sparrowdo`, it will look for a file named `sparrowfile` in the
-current directory.
-
-To make our sample, we'll create a new directory to work in, so we have clean
-directory that can be shared easily. You can also keep this directory under
-version control, so you can distribute the `sparrowfile` with all its templates.
-
-[TIP]
-====
-If you just want to create an empty directory to test things in, without
-"polluting" the rest of your system, just call `cd -- "$(mktemp -d)"`. This will
-create a temporary directory and change the working directory to there.
-====
-
-I'll be using `~/.local/sparrowdo/local-dns` to work in, as I'll be setting up a
-local dns cache with http://www.thekelleys.org.uk/dnsmasq/doc.html[dnsmasq] for
-the sample code.
-
-=== Writing a `sparrowfile`
-As noted in the previous paragraph, for the sake of a demo I'll guide you
-through creating a `sparrowfile` to install and configure `dnsmasq` as a local
-DNS cache. Using your favourite `$EDITOR`, write the following to `sparrowfile`:
-
-[source,perl6]
-----
-package-install "dnsmasq";
-directory "/etc/dnsmasq.d";
-file-create "/etc/dnsmasq.conf", %(content => slurp "dnsmasq.conf");
-file-create "/etc/dnsmasq.d/resolv.conf", %(content => slurp "resolv.conf");
-service-start "dnsmasq";
-----
-
-This `sparrowfile` will set up the following configuration for `dnsmasq`:
-
-- Install the `dnsmasq` package
-- Create the `/etc/dnsmasq.d` directory in which we'll store configuration files
- for `dnsmasq`
-- Create the configuration files `dnsmasq.conf` at `/etc/dnsmasq.conf`
-- Create the `resolv.conf` in the `dnsmasq.d` directory
-- Start the `dnsmasq` service
-
-The configuration files will be created based on the configuration files in the
-current directory. So for this to work, you'll need to also create the
-appropriate configuration files. Let's start off with the main `dnsmasq`
-configuration in `dnsmasq.conf`:
-
-[source,conf]
-----
-listen-address=127.0.0.1
-
-no-dhcp-interface=
-resolv-file=/etc/dnsmasq.d/resolv.conf
-----
-
-This will make `dnsmasq` listen on the loopback interface, so it'll only be able
-to be used by the local machine. Furthermore, DHCP functionality will be
-disabled, and the upstream resolvers are read from `/etc/dnsmasq.d/resolv.conf`.
-The contents of that file are as follows:
-
-[source,conf]
-----
-nameserver 37.235.1.174
-nameserver 37.235.1.177
-----
-
-These nameservers are part of the https://freedns.zone/en/[FreeDNS] project. You
-can of course use whatever other DNS provider you want to use as your upstream
-servers. Now, for `dnsmasq` to be used, you will also need to set your machine's
-DNS resolvers to point to the `dnsmasq` service. This is defined in
-`/etc/resolv.conf`, so lets append the following to our `sparrowfile` to set
-that up.
-
-[source,conf]
-----
-bash "chattr -i /etc/resolv.conf";
-file-delete "/etc/resolv.conf";
-file-create "/etc/resolv.conf", %(content => "nameserver 127.0.0.1");
-bash "chattr +i /etc/resolv.conf";
-----
-
-This will remove the "immutable" attribute from `/etc/resolv.conf` if it's set.
-Next it will remove the current `/etc/resolv.conf` and write out a new one which
-only refers to the local machine as DNS resolver. This is to ensure an existing
-`/etc/resolv.conf` gets recreated with the configuration we want. Finally, it
-adds back the immutable attribute to the file, so other processes won't
-overwrite it.
-
-=== Running the `sparrowfile`
-To run the `sparrowfile` and get the setup you desire, run the `sparrowdo`
-command with `--local_mode` and wait.
-
-[source]
-----
-sparrowdo --local_mode
-----
-
-[NOTE]
-====
-If you want to run this on a remote machine to configure that one instead, you
-can use `--host=<ip>` instead of `--local_mode`.
-====
-
-You can check whether it actually worked by inspecting the files in
-`/etc/dnsmasq.d` and your `/etc/resolv.conf`. The easiest way to check their
-contents would be by using `cat`:
-
-[source]
-----
-cat /etc/dnsmasq.d/dnsmasq.conf
-cat /etc/dnsmasq.d/resolv.conf
-cat /etc/resolv.conf
-----
-
-== Closing words
-
-You should now have a working local DNS setup, configured programmatically
-through Sparrowdo. This allows you easily get it working on other machines as
-well, and updates can be done in a much simpler fashion for all of them
-together.
-
-If you have more interest in automating configuration with Sparrowdo, go check
-their website, https://sparrowdo.wordpress.com/.