A ride around Wainstalls

I went out for a ride yesterday, it was such a gorgeous spring morning I just had to. In all I rode 25 miles, a trip to the farm shop in the morning, and this spectacular ride to the local wind farm and a night time blast around the local reservoir.

sadly the wind farm is still closed to the public, they’ve just upgraded the turbine and I think they’re still being tested, they’ll open it up soon enough πŸ˜œπŸ‘

This ride through Wainstalls was gorgeous though and if the weather holds I’ll be back again then over to Jerusalem farm, drop down into Todmorden, then back home.

I had no choice but to take a photo or two 😎

Enjoy the ride, I know I did.

Lezyne Super Drive XL Bike Light Review

I’ve had this bike light for a couple of years now and I paid Β£120 for it, though it’s dropped in price in that time, it’s still packs an impressive wallop.

It has 4 modes, Full power, normal power, half power and half power flashing, during the day I’d use half power flashing if the conditions warrant it, but it’s night time when this you need it the most… Beast Mode activated!

At normal power it’s amazing, but at full it’s even better, I bombed around my local reservoir forΒ  this review, and it’s like daylight. I can see everything and people can see me coming, always a good thing.

It was very expensive to be honest, I probably over paid too, but you can now pick up one of these for around Β£70 on google

I’m not sure if you get the spare battery like I did, but it’s an 18650 and they’re easy to get hold of, just be wary of ebay sellers selling cheap Chinese and fake 10,000 mah, best stick to the 2,500mah batteries you can buy at retail.

https://www.youtube.com/watch?v=eSSi2K-Wwh4

Lezyne Super Drive XL bike light instructions

Time to Quit

 

Fight Club Cinemagraph

I’ve woken up during the past couple of night with leg cramps, I know it’s not from a lack of salt in my diet, I honestly think it’s a matter of oxygen or lack of.

I’ve noticed over the past few weeks that my lungs are getting much more congested than normal, and early morning I’ll start to cough hard. I’m off to Keelham farmshop soon for some dinner and I’m already dreading it. So it might now be the time to quit, ready or not I’m going to give it a damn good go.

I have e-cigarettes at the ready, and while they’ll help I know I’ll still need will-power aplenty. Here I go. Wish me luck.

 

 

Lithium Ion Battery Care

Batteries aren’t watt they used to be πŸ™‚ See what I did there…? I’ll get my coat.

They used to be weak in comparison to today’s standards, they leaked worse than sewage into the Thames, they’d be flat in 10 minutes on today’s modern appliances and they were dangerous to just throw in the bin.

If you see bins for batteries anywhere, then that’s where you need to dump them, and they then get recycled! Far safer than landfill.

First off Ni-cad (Nickel Cadmium) had a “memory”, if you discharged them to say 50% enough times then the battery would think 50% is the full capacity. Do you remember getting a warning that the battery in your laptop of phone was empty, but it’d still run for hours right? That’s the Ni-Cad memory at work.

Li-Ion and Li-po are different to any battery you’ve ever had before, they don’t have a memory, they can be charged hundreds of times before you see any loss in capacity, and most importantly they are much more energy dense than ever… and they’re only ever getting better.

But you do still need to consider battery care, and occasionally you need to discharge them fully. Storage is also a factor if you’re not going to use them constantly. Today’s lithium battery killer is heat, (it used to be you could revive old batteries with a little heat), today’s batteries are effectively killed with heat. So keep them cool, especially when storing them.

So how to really care for your battery.

  • Only charge to 100% if you’re really sure you need 100%
  • Try not to charge more than 80% and never let the charge drop below 20%
  • After 30 charges, try to discharge the battery as low as you dare, and never never let it drop below 5%
  • Once a battery drops below 2.2v it’s dead, it can be resurrected with boost charges, but these can be dangerous if the battery internally suffered serious damage. Nominal charge for an 18650 is 4.2v
  • If you aren’t using the battery for a while drop the charge to 20% and store in a cool/cold place away from moisture.
  • Never charge to 100% and leave it on charge, let the charge dissipate slowly, you probably won’t notice a difference anyway.

