<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Lab Notes on Ed Randall</title>
    <link>https://www.edrandall.uk/lab-notes/</link>
    <description>Recent content in Lab Notes on Ed Randall</description>
    <image>
      <title>Ed Randall</title>
      <url>https://www.edrandall.uk/social-card.png</url>
      <link>https://www.edrandall.uk/social-card.png</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-GB</language>
    <lastBuildDate>Sun, 10 Nov 2024 09:07:39 +0000</lastBuildDate><atom:link href="https://www.edrandall.uk/lab-notes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Create a Windows VM in AWS using terraform</title>
      <link>https://www.edrandall.uk/lab-notes/win-serv/</link>
      <pubDate>Sun, 10 Nov 2024 09:07:39 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/win-serv/</guid>
      <description>AWS Windows Server Deployment with Terraform This is a simple Terraform configuration for deploying a Windows Server instance on AWS—a useful setup if you occasionally need a quick Windows environment for testing, development, or troubleshooting. It provisions a basic infrastructure including a VPC, subnet, and an RDP-accessible Windows Server instance. Access is restricted to your own IP address to provide a reasonable layer of security without over-complicating things.
Code The code can be found in this github repository.</description>
    </item>
    
    <item>
      <title>CompTIA DataSys&#43; Notes</title>
      <link>https://www.edrandall.uk/lab-notes/database/</link>
      <pubDate>Sun, 08 Sep 2024 10:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/database/</guid>
      <description>As I prepared for the CompTIA DataSys+ exam, I gathered a series of notes and observations that helped me deepen my understanding of the database concepts which are covered in the exam&#39;s syllabus. In this post, I’m sharing some of those details. Some of the topics discussed extend beyond the scope of the exam, and not everything included in the exam&#39;s syllabus is documented. This post also contains details of the test database I designed for hands-on practice.</description>
    </item>
    
    <item>
      <title>Time Machine Backups with Docker: A Simple Setup</title>
      <link>https://www.edrandall.uk/lab-notes/time-machine-docker/</link>
      <pubDate>Tue, 16 Apr 2024 10:00:47 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/time-machine-docker/</guid>
      <description>This post explains how I run samba and avahi-daemon inside a docker container to act as a time-machine server for all the Mac computers on my home network.
Dockerfile I used ubuntu:focal as a base image and created the following Dockerfile:
FROM ubuntu:focal #Install samba and avahi-daemon inside the image RUN apt update &amp;amp;&amp;amp; apt install samba avahi-daemon -y #Expose the ports which are needed for samba and avahi-daemon EXPOSE 137/udp 138/udp 139 445 5353/udp #Copy config files into the image COPY smb.</description>
    </item>
    
    <item>
      <title>Temporary Cloud VPN with EC2 and Wireguard</title>
      <link>https://www.edrandall.uk/lab-notes/wireguard-ec2-vpn/</link>
      <pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/wireguard-ec2-vpn/</guid>
      <description>This quick terraform project sets up an EC2 instance, configures wireguard, generates the required keys (including a PSK) and provides the wireguard &amp;ldquo;Client&amp;rdquo; configuration.
The code can be found here
WARNING: Cloud network egress/throughput will incur costs which can vary from region to region.
Purpose This terraform code (and associated template file containing a bash script) will create an EC2 instance which is running wireguard and can be used as a VPN endpoint.</description>
    </item>
    
    <item>
      <title>Building a Kubernetes Cluster on EC2</title>
      <link>https://www.edrandall.uk/lab-notes/kubernetes-on-ec2/</link>
      <pubDate>Sun, 27 Aug 2023 09:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/kubernetes-on-ec2/</guid>
      <description>Github Repo All the code required can be found in the github repo: github.com/edrandall-dev/kubernetes-on-ec2
