Local W3C HTML5 Validator Server

27-12-2013 | Remy van Elst


Table of Contents


w3 validator This tutorial shows you how to set up a local instance of the w3c html validator, including HTML5 validation support via a local instance of the Validator.nu HTML5 validator. The online w3 validator has strict limits and will ban you for some time if you validate to often. So if you for example have a local unit test to check a website you will get banned a lot. Which is understandable of course, it is a free service. They provide all source code plus it is in the debian repositories, it is dead simple to set up one yourself.

It was tested on Ubuntu 13.10 on a Digital Ocean VPS. If you like this tutorial and want to support my website, use this link to order a Digital Ocean VPS: https://www.digitalocean.com/?refcode=7435ae6b8212

I've used Ubuntu 13.10 because that has the latest w3 test (1.3). If you use Ubuntu 12.04 LTS and you want the latest version you can install the two packages (w3c-markup-validator and w3c-sgml-lib) from the raring repositories (13.04), that works just fine.

Contents

  • Installing required packages
  • Compiling / Installing HTML5 Validator.nu
  • Configuring the w3c-validator
  • Upstart script for the HTML5 validator

Installing required packages

Install all required packages:

apt-get install w3c-markup-validator mercurial subversion python default-jdk

This will install everything required for the w3 validator and for the HTML 5 one (that is Java). It will also pull down Apache. After the install finished you can reach your validator already at http://server.ext/w3c-validator. However, it is not yet configured for HTML5 validation, which is kinda required for todays web.

Compiling / Installing the HTML5 Validator.nu

The W3 validator itself does not do HTML5 validation. It does support using external services to do it, and we are going to do it with the HTML5 validator from http://validator.nu.

Create a folder:

mkdir /usr/share/html5-validator 
cd /usr/share/html5-validator

Set the JAVA_HOME path.

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

Clone the latest validator source:

hg clone https://bitbucket.org/validator/build build

Start the build:

python build/build.py all

If you encounter a Java exception, run the build script again. I had to do it three times:

python build/build.py all   

If it all works after a few tries, the validator runs at localhost:8888:

INFO::Started SocketConnector@0.0.0.0:8888

Kill it with CTRL+C and continue reading. We first configure the W3 validator and then create an upstart script for the Validator.nu one.

Configuring the w3c-validator

I need to validate hosts in private networks, so I changed the below option in /etc/w3c/validator.conf:

Allow Private IPs = yes

Enable the HTML5 validator by uncommenting the following:

<External>
## Enable checking documents via external services.
## The example config below assumes that you have installed the validator.nu
## engine on the same machine as the markup validator.
## See http://about.validator.nu/ for installation instructions.
HTML5 = http://localhost:8888/html5/
#CompoundXML = http://localhost:8888/
</External>

Upstart script for HTML5 validator

Create the upstart script to start the HTML5 validator at boot:

vim /etc/init/html5-validator.conf

Contents:

description "Validator.nu HTML5 Validator"

start on (local-filesystems and net-device-up)
stop on runlevel [016]

chdir /usr/share/html5-validator
exec python build/build.py --control-port=8889 run
respawn

Save and start it:

start html5-validator

Afterwards you can access your validator via http://server/w3c-validator. It supports the HTML5 validator from there, but you can also access it directly at http://server:8888.

Security note

The validator.nu service is running as root and there are no limits on both validators. Make sure you only run it on a trusted network, or properly secure it.


Tags: html, html5, tests, validation, validator, w3, w3c,