The SRSuntour battery for the Carrera Crossfire-E should do up to 500 charges before you see any real degradation, but if you follow these simple tips, it should give optimum life beyond 500 charges.

Happy Cycling πŸ™‚

Sources: http://batteryuniversity.com/learn/article/how_to_prolong_lithium_based_batteries

And: http://www.techrepublic.com/blog/five-apps/five-tips-for-extending-lithium-ion-battery-life/

 

Install Nextcloud cloud server on a Raspberry Pi

Nextcloud is a personal cloud server, you’re not relying on Apple cloud or Google or Dropbox to hold and secure (laughable) your data. If you have a Raspberry Pi at home you can host your own cloud server. There are desktop apps for Windows and Macs and apps for almost ALL mobile operating systems too.

Nextcloud – a safe home for all your data

I’ve gone for the personal route because I find the free cloud server really don’t offer enough storage space, and security is a joke for most of them. Plus with the SSL guide you can make sure your is as secure as possible.

For easy reference:

Code:

sudo apt-get update

Code:

sudo apt-get install apache2

Code:

sudo apt-get install apache2 php7.0 php7.0-curl php7.0-gd php7.0-imap php7.0-json php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-xmlrpc libapache2-mod-php7.0

Code:

sudo service apache2 restart

Download link: https://nextcloud.com/install/#instructions-server

Code:

sudo wget https://download.nextcloud.com/server/releases/nextcloud-11.0.2.zip

Code:

sudo mv nextcloud-11.0.2.zip /var/www/html

Code:

cd /var/www/html

Code:

sudo unzip -q nextcloud-11.0.2.zip

Make a folder for the data!!!

Code:

sudo mkdir -p /var/www/html/nextcloud/data

Code:

sudo chown www-data:www-data /var/www/html/nextcloud/data

Code:

sudo chmod 750 /var/www/html/nextcloud/data

Next, set the correct ownerships on Nextcloud β€œconfig” and β€œapps” directories:

Code:

cd /var/www/html/nextcloud

Code:

sudo chown www-data:www-data config apps

Create a Login for Nextcloud

In a browser, surf to your new Owncloud web page. Use the URL:
http://your Pis IP address/nextcloud

For example, the address of my Pi is 192.168.1.9. So I go the the URL: http://192.168.1.9/nextcloud

Increase upload size from 2mb

Code:

sudo nano /etc/php5/apache2/php.ini

Change these two lines:
post_max_size = 8M
upload_max_filesize = 2M
to:
post_max_size = 20M
upload_max_filesize = 20M

Code:

sudo service apache2 restart

Now setting up your own cloud isn’t good enough, you also need to secure all traffic and data, to encrypt the data on the drive use the plugin in the admin panel, for SSL use this tutorial.
Check domain and hostname

Code: Select all

domainname -b mysite.ddns.net

Code: Select all

sudo nano /etc/hostname

Make the domain name stick

Code: Select all

sudo nano /etc/sysctl.conf

Setup SSL on a Raspberry Pi in 2 minutes

UPDATE: Lets Encypt have an auto install bot and it’s a signed certificate, meaning no warning! https://letsencrypt.org/

 

Granted this is a self signed certificate and not one from an issuing authority, but for most domestic uses it’s fine.

Make a directory called ssl

Code: Select all

sudo mkdir /etc/apache2/ssl

Create the certificate

Code: Select all

sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key

for the domain name I used my ddns.net domain, and that’s fine, but it has to be a domain name and not an IP.

Here’s my ouput

Generating a 2048 bit RSA private key
………………………+++
………………………………………………………………+++
writing new private key to ‘/etc/apache2/ssl/server1.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:Yorkshire!
Locality Name (eg, city) []:Home
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Dazbobaby inc.
Organizational Unit Name (eg, section) []:Admin
Common Name (e.g. server FQDN or YOUR name) []:mydomain.ddns.net
Email Address []:admin@mydomain.ddns.net