Introduction Last year, when I was learning Kubernetes, I wanted to create my own cluster on AWS using EC2 instances. The idea behind this was go through the installation of Kubernetes from start to finish, learning everything I needed to along the way.
I&amp;rsquo;ve also used Amazon&amp;rsquo;s Elastic Kubernetes Service (EKS) to deploy Neo4j using the official Neo4j Helm Charts.</description>
    </item>
    
    <item>
      <title>Cloudflare Tunnels: A Quicker Way to Reach Your Home Lab</title>
      <link>https://www.edrandall.uk/lab-notes/cloudflare-tunnels/</link>
      <pubDate>Sat, 15 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/cloudflare-tunnels/</guid>
      <description>Setting up your own VPN can be complex In this post, I went through how I&amp;rsquo;ve setup Wireguard to be able to connect back to my home network when on the road. When it comes to choosing a VPN, Wireguard stands out for me in terms of speed, security and ease of configuration. However, there are a few complexities associated with setting up any VPN to securely connect back to a home network.</description>
    </item>
    
    <item>
      <title>Kubernetes Notes &amp; CKA Exam Prep</title>
      <link>https://www.edrandall.uk/lab-notes/kubernetes-notes/</link>
      <pubDate>Tue, 04 Jul 2023 08:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/kubernetes-notes/</guid>
      <description>Overview This post covers 3 major topics:
Kubernetes Lab Environment: The steps that I took to setup a Kubernetes cluster from scratch, in a self-hosted virtualised environment using Oracle Virtualbox and Hashicorp Vagrant Kubernetes Notes, Commands and Manifests: A collection of commands which I noted down as part of my preparation for the Certified Kubernetes Administrator exam Information Sources: A list of links to the main sources of information which I used when creating this environment and learning Kubernetes Kubernetes Lab Environment The VMs which formed the Kubernetes cluster were deployed on a Dell Precision workstation with plenty of CPU and RAM resources:</description>
    </item>
    
    <item>
      <title>Getting started with Kubernetes on Amazon EKS using Helm</title>
      <link>https://www.edrandall.uk/lab-notes/helm/</link>
      <pubDate>Wed, 01 Mar 2023 09:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/helm/</guid>
      <description>In this post, I will go over the steps needed to provision a Kubernetes cluster in AWS, and deploy a Neo4j cluster using Neo4j&amp;rsquo;s helm charts.
This post takes steps from the official Neo4j Kubernetes Documentation
Prerequisites An AWS Account Configured AWS Command Line Interface An SSH Key named id_rsa.pub. If you do not have one, you can generate it by running: ssh-keygen -t rsa -C &amp;quot;your-name@example.com&amp;quot; Setting up a Kubernetes Cluster in EKS Installation of tools and applications In order to create a Kubernetes (EKS) cluster in AWS, you will need to download the following applications: kubectl</description>
    </item>
    
    <item>
      <title>Announcing the newest Neo4j and AWS Partner Solution</title>
      <link>https://www.edrandall.uk/lab-notes/neo4j-aws-quickstart/</link>
      <pubDate>Fri, 24 Feb 2023 10:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/neo4j-aws-quickstart/</guid>
      <description>My post on the neo4j blog explains how to get up and running with Neo4j using the AWS partner solution.
AWS Partner Solutions (formerly known as AWS Quick Start) are pre-configured reference deployments that work seamlessly with Amazon Web Services (AWS) and follow AWS’s recommended design practices. They provide customers with a variety of deployment options for managing their workloads on AWS.
Neo4j’s AWS Partner Solution for AWS is a quick and easy way to deploy a fully-managed Neo4j cluster on the AWS platform.</description>
    </item>
    
    <item>
      <title>Spinning up a Hugo Website on Cloudflare Pages</title>
      <link>https://www.edrandall.uk/lab-notes/hugo/</link>
      <pubDate>Mon, 30 Jan 2023 22:10:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/hugo/</guid>
      <description>This post describes how I got this website up and running using Hugo, on cloudflare pages.
