Application: Apt-Cacher NG.
По умолчанию web-интерфейс "apt-cacher-ng" перенасыщен. Мало того, что он страдает многословием, так в одном потоке с информацией он ещё и инструменты воздействия на содержимое "кеша" предлагает. Меня это не устраивает совершенно и одним из условий возможности применения "apt-cacher-ng" было наличие возможности корректирования отображаемых им шаблонов.
В итоге, после небольшого хирургического вмешательства, страница статистики выглядит теперь так:
Далее о том, как этого достигнуть.
Прежде всего создадим выделенную директорию, в которую положим всё наше, "эксклюзивное":
# mkdir -p /etc/apt-cacher-ng/misc
В том случае, если у сервера запросили html-страницу, которую он отдать может (например, потому, что её не предусмотрено), "apt-cacher-ng" выдаёт данные, построенные на шаблоне "userinfo.html", что наличествует в дистрибутивном наборе. Шаблон избыточен более чем. Подрежем его:
# touch /etc/apt-cacher-ng/misc/userinfo.html
<html>
<head>
<title>APT Configuration required</title>
$STYLE
</head>
<body>
To configure APT for use of "Apt-Cacher-NG" you need to...<br><br>
1. Use original OS repositories.<br><br>
2. Create file configuration for target proxy, example:<br><br>
<pre>
touch /etc/apt/apt.conf.d/01proxy
</pre>
3. Put in configuration file next line:<br><br>
<pre>
Acquire::http { Proxy "http://apt.local:3142"; };
</pre>
</body>
</html>
<head>
<title>APT Configuration required</title>
$STYLE
</head>
<body>
To configure APT for use of "Apt-Cacher-NG" you need to...<br><br>
1. Use original OS repositories.<br><br>
2. Create file configuration for target proxy, example:<br><br>
<pre>
touch /etc/apt/apt.conf.d/01proxy
</pre>
3. Put in configuration file next line:<br><br>
<pre>
Acquire::http { Proxy "http://apt.local:3142"; };
</pre>
</body>
</html>
Удаляем ссылку на дистрибутивный шаблон:
# rm /etc/apt-cacher-ng/userinfo.html
Подсовываем серверу ссылку на свой шаблон:
# ln -s /etc/apt-cacher-ng/misc/userinfo.html /etc/apt-cacher-ng/userinfo.html
Теперь проделаем аналогичную по виду, но более важную по сути, процедуру подрезания функционала шаблона отображения статистики "report.html":
# touch /etc/apt-cacher-ng/misc/report.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Apt-Cacher NG transfer statistics</title>
$STYLE
</head>
<body>
<div align="center">
<span class="title">"Apt-Cacher NG" transfer statistics for @H</span>
<br />
<p></p>
<br>
<table border=1 cellpadding=4 cellspacing=0>
<tr>
<td class=coltitle>Date/Period</td>
<td class=coltitle>Transfer count (in+out)<br>(day average)</td>
<td class=coltitle>Share/Download ratio</td>
</tr>
@W300
@T<tr class="colcont"><td><center>%s</center></td><td><center>%2.2fMiB</center></td><td style="padding-left:1px;padding-right:1px;"><center><table><tr><td bgcolor=green width=%d> </td><td bgcolor=red width=%d> </td></tr></table></center></td></tr>
</table>
</div>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Apt-Cacher NG transfer statistics</title>
$STYLE
</head>
<body>
<div align="center">
<span class="title">"Apt-Cacher NG" transfer statistics for @H</span>
<br />
<p></p>
<br>
<table border=1 cellpadding=4 cellspacing=0>
<tr>
<td class=coltitle>Date/Period</td>
<td class=coltitle>Transfer count (in+out)<br>(day average)</td>
<td class=coltitle>Share/Download ratio</td>
</tr>
@W300
@T<tr class="colcont"><td><center>%s</center></td><td><center>%2.2fMiB</center></td><td style="padding-left:1px;padding-right:1px;"><center><table><tr><td bgcolor=green width=%d> </td><td bgcolor=red width=%d> </td></tr></table></center></td></tr>
</table>
</div>
</body>
</html>
Удаляем ссылку на дистрибутивный шаблон:
# rm /etc/apt-cacher-ng/report.html
Подсовываем серверу ссылку на свой шаблон:
# ln -s /etc/apt-cacher-ng/misc/report.html /etc/apt-cacher-ng/report.html
Для того, чтобы сервер "apt-cacher-ng" принял новые шаблоны перезапускать его не нужно, они перечитываются при каждом запросе данных.