Install the SSL mod for Apache2

Code: Select all

sudo a2enmod ssl

Restart Apache:

Code: Select all

sudo service apache2 restart

Create a file and symbolic link to the sites-enabled and sites-default folders

Code: Select all

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf

Edit the file.

Code: Select all

sudo nano /etc/apache2/sites-enabled/000-default-ssl.conf

Insert these two lines before </VirtualHost>

Code: Select all

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Now browse to your site with HTTPS:// and accept the new security certificate

Source: https://hallard.me/enable-ssl-for-apach … 5-minutes/

Setup redirection from port 80 (insecure) to 443
Edit /etc/apache2/sites-enabled.conf
Add this:

Code: Select all

<VirtualHost *:80>
   ServerName http://mydomain.ddns.net
   Redirect permanent / https://mydomain.ddns.net/
</VirtualHost>

Restart apache

Raspberry Pi Ad Blocker

I remember seeing something about an advert blocker for the raspberry pi but I can’t find the original post, so some googling later and I found pi-hole.
https://pi-hole.net/
It took less than a minute and it kicks Ad Blocker Pro’s arse then beats it while it’s down. It’s amazing, not one single damn advert gets through, and those that do you can add to a black list.

So if like me you’re sick to death of adverts and you don’t mind spending a few quid getting a raspberry pi then this is a must.

Once complete, change the DNS server of the client (PC, phone, laptop, tablet or just about anything that uses your internet connection) to your rasperry Pi’s IP address.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

curl -sSL https://install.pi-hole.net | bash

change the pi-hole password:

pihole -a -p newpasswordhere

 

 

Run a Raspberry Pi on a SSD or a USB Drive of any kind.

Well… technically it won’t boot from a hard drive, it has to be the boot partition on the SD card, but that’s actually just a small script setting up the root partition of the SD card.

The raspberry Pi is brilliant and every iteration has made it better and faster, all except one thing, the SD card. It still requires an SD card to boot up and run, but now you can run Linux from an SSD!

What I will show you is how to copy the contents of this root partition to an external drive, be it a USB memory stick, USB hard drive or like I have, an external USB Solid state drive.

This is actually a VERY VERY easy thing to do and aside from copying the contents from one drive to another, very quick too.

So the first thing to do is attach the USB drive to the Pi. For easy install I’ve already partitioned and formatted the drive to linux EXT4, all I need to do is discover where it is in the file system.

sudo fdisk -l

The result is /dev/sda1 – So now I know where the drive is, simples πŸ™‚
If you have more than one drive attached it could be another letter, eg. sda1 is mine, sdb1, sdc2 and so on. Make sure you have the correct one.

Next you need to copy the files from the SD card to the external drive.

sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=512

 

Now this will take about 30 minutes to complete, but when it’s done there are a few things we need to do to finish the preparation of the drive
1. sudo e2fsck -f /dev/sda1
2. sudo resize2fs /dev/sda1

The first line checks the filesystem the second resizes the new drive and makes it use the full amount of space, the copy just copied the SDCARD sector by sector, so the new drive size will also match the SD CARD, resize2fs opens the drive up

Just two edits now stand between you and a faster pi.

First edit:

sudo nano /boot/cmdline.txt

change the part that says root=/dev/mmcblk0p2 to root=/dev/sda1

Next we need to make a directory to mount the USB Drive for easier access, you don’t technically need to do this but I did.

sudo mkdir /home/60GB

you can call the folder what ever you want, I had a spare 60GB SSD so I called it 60GB

The final edit and job is to edit the fstab so it’ll be correctly mounted at boot.

sudo nano /dev/sda1/etc/fstab

edit the line that says /dev/mmcblk0p2 to /dev/sda1

At this point you can safely reboot the Pi and welcome to a way faster Raspberry Pi.

Raspberry Pi Custom MOTD

PiHoled

Nice custom MOTD for my Pi

Code: Select all

sudo nano /home/pi/.bash_profile