Install Hugo To install hugo, follow the instructions on the hugo website. If you&amp;rsquo;re on a mac (and have homebrew installed) the simplest way is:
brew install hugo With hugo installed the next stage is to create the new site, which is done locally. The following commands will create the framework for the new website.</description>
    </item>
    
    <item>
      <title>EC2 Instances in Private Subnets behind an application LoadBalancer</title>
      <link>https://www.edrandall.uk/lab-notes/aws-private-lb/</link>
      <pubDate>Thu, 26 Jan 2023 22:43:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/aws-private-lb/</guid>
      <description>Recently, I had to re-visit an old architectural challenge in AWS that I came across a couple of years ago but couldn&amp;rsquo;t quite remember how to resolve: EC2 instances which have no public IP address (residing in a private subnet) which can accept requests from (and serve responses back to) the internet.
The motivation for this particular topology is security focused: The EC2 instances cannot be directly addressed via the internet due to the absence of a public IP, but can serve (web, in this example) content over the internet using the load balancer.</description>
    </item>
    
    <item>
      <title>Notes on Terraform Modules and Variables</title>
      <link>https://www.edrandall.uk/lab-notes/tf-modules-vars/</link>
      <pubDate>Fri, 06 Jan 2023 11:40:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/tf-modules-vars/</guid>
      <description>In this post, I outline the steps needed to take an input from a terraform parent (or calling) module and pass it to a config file on a target EC2 instance.
What are Terraform Modules? Using modules in terraform helps to organise and reuse code, allowing a module to be defined once and used many times. For example, a development team may want to quickly create and destroy a number of EC2 instances.</description>
    </item>
    
    <item>
      <title>Creating subnets in AWS using terraform with &#39;count&#39;, &#39;join&#39; and &#39;element&#39;</title>
      <link>https://www.edrandall.uk/lab-notes/terraform-subnets/</link>
      <pubDate>Tue, 20 Dec 2022 17:25:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/terraform-subnets/</guid>
      <description>The following code snippets show how to create three private subnets in AWS using terraform with &amp;lsquo;count&amp;rsquo;, &amp;lsquo;join&amp;rsquo; and &amp;rsquo;element&amp;rsquo;:
To start with the following variables were declared and set:
terraform.tfvars base_cidr_block = &amp;#34;192.168.0.0/16&amp;#34; node_count = 3 availability_zones = [&amp;#34;a&amp;#34;, &amp;#34;b&amp;#34;, &amp;#34;c&amp;#34;] variables.tf variable &amp;#34;base_cidr_block&amp;#34; { description = &amp;#34;The base of the address range to be used by the VPC and corresponding Subnets&amp;#34; } variable &amp;#34;availability_zones&amp;#34; { description = &amp;#34;A list containing 3 AZs&amp;#34; type = list(string) } variable &amp;#34;node_count&amp;#34; { description = &amp;#34;The number of ec2 instances to deploy&amp;#34; type = number } Three subnets are then created using a single resource block.</description>
    </item>
    
    <item>
      <title>Setting up a home VPN using Wireguard on Mikrotik</title>
      <link>https://www.edrandall.uk/lab-notes/wireguard/</link>
      <pubDate>Tue, 20 Dec 2022 10:25:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/wireguard/</guid>
      <description>I wanted to use create a VPN back to my home network which I could use on the road. The idea was that I could interact with resources on my home network but also have a secure tunnel which I could use if I was needed to use an untrusted WiFi hotspot when in hotels, coffee shops etc.
