Added first blog post, activated taxonomies
Signed-off-by: Ettore <noettore@gmail.com>
8
archetypes/blog.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: "{{ replace .Name "-" " " | title }}"
|
||||||
|
description: ""
|
||||||
|
date: {{ .Date }}
|
||||||
|
author: "Ettore Dreucci"
|
||||||
|
tags: []
|
||||||
|
draft: true
|
||||||
|
---
|
@@ -10,10 +10,9 @@ author = "Ettore Dreucci"
|
|||||||
title = "Ettore Dreucci"
|
title = "Ettore Dreucci"
|
||||||
disqusshortname = ""
|
disqusshortname = ""
|
||||||
pluralizelisttitles = false
|
pluralizelisttitles = false
|
||||||
disableKinds = ["taxonomy", "taxonomyTerm"]
|
|
||||||
|
|
||||||
[permalinks]
|
[permalinks]
|
||||||
blog = "blog/:slug/"
|
blog = "blog/:filename/"
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
dateform = "2 Jan 2006"
|
dateform = "2 Jan 2006"
|
||||||
@@ -26,6 +25,7 @@ highlightjs = true
|
|||||||
progressively = true
|
progressively = true
|
||||||
align_left = false
|
align_left = false
|
||||||
lang = "en"
|
lang = "en"
|
||||||
|
latestpostcount = 5
|
||||||
github = "noettore"
|
github = "noettore"
|
||||||
#email = "ettore.dreucci@gmail.com"
|
#email = "ettore.dreucci@gmail.com"
|
||||||
linkedin = "ettore-dreucci-403110175"
|
linkedin = "ettore-dreucci-403110175"
|
||||||
@@ -33,3 +33,4 @@ linkedin = "ettore-dreucci-403110175"
|
|||||||
social_banner = "img/banner.png"
|
social_banner = "img/banner.png"
|
||||||
posts_navigation = true
|
posts_navigation = true
|
||||||
small_banner_logo = true
|
small_banner_logo = true
|
||||||
|
|
||||||
|
123
content/blog/ispconfig-ddns.md
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
---
|
||||||
|
title: "ISPConfig Dynamic DNS"
|
||||||
|
tags: ["ispconfig", "ddns", "dns"]
|
||||||
|
categories: ["recipe"]
|
||||||
|
description: "How to create and update a DDNS entry in ISPConfig"
|
||||||
|
date: 2019-05-22T18:54:00+02:00
|
||||||
|
draft: false
|
||||||
|
---
|
||||||
|
|
||||||
|
If you manage your DNS server(s) with ISPConfig you may want a *dynamic entry* that gets updated automatically every time the target host changes its IP address.
|
||||||
|
|
||||||
|
Doing so in ISPConfig is quite straight forward: we can use the [ISPConfig SOAP API](https://git.ispconfig.org/ispconfig/ispconfig3/tree/master/remoting_client) to update an <u>existing record</u> with a PHP script to be run frequently by the target host.
|
||||||
|
|
||||||
|
In this [**recipe**]({{< ref "/categories/recipe" >}}) I will consider **updating an A record**.
|
||||||
|
|
||||||
|
1. First we need to create a remote user on the ISPConfig master server to authenticate, and grant it remote access and some functions:
|
||||||
|
|
||||||
|
In “System -> Remote User” add a new remote user, enable remote access and **grant** “<u>DNS zone functions</u>” and <u>each DNS functions corresponding to the type of record you want to update</u>: **so if you want to update an A record you must grant the generic “DNS zone functions” and the “DNS a functions”**
|
||||||
|
|
||||||
|
2. We then have to write a PHP script that will make a SOAP function call to the ISPConfig endpoint. <u>The target host</u>, or the host executing the script <u>must have the [PHP SOAP module](https://www.php.net/manual/en/book.soap.php) installed</u>.
|
||||||
|
|
||||||
|
Create the `update.php` script as follow:
|
||||||
|
```
|
||||||
|
<?php
|
||||||
|
require('config.php');
|
||||||
|
|
||||||
|
if ($argc<3) {
|
||||||
|
print "Usage: php ./update.php HOST DOMAIN [IP]\n";
|
||||||
|
print "If not given, the ip address will be queried from icanhazip.com\n";
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
// First parameter: hostname of DNS entry
|
||||||
|
$ddns_host = $argv[1];
|
||||||
|
// Second: domain name of DNS zone
|
||||||
|
$domain = $argv[2];
|
||||||
|
// If third parameter is present
|
||||||
|
if ($argc>3) {
|
||||||
|
// Third parameter: IP address of target host
|
||||||
|
$ip = $argv[3];
|
||||||
|
// Otherwise
|
||||||
|
} else {
|
||||||
|
// Figure out the public IP of this host:
|
||||||
|
$ip = trim(file_get_contents("http://icanhazip.com/"));
|
||||||
|
if (filter_var($ip, FILTER_VALIDATE_IP) === false) {
|
||||||
|
die("Unable to retrieve public IP address (icanhazip.com returned $ip)\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print("Setting DDNS host $ddns_host.$domain to IP $ip\n");
|
||||||
|
|
||||||
|
// Using the SOAP module initialize a SoapClient
|
||||||
|
$client = new SoapClient(null,
|
||||||
|
array('location' => $soap_location,
|
||||||
|
'uri' => $soap_uri,
|
||||||
|
'trace' => 1,
|
||||||
|
'exceptions' => 1));
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Login to SOAP server
|
||||||
|
$session_id = $client->login($soap_user, $soap_password);
|
||||||
|
|
||||||
|
// Grab DNS zone ID
|
||||||
|
$zone_id = $client->dns_zone_get_id($session_id, $domain);
|
||||||
|
// Grab DNS zone
|
||||||
|
$zone = $client->dns_zone_get($session_id, $zone_id);
|
||||||
|
// Grab DNS records
|
||||||
|
$records = $client->dns_rr_get_all_by_zone($session_id, $zone_id);
|
||||||
|
|
||||||
|
// Find right record: hostname must match and type must be A
|
||||||
|
$dns_record = null;
|
||||||
|
foreach ($records as $rec) {
|
||||||
|
if ($rec['type']=='A' && $rec['name']==$ddns_host) {
|
||||||
|
$dns_record = $rec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If no record found
|
||||||
|
if (is_null($dns_record)) {
|
||||||
|
//Logout from SOAP server
|
||||||
|
$client->logout($session_id);
|
||||||
|
die("Unable to find DNS record for host $ddns_host in domain $domain on the server...\n");
|
||||||
|
}
|
||||||
|
// If IP stored in record is different from current IP
|
||||||
|
if ($dns_record['data'] != $ip) {
|
||||||
|
// Set new IP
|
||||||
|
$dns_record['data'] = $ip;
|
||||||
|
// Increment record serial number
|
||||||
|
$dns_record['serial'] = $dns_record['serial']+1;
|
||||||
|
// Update modified record in DNS server
|
||||||
|
$client->dns_a_update($session_id, null, $dns_record['id'], $dns_record);
|
||||||
|
|
||||||
|
// Increment zone serial number
|
||||||
|
$zone['serial'] = $zone['serial'] + 1;
|
||||||
|
// Update modified zone in DNS server
|
||||||
|
$client->dns_zone_update($session_id, 0, $zone_id, $zone);
|
||||||
|
|
||||||
|
print("Successfully set DNS entry for host $ddns_host in domain $domain to $ip.\n");
|
||||||
|
// Otherwise
|
||||||
|
} else {
|
||||||
|
print("IP address of $ddns_host.$domain already set to $ip.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Logout from SOAP server
|
||||||
|
$client->logout($session_id);
|
||||||
|
|
||||||
|
} catch (SoapFault $e) {
|
||||||
|
die('SOAP Error: '.$e->getMessage()."\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the `config.php` as follow:
|
||||||
|
```
|
||||||
|
<?php
|
||||||
|
$soap_location = 'https://ispconfig.example.com:8080/remote/index.php';
|
||||||
|
$soap_uri = 'https://ispconfig.example.com:8080/remote/';
|
||||||
|
$soap_user = 'username';
|
||||||
|
$soap_password = 'password';
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Schedule the execution of `update.php`
|
||||||
|
|
||||||
|
END.
|
@@ -8,4 +8,4 @@ draft: false
|
|||||||
|
|
||||||
Here you can find some (little) info on me and some post I occasionally write about stuff I like.
|
Here you can find some (little) info on me and some post I occasionally write about stuff I like.
|
||||||
|
|
||||||
{{< figure src="img/calvin_hobbes/calvinandhobbes1.png" title="copyright Bill Watterson, Andrews McMeel Publishing and Universal Press Syndicate." >}}
|
{{< figure src="img/calvin_hobbes/lastMinutePanic.png" link="https://www.calvinandhobbes.com/" target="_blank" title="copyright by Andrews McMeel Publishing" >}}
|
16
layouts/taxonomy/category.terms.html
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{{ partial "header.html" . }}
|
||||||
|
<div class="main column">
|
||||||
|
<div class="container">
|
||||||
|
<div class="content">
|
||||||
|
<div class="posts">
|
||||||
|
<div class="page-heading">{{ .Title }}</div>
|
||||||
|
<ul>
|
||||||
|
{{ range $name, $items := .Site.Taxonomies.categories }}
|
||||||
|
<li><a href="{{ $.Site.BaseURL }}categories/{{ $name | urlize | lower }}">{{ $name }} <span>({{ len $items }})</span></a></li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ partial "footer.html" . }}
|
16
layouts/taxonomy/tag.terms.html
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{{ partial "header.html" . }}
|
||||||
|
<div class="main column">
|
||||||
|
<div class="container">
|
||||||
|
<div class="content">
|
||||||
|
<div class="posts">
|
||||||
|
<div class="page-heading">{{ .Title }}</div>
|
||||||
|
<ul>
|
||||||
|
{{ range $name, $taxonomy := .Site.Taxonomies.tags }}
|
||||||
|
<a href="/tags/{{ $name | urlize }}">{{ $name }}</a><br />
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ partial "footer.html" . }}
|
@@ -325,6 +325,9 @@ div.main .content .front-matter .meta {
|
|||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
div.main .content .front-matter .desc {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
div.main .content .front-matter .date,
|
div.main .content .front-matter .date,
|
||||||
div.main .content .front-matter .author,
|
div.main .content .front-matter .author,
|
||||||
div.main .content .front-matter .tags,
|
div.main .content .front-matter .tags,
|
||||||
@@ -332,6 +335,7 @@ div.main .content .front-matter .word-count,
|
|||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
font-size: 6px;
|
font-size: 6px;
|
||||||
margin: 0 6px;
|
margin: 0 6px;
|
||||||
|
@@ -352,6 +352,9 @@ div.main .content .front-matter .meta {
|
|||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
div.main .content .front-matter .desc {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
div.main .content .front-matter .date,
|
div.main .content .front-matter .date,
|
||||||
div.main .content .front-matter .author,
|
div.main .content .front-matter .author,
|
||||||
div.main .content .front-matter .tags,
|
div.main .content .front-matter .tags,
|
||||||
@@ -359,6 +362,7 @@ div.main .content .front-matter .word-count,
|
|||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
font-size: 6px;
|
font-size: 6px;
|
||||||
margin: 0 6px;
|
margin: 0 6px;
|
||||||
@@ -1008,6 +1012,12 @@ margin-left: -4%;
|
|||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://ettore.dreucci.it/blog/">Blog</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1163
public/blog/index.html
Normal file
27
public/blog/index.xml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Blog on Ettore Dreucci</title>
|
||||||
|
<link>https://ettore.dreucci.it/blog/</link>
|
||||||
|
<description>Recent content in Blog on Ettore Dreucci</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-US</language>
|
||||||
|
<lastBuildDate>Wed, 22 May 2019 18:54:00 +0200</lastBuildDate>
|
||||||
|
|
||||||
|
<atom:link href="https://ettore.dreucci.it/blog/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>ISPConfig Dynamic DNS</title>
|
||||||
|
<link>https://ettore.dreucci.it/blog/ispconfig-ddns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/blog/ispconfig-ddns/</guid>
|
||||||
|
<description>If you manage your DNS server(s) with ISPConfig you may want a dynamic entry that gets updated automatically every time the target host changes its IP address.
|
||||||
|
Doing so in ISPConfig is quite straight forward: we can use the ISPConfig SOAP API to update an existing record with a PHP script to be run frequently by the target host.
|
||||||
|
In this recipe I will consider updating an A record.
|
||||||
|
First we need to create a remote user on the ISPConfig master server to authenticate, and grant it remote access and some functions:</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
1320
public/blog/ispconfig-ddns/index.html
Normal file
1147
public/categories/index.html
Normal file
@@ -10,5 +10,14 @@
|
|||||||
<atom:link href="https://ettore.dreucci.it/categories/index.xml" rel="self" type="application/rss+xml" />
|
<atom:link href="https://ettore.dreucci.it/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Recipe</title>
|
||||||
|
<link>https://ettore.dreucci.it/categories/recipe/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/categories/recipe/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
1154
public/categories/recipe/index.html
Normal file
27
public/categories/recipe/index.xml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Recipe on Ettore Dreucci</title>
|
||||||
|
<link>https://ettore.dreucci.it/categories/recipe/</link>
|
||||||
|
<description>Recent content in Recipe on Ettore Dreucci</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-US</language>
|
||||||
|
<lastBuildDate>Wed, 22 May 2019 18:54:00 +0200</lastBuildDate>
|
||||||
|
|
||||||
|
<atom:link href="https://ettore.dreucci.it/categories/recipe/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>ISPConfig Dynamic DNS</title>
|
||||||
|
<link>https://ettore.dreucci.it/blog/ispconfig-ddns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/blog/ispconfig-ddns/</guid>
|
||||||
|
<description>If you manage your DNS server(s) with ISPConfig you may want a dynamic entry that gets updated automatically every time the target host changes its IP address.
|
||||||
|
Doing so in ISPConfig is quite straight forward: we can use the ISPConfig SOAP API to update an existing record with a PHP script to be run frequently by the target host.
|
||||||
|
In this recipe I will consider updating an A record.
|
||||||
|
First we need to create a remote user on the ISPConfig master server to authenticate, and grant it remote access and some functions:</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
@@ -352,6 +352,9 @@ div.main .content .front-matter .meta {
|
|||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
div.main .content .front-matter .desc {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
div.main .content .front-matter .date,
|
div.main .content .front-matter .date,
|
||||||
div.main .content .front-matter .author,
|
div.main .content .front-matter .author,
|
||||||
div.main .content .front-matter .tags,
|
div.main .content .front-matter .tags,
|
||||||
@@ -359,6 +362,7 @@ div.main .content .front-matter .word-count,
|
|||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
font-size: 6px;
|
font-size: 6px;
|
||||||
margin: 0 6px;
|
margin: 0 6px;
|
||||||
@@ -1008,6 +1012,12 @@ margin-left: -4%;
|
|||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://ettore.dreucci.it/blog/">Blog</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -352,6 +352,9 @@ div.main .content .front-matter .meta {
|
|||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
div.main .content .front-matter .desc {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
div.main .content .front-matter .date,
|
div.main .content .front-matter .date,
|
||||||
div.main .content .front-matter .author,
|
div.main .content .front-matter .author,
|
||||||
div.main .content .front-matter .tags,
|
div.main .content .front-matter .tags,
|
||||||
@@ -359,6 +362,7 @@ div.main .content .front-matter .word-count,
|
|||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
font-size: 6px;
|
font-size: 6px;
|
||||||
margin: 0 6px;
|
margin: 0 6px;
|
||||||
@@ -1008,6 +1012,12 @@ margin-left: -4%;
|
|||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://ettore.dreucci.it/blog/">Blog</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1046,9 +1056,9 @@ margin-left: -4%;
|
|||||||
|
|
||||||
<p>Here you can find some (little) info on me and some post I occasionally write about stuff I like.</p>
|
<p>Here you can find some (little) info on me and some post I occasionally write about stuff I like.</p>
|
||||||
|
|
||||||
<figure>
|
<figure><a href="https://www.calvinandhobbes.com/" target="_blank">
|
||||||
<img src="img/calvin_hobbes/calvinandhobbes1.png"/> <figcaption>
|
<img src="img/calvin_hobbes/lastMinutePanic.png"/> </a><figcaption>
|
||||||
<h4>copyright Bill Watterson, Andrews McMeel Publishing and Universal Press Syndicate.</h4>
|
<h4>copyright by Andrews McMeel Publishing</h4>
|
||||||
</figcaption>
|
</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
|
BIN
public/img/calvin_hobbes/lastMinutePanic.png
Normal file
After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 264 KiB |
@@ -353,6 +353,9 @@ div.main .content .front-matter .meta {
|
|||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
div.main .content .front-matter .desc {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
div.main .content .front-matter .date,
|
div.main .content .front-matter .date,
|
||||||
div.main .content .front-matter .author,
|
div.main .content .front-matter .author,
|
||||||
div.main .content .front-matter .tags,
|
div.main .content .front-matter .tags,
|
||||||
@@ -360,6 +363,7 @@ div.main .content .front-matter .word-count,
|
|||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.main .content .front-matter .middot:before {
|
div.main .content .front-matter .middot:before {
|
||||||
font-size: 6px;
|
font-size: 6px;
|
||||||
margin: 0 6px;
|
margin: 0 6px;
|
||||||
@@ -1011,6 +1015,12 @@ margin-left: -4%;
|
|||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://ettore.dreucci.it/blog/">Blog</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1038,9 +1048,9 @@ margin-left: -4%;
|
|||||||
|
|
||||||
<p>Here you can find some (little) info on me and some post I occasionally write about stuff I like.</p>
|
<p>Here you can find some (little) info on me and some post I occasionally write about stuff I like.</p>
|
||||||
|
|
||||||
<figure>
|
<figure><a href="https://www.calvinandhobbes.com/" target="_blank">
|
||||||
<img src="img/calvin_hobbes/calvinandhobbes1.png"/> <figcaption>
|
<img src="img/calvin_hobbes/lastMinutePanic.png"/> </a><figcaption>
|
||||||
<h4>copyright Bill Watterson, Andrews McMeel Publishing and Universal Press Syndicate.</h4>
|
<h4>copyright by Andrews McMeel Publishing</h4>
|
||||||
</figcaption>
|
</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
@@ -1049,6 +1059,29 @@ margin-left: -4%;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="posts">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page-heading">Latest posts</div>
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li class="groupby">May, 2019</li>
|
||||||
|
|
||||||
|
<li class="post-item">
|
||||||
|
<span class="meta">22 May 2019</span>
|
||||||
|
|
||||||
|
<a href="https://ettore.dreucci.it/blog/ispconfig-ddns/"><span>ISPConfig Dynamic DNS</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="best-posts">
|
<div class="best-posts">
|
||||||
|
|
||||||
|
@@ -6,11 +6,23 @@
|
|||||||
<description>Recent content on Ettore Dreucci</description>
|
<description>Recent content on Ettore Dreucci</description>
|
||||||
<generator>Hugo -- gohugo.io</generator>
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
<language>en-US</language>
|
<language>en-US</language>
|
||||||
<lastBuildDate>Mon, 20 May 2019 01:04:40 +0200</lastBuildDate>
|
<lastBuildDate>Wed, 22 May 2019 18:54:00 +0200</lastBuildDate>
|
||||||
|
|
||||||
<atom:link href="https://ettore.dreucci.it/index.xml" rel="self" type="application/rss+xml" />
|
<atom:link href="https://ettore.dreucci.it/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>ISPConfig Dynamic DNS</title>
|
||||||
|
<link>https://ettore.dreucci.it/blog/ispconfig-ddns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/blog/ispconfig-ddns/</guid>
|
||||||
|
<description>If you manage your DNS server(s) with ISPConfig you may want a dynamic entry that gets updated automatically every time the target host changes its IP address.
|
||||||
|
Doing so in ISPConfig is quite straight forward: we can use the ISPConfig SOAP API to update an existing record with a PHP script to be run frequently by the target host.
|
||||||
|
In this recipe I will consider updating an A record.
|
||||||
|
First we need to create a remote user on the ISPConfig master server to authenticate, and grant it remote access and some functions:</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<title>Home</title>
|
<title>Home</title>
|
||||||
<link>https://ettore.dreucci.it/home/</link>
|
<link>https://ettore.dreucci.it/home/</link>
|
||||||
@@ -19,7 +31,7 @@
|
|||||||
<guid>https://ettore.dreucci.it/home/</guid>
|
<guid>https://ettore.dreucci.it/home/</guid>
|
||||||
<description>Hello there and welcome to my website!
|
<description>Hello there and welcome to my website!
|
||||||
Here you can find some (little) info on me and some post I occasionally write about stuff I like.
|
Here you can find some (little) info on me and some post I occasionally write about stuff I like.
|
||||||
copyright Bill Watterson, Andrews McMeel Publishing and Universal Press Syndicate. </description>
|
copyright by Andrews McMeel Publishing </description>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
|
@@ -2,6 +2,11 @@
|
|||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/blog/ispconfig-ddns/</loc>
|
||||||
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://ettore.dreucci.it/home/</loc>
|
<loc>https://ettore.dreucci.it/home/</loc>
|
||||||
<lastmod>2019-05-20T01:04:40+02:00</lastmod>
|
<lastmod>2019-05-20T01:04:40+02:00</lastmod>
|
||||||
@@ -17,9 +22,50 @@
|
|||||||
<lastmod>2018-05-10T02:01:09+02:00</lastmod>
|
<lastmod>2018-05-10T02:01:09+02:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/blog/</loc>
|
||||||
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
|
<priority>0</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/categories/</loc>
|
||||||
|
<priority>0</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/tags/ddns/</loc>
|
||||||
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
|
<priority>0</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/tags/dns/</loc>
|
||||||
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
|
<priority>0</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://ettore.dreucci.it/</loc>
|
<loc>https://ettore.dreucci.it/</loc>
|
||||||
<lastmod>2019-05-20T01:04:40+02:00</lastmod>
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
|
<priority>0</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/tags/ispconfig/</loc>
|
||||||
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
|
<priority>0</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/categories/recipe/</loc>
|
||||||
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
|
<priority>0</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://ettore.dreucci.it/tags/</loc>
|
||||||
|
<lastmod>2019-05-22T18:54:00+02:00</lastmod>
|
||||||
<priority>0</priority>
|
<priority>0</priority>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
|
1154
public/tags/ddns/index.html
Normal file
27
public/tags/ddns/index.xml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Ddns on Ettore Dreucci</title>
|
||||||
|
<link>https://ettore.dreucci.it/tags/ddns/</link>
|
||||||
|
<description>Recent content in Ddns on Ettore Dreucci</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-US</language>
|
||||||
|
<lastBuildDate>Wed, 22 May 2019 18:54:00 +0200</lastBuildDate>
|
||||||
|
|
||||||
|
<atom:link href="https://ettore.dreucci.it/tags/ddns/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>ISPConfig Dynamic DNS</title>
|
||||||
|
<link>https://ettore.dreucci.it/blog/ispconfig-ddns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/blog/ispconfig-ddns/</guid>
|
||||||
|
<description>If you manage your DNS server(s) with ISPConfig you may want a dynamic entry that gets updated automatically every time the target host changes its IP address.
|
||||||
|
Doing so in ISPConfig is quite straight forward: we can use the ISPConfig SOAP API to update an existing record with a PHP script to be run frequently by the target host.
|
||||||
|
In this recipe I will consider updating an A record.
|
||||||
|
First we need to create a remote user on the ISPConfig master server to authenticate, and grant it remote access and some functions:</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
1154
public/tags/dns/index.html
Normal file
27
public/tags/dns/index.xml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Dns on Ettore Dreucci</title>
|
||||||
|
<link>https://ettore.dreucci.it/tags/dns/</link>
|
||||||
|
<description>Recent content in Dns on Ettore Dreucci</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-US</language>
|
||||||
|
<lastBuildDate>Wed, 22 May 2019 18:54:00 +0200</lastBuildDate>
|
||||||
|
|
||||||
|
<atom:link href="https://ettore.dreucci.it/tags/dns/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>ISPConfig Dynamic DNS</title>
|
||||||
|
<link>https://ettore.dreucci.it/blog/ispconfig-ddns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/blog/ispconfig-ddns/</guid>
|
||||||
|
<description>If you manage your DNS server(s) with ISPConfig you may want a dynamic entry that gets updated automatically every time the target host changes its IP address.
|
||||||
|
Doing so in ISPConfig is quite straight forward: we can use the ISPConfig SOAP API to update an existing record with a PHP script to be run frequently by the target host.
|
||||||
|
In this recipe I will consider updating an A record.
|
||||||
|
First we need to create a remote user on the ISPConfig master server to authenticate, and grant it remote access and some functions:</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
1151
public/tags/index.html
Normal file
@@ -6,9 +6,37 @@
|
|||||||
<description>Recent content in Tags on Ettore Dreucci</description>
|
<description>Recent content in Tags on Ettore Dreucci</description>
|
||||||
<generator>Hugo -- gohugo.io</generator>
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
<language>en-US</language>
|
<language>en-US</language>
|
||||||
|
<lastBuildDate>Wed, 22 May 2019 18:54:00 +0200</lastBuildDate>
|
||||||
|
|
||||||
<atom:link href="https://ettore.dreucci.it/tags/index.xml" rel="self" type="application/rss+xml" />
|
<atom:link href="https://ettore.dreucci.it/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Ddns</title>
|
||||||
|
<link>https://ettore.dreucci.it/tags/ddns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/tags/ddns/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Dns</title>
|
||||||
|
<link>https://ettore.dreucci.it/tags/dns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/tags/dns/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Ispconfig</title>
|
||||||
|
<link>https://ettore.dreucci.it/tags/ispconfig/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/tags/ispconfig/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
1154
public/tags/ispconfig/index.html
Normal file
27
public/tags/ispconfig/index.xml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Ispconfig on Ettore Dreucci</title>
|
||||||
|
<link>https://ettore.dreucci.it/tags/ispconfig/</link>
|
||||||
|
<description>Recent content in Ispconfig on Ettore Dreucci</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-US</language>
|
||||||
|
<lastBuildDate>Wed, 22 May 2019 18:54:00 +0200</lastBuildDate>
|
||||||
|
|
||||||
|
<atom:link href="https://ettore.dreucci.it/tags/ispconfig/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>ISPConfig Dynamic DNS</title>
|
||||||
|
<link>https://ettore.dreucci.it/blog/ispconfig-ddns/</link>
|
||||||
|
<pubDate>Wed, 22 May 2019 18:54:00 +0200</pubDate>
|
||||||
|
|
||||||
|
<guid>https://ettore.dreucci.it/blog/ispconfig-ddns/</guid>
|
||||||
|
<description>If you manage your DNS server(s) with ISPConfig you may want a dynamic entry that gets updated automatically every time the target host changes its IP address.
|
||||||
|
Doing so in ISPConfig is quite straight forward: we can use the ISPConfig SOAP API to update an existing record with a PHP script to be run frequently by the target host.
|
||||||
|
In this recipe I will consider updating an A record.
|
||||||
|
First we need to create a remote user on the ISPConfig master server to authenticate, and grant it remote access and some functions:</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
BIN
static/img/calvin_hobbes/ch/1985/11/19851118.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851119.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851120.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851121.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851122.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851123.gif
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851124.gif
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851125.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851126.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851127.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851128.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851129.gif
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/calvin_hobbes/ch/1985/11/19851130.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851201.gif
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851202.gif
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851203.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851204.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851205.gif
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851206.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851207.gif
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851208.gif
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851209.gif
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851210.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851211.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851212.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851213.gif
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851214.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851215.gif
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851216.gif
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851217.gif
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851218.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851219.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851220.gif
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851221.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851222.gif
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851223.gif
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851224.gif
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851225.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851226.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851227.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851228.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851229.gif
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851230.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1985/12/19851231.gif
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860101.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860102.gif
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860103.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860104.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860105.gif
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860106.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860107.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860108.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860109.gif
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860110.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860111.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860112.gif
Normal file
After Width: | Height: | Size: 203 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860113.gif
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860114.gif
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860115.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860116.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860117.gif
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860118.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860119.gif
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860120.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860121.gif
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860122.gif
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860123.gif
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860124.gif
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860125.gif
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/calvin_hobbes/ch/1986/01/19860126.gif
Normal file
After Width: | Height: | Size: 109 KiB |