Add all this:

Code: Select all

    let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
    let secs=$((${upSeconds}%60))
    let mins=$((${upSeconds}/60%60))
    let hours=$((${upSeconds}/3600%24))
    let days=$((${upSeconds}/86400))
    UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`

    # get the load averages
    read one five fifteen rest < /proc/loadavg

    echo "$(tput setaf 2)
		    


       .~~.   .~~.
      '. \ ' ' / .'   $(tput setaf 1)
       .~ .~~~..~.    $(tput sgr0)                   _                          _ $(tput setaf 1)
      : .~.'~'.~. :   $(tput sgr0)   ___ ___ ___ ___| |_ ___ ___ ___ _ _    ___|_|$(tput setaf 1)
     ~ (   ) (   ) ~  $(tput sgr0)  |  _| .'|_ -| . | . | -_|  _|  _| | |  | . | |$(tput setaf 1)
    ( : '~'.~.'~' : ) $(tput sgr0)  |_| |__,|___|  _|___|___|_| |_| |_  |  |  _|_|$(tput setaf 1)
     ~ .~ (   ) ~. ~  $(tput sgr0)              |_|                 |___|  |_|    $(tput setaf 1)
      (  : '~' :  )
       '~ .~~~. ~'
           '~'
                    $(tput sgr0)
		    `date +"%A, %e %B %Y, %r"`		   
		    `uname -srmo`$
		    Uptime.............: ${UPTIME}
		    Memory.............: `cat /proc/meminfo | grep MemFree | awk {'print $2'}`kB (Free) / `cat /proc/meminfo | grep MemTotal | awk {'print $2'}`kB (Total)
		    Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
		    Running Processes..: `ps ax | wc -l | tr -d " "`
		    IP Addresses.......: `/sbin/ifconfig eth0 | /bin/grep "inet addr" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1` and `wget -q -O - http://icanhazip.com/ | tail`
		    Weather............: `curl -s "http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&locCode=EUR|UK|UK001|HALIFAX|" | sed -n '/Currently:/ s/.*: \(.*\): \([0-9]*\)\([CF]\).*/\2Β°\3, \1/p'`
		    Free Disk Space....: `df -Pk | grep -E '^/dev/root' | awk '{ print $4 }' | awk -F '.' '{ print $1 }'`k on /dev/ROOT
			
			    $(tput sgr0)"
			              ./my-pi-temp.sh
df -h /
df -h /dev/sdb1

Code: Select all

sudo nano ./my-pi-temp.sh

Code: Select all

#!/bin/bash
# Script: my-pi-temp.sh
# Purpose: Display the ARM CPU and GPU  temperature of Raspberry Pi 2/3
# Author: Vivek Gite <www.cyberciti.biz> under GPL v2.x+
# -------------------------------------------------------
cpu=$(</sys/class/thermal/thermal_zone0/temp)
echo "$(date) @ $(hostname)"
echo "-------------------------------------------"
echo "GPU => $(/opt/vc/bin/vcgencmd measure_temp)"
echo "CPU => $((cpu/1000))'C"

Code: Select all