I had previously implemented OpenVPN to do this, with the VPN server running on a small linux machine inside my home network.</description>
    </item>
    
    <item>
      <title>Always-on Internet at Home with 4G Failover</title>
      <link>https://www.edrandall.uk/lab-notes/4g-backup/</link>
      <pubDate>Mon, 19 Dec 2022 14:23:47 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/4g-backup/</guid>
      <description>Like most people, my domestic ISP goes down sometimes. I work from home most of the time and the most common solution when this problem occurs is to &amp;rsquo;tether&amp;rsquo; a phone to use it&amp;rsquo;s 4G connection. This is OK, but a solution which allowed my entire home network to switch over to a backup internet connection would be much better&amp;hellip; As well as my laptop maintaining a connection, movies could still be streamed (backup connection bandwith permitting) and IoT devices would keep working - you get the general idea.</description>
    </item>
    
    <item>
      <title>Neo4j &amp; Docker</title>
      <link>https://www.edrandall.uk/lab-notes/neo4j-docker/</link>
      <pubDate>Fri, 11 Mar 2022 10:00:47 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/neo4j-docker/</guid>
      <description>This is a very quick script to get a single instance of neo4j running in a docker container. The username and password is set using the NEO4J_AUTH environment variable.
#!/bin/bash # # Script: neo4j-docker.sh # Purpose: install neo4j container image after some simple environmentment prep # DOCKER=$(which docker) [ $? == 0 ] || { echo &amp;#34;ERROR: Check if docker is installed (and in your PATH)&amp;#34; ; exit 1; } DATA_DIR=&amp;#34;$HOME/docker/neo4j-volumes/data&amp;#34; LOG_DIR=&amp;#34;$HOME/docker/neo4j-volumes/logs&amp;#34; IMPORT_DIR=&amp;#34;$HOME/docker/neo4j-volumes/import&amp;#34; PLUGINS_DIR=&amp;#34;$HOME/docker/neo4j-volumes/plugins&amp;#34; RUNNING_CONTAINER=$($DOCKER ps -a | grep &amp;#34;neo4j:latest&amp;#34; | awk {&amp;#39;print $1&amp;#39;}) [ -z &amp;#34;$RUNNING_CONTAINER&amp;#34; ] || docker rm -f $RUNNING_CONTAINER [ -d $DATA_DIR ] &amp;amp;&amp;amp; rm -rf $DATA_DIR/* || mkdir $DATA_DIR [ -d $LOG_DIR ] &amp;amp;&amp;amp; rm -rf $DATA_DIR/* || mkdir $LOG_DIR [ -d $IMPORT_DIR ] &amp;amp;&amp;amp; rm -rf $DATA_DIR/* || mkdir $IMPORT_DIR [ -d $PLUGINS_DIR ] &amp;amp;&amp;amp; rm -rf $DATA_DIR/* || mkdir $PLUGINS_DIR $DOCKER run \ --name testneo4j \ -p7474:7474 -p7687:7687 \ -d \ -v $DATA_DIR:/data \ -v $LOG_DIR:/logs \ -v $IMPORT_DIR:/var/lib/neo4j/import \ -v $PLUGINS_DIR:/plugins \ --env NEO4J_AUTH=neo4j/test1234 \ neo4j:latest </description>
    </item>
    
    <item>
      <title>Restoring WebApps</title>
      <link>https://www.edrandall.uk/lab-notes/restoring-webapps/</link>
      <pubDate>Fri, 16 May 2014 12:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/restoring-webapps/</guid>
      <description>Restoring Web Applications for edrandall.co.uk
Section A - Install &amp;amp; Configure the WebServer with SSL Support
Install the required ubuntu webserver packages aptitude install apache2 php5 php5-mcrypt php5-curl
Create the following webserver configuration files: * /etc/apache2/conf.d/ejr-servers.conf NameVirtualHost 192.168.2.2:443 * /etc/apache2/sites-available/restore.edrandall.co.uk ServerName restore.edrandall.co.uk &amp;lt;VirtualHost 192.168.2.2:443&amp;gt; SSLEngine On SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key DocumentRoot /var/www/ &amp;lt;Directory &amp;#34;/var/www&amp;#34;&amp;gt; Order deny,allow Deny from all Authname &amp;#34;restore.edrandall.co.uk&amp;#34; AuthUserFile /var/www/.htpasswd AuthType Basic Require valid-user Allow from 192.168.2. Satisfy Any &amp;lt;/Directory&amp;gt; &amp;lt;/VirtualHost&amp;gt; * /etc/apache2/ports.</description>
    </item>
    
    <item>
      <title>RHCE Notes</title>
      <link>https://www.edrandall.uk/lab-notes/rhce-notes/</link>
      <pubDate>Fri, 29 Jun 2012 12:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/rhce-notes/</guid>
      <description>A) iptables script