sudo chmod +x my-pi-temp.sh

 

    let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
    let secs=$((${upSeconds}%60))
    let mins=$((${upSeconds}/60%60))
    let hours=$((${upSeconds}/3600%24))
    let days=$((${upSeconds}/86400))
    UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`

    # get the load averages
    read one five fifteen rest < /proc/loadavg

    echo "$(tput setaf 2)
		    


       .~~.   .~~.
      '. \ ' ' / .'   $(tput setaf 1)
       .~ .~~~..~.    $(tput sgr0)_|_|_|    _|              _|    _|            _|                  _|  $(tput setaf 1)
      : .~.'~'.~. :   $(tput sgr0)_|    _|                  _|    _|    _|_|    _|    _|_|      _|_|_|  $(tput setaf 1)
     ~ (   ) (   ) ~  $(tput sgr0)_|_|_|    _|  _|_|_|_|_|  _|_|_|_|  _|    _|  _|  _|_|_|_|  _|    _|  $(tput setaf 1)
    ( : '~'.~.'~' : ) $(tput sgr0)_|        _|              _|    _|  _|    _|  _|  _|        _|    _|  $(tput setaf 1)
     ~ .~ (   ) ~. ~  $(tput sgr0)_|        _|              _|    _|    _|_|    _|    _|_|_|    _|_|_|  $(tput setaf 1)
      (  : '~' :  )   $(tput sgr0)$(tput setaf 1)
       '~ .~~~. ~'    $(tput sgr0)$(tput setaf 1)
           '~'	      $(tput sgr0)$(tput setaf 1)
                      $(tput sgr0)$(tput setaf 1)
					$(tput sgr0)
		    `date +"%A, %e %B %Y, %r"`		   
		    `uname -srmo`$
		    Uptime.............: ${UPTIME}
		    Memory.............: `cat /proc/meminfo | grep MemFree | awk {'print $2'}`kB (Free) / `cat /proc/meminfo | grep MemTotal | awk {'print $2'}`kB (Total)
		    Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
		    Running Processes..: `ps ax | wc -l | tr -d " "`
		    IP Addresses.......: `/sbin/ifconfig eth0 | /bin/grep "inet addr" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1` and `wget -q -O - http://icanhazip.com/ | tail`
		    Weather............: `curl -s "http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&locCode=EUR|UK|UK001|HALIFAX|" | sed -n '/Currently:/ s/.*: \(.*\): \([0-9]*\)\([CF]\).*/\2Β°\3, \1/p'`
		    Free Disk Space....: `df -Pk | grep -E '^/dev/root' | awk '{ print $4 }' | awk -F '.' '{ print $1 }'`k on /dev/ROOT
			
			    $(tput sgr0)"
			              ./my-pi-temp.sh
df -h /

Cloud Server:


    let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
    let secs=$((${upSeconds}%60))
    let mins=$((${upSeconds}/60%60))
    let hours=$((${upSeconds}/3600%24))
    let days=$((${upSeconds}/86400))
    UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`

    # get the load averages
    read one five fifteen rest < /proc/loadavg

    echo "$(tput setaf 2)
		    


       .~~.   .~~.
      '. \ ' ' / .'   $(tput setaf 1)
       .~ .~~~..~.    $(tput sgr0) β–„β–ˆβ–ˆβ–ˆβ–ˆβ–„  β–ˆβ–ˆβ–“     β–’β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   β–ˆ    β–ˆβ–ˆβ–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–„ $(tput setaf 1)
      : .~.'~'.~. :   $(tput sgr0)β–’β–ˆβ–ˆβ–€ β–€β–ˆ β–“β–ˆβ–ˆβ–’    β–’β–ˆβ–ˆβ–’  β–ˆβ–ˆβ–’ β–ˆβ–ˆ  β–“β–ˆβ–ˆβ–’β–ˆβ–ˆβ–€ β–ˆβ–ˆβ–Œ$(tput setaf 1)
     ~ (   ) (   ) ~  $(tput sgr0)β–’β–“β–ˆ    β–„β–’β–ˆβ–ˆβ–‘    β–’β–ˆβ–ˆβ–‘  β–ˆβ–ˆβ–’β–“β–ˆβ–ˆ  β–’β–ˆβ–ˆβ–‘β–ˆβ–ˆ   β–ˆβ–Œ$(tput setaf 1)
    ( : '~'.~.'~' : ) $(tput sgr0)β–’β–“β–“β–„ β–„β–ˆβ–ˆβ–’β–ˆβ–ˆβ–‘    β–’β–ˆβ–ˆ   β–ˆβ–ˆβ–‘β–“β–“β–ˆ  β–‘β–ˆβ–ˆβ–‘β–“β–ˆβ–„   β–Œ$(tput setaf 1)
     ~ .~ (   ) ~. ~  $(tput sgr0)β–’ β–“β–ˆβ–ˆβ–ˆβ–€ β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–’β–‘ β–ˆβ–ˆβ–ˆβ–ˆβ–“β–’β–‘β–’β–’β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“β–‘β–’β–ˆβ–ˆβ–ˆβ–ˆβ–“ $(tput setaf 1)
      (  : '~' :  )   $(tput sgr0)β–‘ β–‘β–’ β–’  β–‘ β–’β–‘β–“  β–‘β–‘ β–’β–‘β–’β–‘β–’β–‘ β–‘β–’β–“β–’ β–’ β–’ β–’β–’β–“  β–’ $(tput setaf 1)
       '~ .~~~. ~'    $(tput sgr0)  β–‘  β–’  β–‘ β–‘ β–’  β–‘  β–‘ β–’ β–’β–‘ β–‘β–‘β–’β–‘ β–‘ β–‘ β–‘ β–’  β–’ $(tput setaf 1)
           '~'        $(tput sgr0)β–‘         β–‘ β–‘   β–‘ β–‘ β–‘ β–’   β–‘β–‘β–‘ β–‘ β–‘ β–‘ β–‘  β–‘ $(tput setaf 1)
                    $(tput sgr0)
		    `date +"%A, %e %B %Y, %r"`		   
		    `uname -srmo`$
		    Uptime.............: ${UPTIME}
		    Memory.............: `cat /proc/meminfo | grep MemFree | awk {'print $2'}`kB (Free) / `cat /proc/meminfo | grep MemTotal | awk {'print $2'}`kB (Total)
		    Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
		    Running Processes..: `ps ax | wc -l | tr -d " "`
		    IP Addresses.......: `/sbin/ifconfig eth0 | /bin/grep "inet addr" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1` and `wget -q -O - http://icanhazip.com/ | tail`
		    Weather............: `curl -s "http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&locCode=EUR|UK|UK001|HALIFAX|" | sed -n '/Currently:/ s/.*: \(.*\): \([0-9]*\)\([CF]\).*/\2Β°\3, \1/p'`
		    Free Disk Space....: `df -Pk | grep -E '^/dev/root' | awk '{ print $4 }' | awk -F '.' '{ print $1 }'`k on /dev/ROOT
			
			    $(tput sgr0)"
			              ./my-pi-temp.sh
df -h /

Install Apache2 PHP and Mysql on a Raspberry Pi

How to install a webserver on Raspberry Pi 2 running Raspbian (wheezy)

Full list of edits and installs to get my webserver up and running without mySQL.

Make sure everything is up to date, this takes about 60 seconds:

Code: Select all

sudo apt-get update

Code: Select all

sudo apt-get upgrade

Now I’m going to need apache webserver

Code: Select all

sudo apt-get install apache2 apache2-doc apache2-utils

Code: Select all

sudo apt-get install libapache2-mod-php5 php5 php-pear php5-xcache php5-mysql php5-curl php5-gd

And that’s apache webserver and PHP installed.
Test it with:

Code: Select all

<?php

// Show all information, defaults to INFO_ALL
phpinfo();

// Show just the module information.
// phpinfo(8) yields identical results.
phpinfo(INFO_MODULES);

?>

Now I’ll need to install php_curl

Code: Select all

sudo apt-get install php-curl

then reboot apache:

Code: Select all

sudo service apache2 restart

Now make sure mod_rewrite is enabled:

Code: Select all

sudo a2enmod rewrite

Finally: Getting the .htaccess files working.

Code: Select all

sudo nano /etc/apache2/sites-available/default

Change None to all:

Code: Select all

 <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
 </Directory>

I don’t think I’ve missed any steps, but I will come back and edit later if need be.

Install MySQL

Start with:

Code: Select all

sudo bash

Code: Select all

sudo apt-get install php-mysql

– AND:

Code: Select all

sudo apt-get install mysql-server mysql-client

Install PHPMyAdmin

Code: Select all

sudo apt-get install phpmyadmin

Install Webmin:
http://www.webmin.com/deb.html