#!/bin/bash ipt=$(which iptables) #Flush all existing rules $ipt -F #Set default policies $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD DROP $ipt -A INPUT -i lo -j ACCEPT #Allow stuff back in that we’ve sent out $ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #Allow inbound SSH to this box $ipt -A INPUT -p tcp --dport 22 --source 172.16.0.0/16 -j ACCEPT #Save the rules /sbin/service iptables save #Show the rules $ipt --list -n -v Test (from desktop machine):</description>
    </item>
    
    <item>
      <title>LUKS Encryption on RedHat</title>
      <link>https://www.edrandall.uk/lab-notes/luks-encyption-redhat/</link>
      <pubDate>Tue, 21 Feb 2012 12:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/luks-encyption-redhat/</guid>
      <description>Creating an Encrypted Disk Partition
Created a new logical partition (/dev/vda5) which is 500MB in size
After a reboot, check the partition is there and looks okay: fdisk -cul /dev/vda
Prepare the partition for encryption (enter YES and passphrase when prompted): cryptsetup luksFormat /dev/vda5
Unlock the encrypted partition cryptsetup luksOpen /dev/vda5 encpartition
Have a look in the /dev/mapper directory, there’s an entry for /dev/mapper/encrypted partition: lrwxrwxrwx. 1 root root 7 Feb 21 12:24 /dev/mapper/encpartition -&amp;gt; .</description>
    </item>
    
    <item>
      <title>Setting up cobbler for Red Hat Kickstart</title>
      <link>https://www.edrandall.uk/lab-notes/cobbler/</link>
      <pubDate>Mon, 09 Jan 2012 12:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/cobbler/</guid>
      <description>Download the epel packages from: http://fedoraproject.org/wiki/EPEL
Edit the files: /etc/yum.repos.d/epel-repo and /etc/yum.repos.d/epel-testing.repo
Uncomment the following line:
#baseurl=http:// Comment the following line (Otherwise yum won’t find the epel packages and won’t work properly.):
mirrorlist=http:// Install cobbler: yum install cobbler policycoreutils-python-2.0.83-19.18.el6.i686 Install mod_python for apache
yum install mod_python Install dhcp
yum install dhcp Install syslinux and syslinux-tftpboot
yum install syslinux syslinux-tftpboot Cobbler and SELinux don’t play nice together. Whilst it is possible to configure cobbler to work with selinux, it is easier to disable it altogether.</description>
    </item>
    
    <item>
      <title>Rename Multiple Files</title>
      <link>https://www.edrandall.uk/lab-notes/multiple-files/</link>
      <pubDate>Thu, 03 Mar 2011 12:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/multiple-files/</guid>
      <description>I know there’s many ways to do this, but I quite like this method for a batch file rename:
ls foo*.jpg | awk &amp;#39;{print(&amp;#34;mv &amp;#34;$1&amp;#34; &amp;#34;$1)}&amp;#39; | sed &amp;#39;s/foo/bar/2&amp;#39; | /bin/bash If you want to do a dry run first, then just omit the pipe to bash:
ls foo*.jpg | awk &amp;#39;{print(&amp;#34;mv &amp;#34;$1&amp;#34; &amp;#34;$1)}&amp;#39; | sed &amp;#39;s/foo/bar/2&amp;#39; </description>
    </item>
    
    <item>
      <title>Netcat Tar Pipe</title>
      <link>https://www.edrandall.uk/lab-notes/netcat-tar-pipe/</link>
      <pubDate>Tue, 01 Mar 2011 12:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/netcat-tar-pipe/</guid>
      <description>Sometimes SCP, SFTP or other methods of file transfer aren&amp;rsquo;t available. Using netcat and tar, files can be archived and sent over the network on the fly, like this:
On the destination server: mkdir /destination/directory cd /destination/directory nc -l 7000 | tar x On the source server: cd /source/directory tar cf - * | nc destination-hostname 7000 </description>
    </item>
    
    <item>
      <title>Configure logging in IPtables</title>
      <link>https://www.edrandall.uk/lab-notes/iptables-logdrop/</link>
      <pubDate>Thu, 25 Nov 2010 10:07:33 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/iptables-logdrop/</guid>
      <description>Its useful to have a dedicated logfile which contains details of packets which are dropped or rejected by your iptables firewall. This will allow to you see when connection attempts are being made to your server by IP addresses which are being blocked. This can also be extremely useful when troubleshooting your iptables firewall.
If you’re not up to speed with iptables, then you’ll need to find another guide to work through.</description>
    </item>
    
    <item>
      <title>Setting up mysql replication</title>
      <link>https://www.edrandall.uk/lab-notes/mysql-slave/</link>
      <pubDate>Wed, 24 Nov 2010 12:40:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/mysql-slave/</guid>
      <description>On the primary DB node: Enable binary logging in my.cnf:
[mysqld] log_bin=mysql-bin server-id=1 Restart MySQL
/etc/init.d/mysqld restart Create a user for replication:
mysql&amp;gt; GRANT REPLICATION SLAVE ON *.* TO &amp;#39;user&amp;#39;@&amp;#39;1.2.3.4&amp;#39; IDENTIFIED BY &amp;#39;slavepass&amp;#39;; Find filename of binlog:
mysql&amp;gt; show master status; Do the mysqldump of the database you want to replicate:
mysqldump -c –create-options -u root -ppassword –lock-tables databasename &amp;gt; dump.sql Copy the sql file over to the slave:
scp dump.</description>
    </item>
    
    <item>
      <title>Mounting disks by label in Linux</title>
      <link>https://www.edrandall.uk/lab-notes/mount-disk-label/</link>
      <pubDate>Wed, 24 Nov 2010 12:20:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/mount-disk-label/</guid>
      <description>USB hard disks are often allocated different device names by Linux each time the system boots. For example: what is currently recognized as /dev/sda1 may well end up being /dev/sdb1 after a reboot. To get round this, it is possible to mount disks by label rather than device name by taking the following steps (as root):
First of all, you need to see if the partition in question already has a label:</description>
    </item>
    
    <item>
      <title>Creating a self-signed certifcate for apache</title>
      <link>https://www.edrandall.uk/lab-notes/self-signed-cert/</link>
      <pubDate>Wed, 24 Nov 2010 12:10:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/self-signed-cert/</guid>
      <description>Creating a self-signed certificate for an apache server is fairly straightforward. The following steps show you how to do it on an ubuntu / debian based system running apache:
If it doesn’t already exist, make the directory for the key, csr and certificate to go in:
mkdir /etc/apache2/ssl Go to that directory:
cd /etc/apache2/ssl Generate the private key (Enter a passphrase when prompted, we’ll remove this later)
openssl genrsa -des3 -out server.</description>
    </item>
    
    <item>
      <title>Change case of all files in a directory</title>
      <link>https://www.edrandall.uk/lab-notes/case-change/</link>
      <pubDate>Wed, 24 Nov 2010 12:00:00 +0000</pubDate>
      
      <guid>https://www.edrandall.uk/lab-notes/case-change/</guid>
      <description>Here&amp;rsquo;s an easy way change the names of all files in a directory from upper to lower case (note that we are using ls -1 and not ls -l in this example):
user@server:~/test$ ls -1 FIVE FOUR ONE THREE TWO user@server:~/test$ for file in `ls -1` ; do newfile=`echo $file | tr .A-Z. .a-z.` ; mv $file $newfile ; done user@server:~/test$ ls -1 five four one three two To invert the process, simply change reverse the options passed to the ‘tr’ command like this:</description>
    </item>
    
  </channel>
</rss>
