This commit is contained in:
Morgan 2023-10-09 23:56:53 +09:00
parent 7752a4a21a
commit d2eeadba89
13 changed files with 585 additions and 498 deletions

158
index.html Normal file
View File

@ -0,0 +1,158 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PAWE.ME</title>
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@300;400;500;600;700;800;900&display=swap"
rel="stylesheet">
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'class'
}
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
</script>
<style>
.url {
font-style: italic;
color: #5d7abf;
} </style>
</head>
<body class="font-sans text-gray-900 bg-gray-100 py-12 px-6 mx-auto max-w-5xl dark:bg-gray-900">
<header class="mb-10">
<h1 class="text-4xl font-bold mb-2"><a href="http://PAWE.ME/"
class="text-blue-500 hover:text-blue-700">PAWE.ME</a></h1>
<h2 class="text-lg text-gray-600 dark:text-gray-300">Simple mirroring &amp; archiving server.</h2>
<!-- <h2 class="text-lg text-blue-400 dark:text-blue-200 italic"><a href="#">Hide my Email</a>, <a href="#">Invidious</a>, <a href="#">Proxy</a>.</h2> -->
</header>
<main>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Mirroring List</h2>
<div id="mirrorList" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/archlinux"
class="text-blue-500 hover:text-blue-700">ArchLinux (x86_64)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://mirrors.xtom.de/archlinux/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu"
class="text-blue-500 hover:text-blue-700">Ubuntu</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://rsync.archive.ubuntu.com/ubuntu/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu_cd"
class="text-blue-500 hover:text-blue-700">Ubuntu Releases</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://releases.ubuntu.com/releases/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/debian"
class="text-blue-500 hover:text-blue-700">Debian</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://mirrors.xtom.jp/debian/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/debian_cd"
class="text-blue-500 hover:text-blue-700">Debian CD</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://ftp.lanet.kr/debian-cd/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/fedora"
class="text-blue-500 hover:text-blue-700">Fedora</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://dl.fedoraproject.org/fedora-enchilada/linux/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/manjaro"
class="text-blue-500 hover:text-blue-700">Manjaro</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://ftp.riken.jp/manjaro/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/raspbian"
class="text-blue-500 hover:text-blue-700">Raspbian</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://archive.raspbian.org/archive/</span></p>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Additional Mirror</h2>
<!-- <button onclick="toggleView('httpView')" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mb-4">View More</button> -->
<div id="httpView" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/archlinuxarm"
class="text-blue-500 hover:text-blue-700">ArchLinux (ARM)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">http://jp.mirror.archlinuxarm.org/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/asahilinux"
class="text-blue-500 hover:text-blue-700">AsahiLinux</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">https://cdn.asahilinux.org/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu_cd_old"
class="text-blue-500 hover:text-blue-700">Ubuntu Releases (Old)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">rsync://old-releases.ubuntu.com/releases/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/cd-image"
class="text-blue-500 hover:text-blue-700">Image Files</a></h3>
</div>
</div>
</section>
<section>
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Server Info</h2>
<ul class="space-y-2 mb-5">
<li class="text-gray-600 dark:text-gray-500">Xeon CPU</li>
<li class="text-gray-600 dark:text-gray-500">64GiB Memory</li>
<li class="text-gray-600 dark:text-gray-500">1Gbps Network, Seoul, Korea</li>
<li class="text-gray-600 dark:text-gray-500">32TB Storage</li>
</ul>
<p class="text-gray-700 dark:text-gray-400 url">Fill out <a href="/form.html" class="text-blue-600 dark:text-blue-700">this</a> form to request additional mirroring.</p>
</section>
<button
class="fixed bottom-6 right-6 bg-blue-200 hover:bg-blue-300 text-blue-700 dark:bg-blue-800 dark:hover:bg-blue-600 dark:text-white w-10 h-10 rounded-full flex items-center justify-center"
onclick="toggleDarkMode()">
+
</button>
</main>
<footer class="mt-10 text-center text-gray-600">
<a href="mailto:mirror@devpg.net">&copy; PAWE.ME</a>
<br/>
<a href="https://github.com/morgan9e/pawe.me"><i>source</i></a>
</footer>
<script>
function toggleView(elementId) {
const element = document.getElementById(elementId);
element.style.display = element.style.display === "none" ? "block" : "none";
}
function toggleDarkMode() {
if (document.documentElement.classList.contains('dark')) {
document.documentElement.classList.remove('dark');
localStorage.theme = 'light';
} else {
document.documentElement.classList.add('dark');
localStorage.theme = 'dark';
}
}
</script>
</body>
</html>

View File

@ -1,179 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PAWE.ME</title>
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@300;400;500;600;700;800;900&display=swap"
rel="stylesheet">
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'class'
}
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
</script>
<style>
.url {
font-style: italic;
color: rgb(86, 105, 151);
}
</style>
</head>
<body class="font-sans text-gray-900 bg-gray-100 py-12 px-6 mx-auto max-w-5xl dark:bg-gray-900">
<header class="mb-10">
<h1 class="text-4xl font-bold mb-2"><a href="http://PAWE.ME"
class="text-blue-500 hover:text-blue-700">PAWE.ME</a></h1>
<h2 class="text-lg text-gray-600 dark:text-gray-300">Simple mirroring &amp; archiving server.</h2>
<h2 class="text-lg text-blue-400 dark:text-blue-200 italic"><a href="#">Hide my Email</a>, <a href="#">Invidious</a>, <a href="#">Proxy</a>.</h2>
</header>
<main>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Mirroring List</h2>
<div id="mirrorList" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/archlinux"
class="text-blue-500 hover:text-blue-700">ArchLinux (x86_64)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 08:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://mirror.rackspace.com/archlinux/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu"
class="text-blue-500 hover:text-blue-700">Ubuntu</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 06:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://rsync.archive.ubuntu.com/ubuntu/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu_cd"
class="text-blue-500 hover:text-blue-700">Ubuntu Releases</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 00:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://releases.ubuntu.com/releases/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/debian"
class="text-blue-500 hover:text-blue-700">Debian</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 06:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span class="url">rsync://ftp.halifax.rwth-aachen.de/debian/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/debian_cd"
class="text-blue-500 hover:text-blue-700">Debian Releases</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 00:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span class="url">rsync://ftp.lanet.kr/debian-cd/</span>
</p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/manjaro"
class="text-blue-500 hover:text-blue-700">Manjaro</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 08:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://ftp.riken.jp/manjaro/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/raspbian"
class="text-blue-500 hover:text-blue-700">Raspbian</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 08:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://archive.raspbian.org/archive/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/fedora"
class="text-blue-500 hover:text-blue-700">Fedora</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://dl.fedoraproject.org/fedora-enchilada/linux/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/epel"
class="text-blue-500 hover:text-blue-700">Epel</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: Not Synced</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://dl.fedoraproject.org/fedora-epel/</span></p>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Additional Mirror</h2>
<!-- <button onclick="toggleView('httpView')" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mb-4">View More</button> -->
<div id="httpView" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/archlinuxarm"
class="text-blue-500 hover:text-blue-700">ArchLinux (ARM)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-07-07 00:50</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">http://jp.mirror.archlinuxarm.org/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/asahilinux"
class="text-blue-500 hover:text-blue-700">AsahiLinux</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-10-05 00:00</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span class="url">https://cdn.asahilinux.org/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu_cd_old"
class="text-blue-500 hover:text-blue-700">Ubuntu Releases (Old)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: 2023-03-06 14:39</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://old-releases.ubuntu.com/releases/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/cd-image"
class="text-blue-500 hover:text-blue-700">Image Files</a></h3>
</div>
</div>
</section>
<section>
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Server Info</h2>
<ul class="space-y-2 mb-5">
<li class="text-gray-600 dark:text-gray-500">Xeon E5 CPU</li>
<li class="text-gray-600 dark:text-gray-500">12GiB Memory</li>
<li class="text-gray-600 dark:text-gray-500">750Mbps Network, Seoul, Korea</li>
<li class="text-gray-600 dark:text-gray-500">18TB Storage</li>
</ul>
<p class="text-gray-500 dark:text-gray-600 url">Fill out <a href="/form.html" class="text-blue-500 dark:text-blue-800">this</a> form to request additional mirroring.</p>
</section>
<button
class="fixed bottom-6 right-6 bg-blue-200 hover:bg-blue-300 text-blue-700 dark:bg-blue-800 dark:hover:bg-blue-600 dark:text-white w-10 h-10 rounded-full flex items-center justify-center"
onclick="toggleDarkMode()">
+
</button>
</main>
<footer class="mt-10 text-center text-gray-600">
<a href="mailto:mirror@devpg.net">&copy; PAWE.ME</a>
</footer>
<script>
function toggleView(elementId) {
const element = document.getElementById(elementId);
element.style.display = element.style.display === "none" ? "block" : "none";
}
function toggleDarkMode() {
if (document.documentElement.classList.contains('dark')) {
document.documentElement.classList.remove('dark');
localStorage.theme = 'light';
} else {
document.documentElement.classList.add('dark');
localStorage.theme = 'dark';
}
}
</script>
</body>
</html>

1
pub/index.html Symbolic link
View File

@ -0,0 +1 @@
../index.html

View File

@ -1,179 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PAWE.ME</title>
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@300;400;500;600;700;800;900&display=swap"
rel="stylesheet">
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'class'
}
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
</script>
<style>
.url {
font-style: italic;
color: rgb(86, 105, 151);
}
</style>
</head>
<body class="font-sans text-gray-900 bg-gray-100 py-12 px-6 mx-auto max-w-5xl dark:bg-gray-900">
<header class="mb-10">
<h1 class="text-4xl font-bold mb-2"><a href="http://PAWE.ME"
class="text-blue-500 hover:text-blue-700">PAWE.ME</a></h1>
<h2 class="text-lg text-gray-600 dark:text-gray-300">Simple mirroring &amp; archiving server.</h2>
<h2 class="text-lg text-blue-400 dark:text-blue-200 italic"><a href="#">Hide my Email</a>, <a href="#">Invidious</a>, <a href="#">Proxy</a>.</h2>
</header>
<main>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Mirroring List</h2>
<div id="mirrorList" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/archlinux"
class="text-blue-500 hover:text-blue-700">ArchLinux (x86_64)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@archlinux@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://mirror.rackspace.com/archlinux/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu"
class="text-blue-500 hover:text-blue-700">Ubuntu</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@ubuntu@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://rsync.archive.ubuntu.com/ubuntu/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu_cd"
class="text-blue-500 hover:text-blue-700">Ubuntu Releases</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@ubuntu_cd@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://releases.ubuntu.com/releases/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/debian"
class="text-blue-500 hover:text-blue-700">Debian</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@debian@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span class="url">rsync://ftp.halifax.rwth-aachen.de/debian/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/debian_cd"
class="text-blue-500 hover:text-blue-700">Debian Releases</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@debian_cd@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span class="url">rsync://ftp.lanet.kr/debian-cd/</span>
</p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/manjaro"
class="text-blue-500 hover:text-blue-700">Manjaro</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@manjaro@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://ftp.riken.jp/manjaro/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/raspbian"
class="text-blue-500 hover:text-blue-700">Raspbian</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@raspbian@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://archive.raspbian.org/archive/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/fedora"
class="text-blue-500 hover:text-blue-700">Fedora</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@fedora@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://dl.fedoraproject.org/fedora-enchilada/linux/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/epel"
class="text-blue-500 hover:text-blue-700">Epel</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@epel@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://dl.fedoraproject.org/fedora-epel/</span></p>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Additional Mirror</h2>
<!-- <button onclick="toggleView('httpView')" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mb-4">View More</button> -->
<div id="httpView" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/archlinuxarm"
class="text-blue-500 hover:text-blue-700">ArchLinux (ARM)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@archlinuxarm@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">http://jp.mirror.archlinuxarm.org/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/asahilinux"
class="text-blue-500 hover:text-blue-700">AsahiLinux</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@asahilinux@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span class="url">https://cdn.asahilinux.org/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/ubuntu_cd_old"
class="text-blue-500 hover:text-blue-700">Ubuntu Releases (Old)</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: @@ubuntu_cd_old@@</p>
<p class="text-gray-600 dark:text-gray-300">Source: <span
class="url">rsync://old-releases.ubuntu.com/releases/</span></p>
</div>
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/cd-image"
class="text-blue-500 hover:text-blue-700">Image Files</a></h3>
</div>
</div>
</section>
<section>
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Server Info</h2>
<ul class="space-y-2 mb-5">
<li class="text-gray-600 dark:text-gray-500">Xeon E5 CPU</li>
<li class="text-gray-600 dark:text-gray-500">12GiB Memory</li>
<li class="text-gray-600 dark:text-gray-500">750Mbps Network, Seoul, Korea</li>
<li class="text-gray-600 dark:text-gray-500">18TB Storage</li>
</ul>
<p class="text-gray-500 dark:text-gray-600 url">Fill out <a href="/form.html" class="text-blue-500 dark:text-blue-800">this</a> form to request additional mirroring.</p>
</section>
<button
class="fixed bottom-6 right-6 bg-blue-200 hover:bg-blue-300 text-blue-700 dark:bg-blue-800 dark:hover:bg-blue-600 dark:text-white w-10 h-10 rounded-full flex items-center justify-center"
onclick="toggleDarkMode()">
+
</button>
</main>
<footer class="mt-10 text-center text-gray-600">
<a href="mailto:mirror@devpg.net">&copy; PAWE.ME</a>
</footer>
<script>
function toggleView(elementId) {
const element = document.getElementById(elementId);
element.style.display = element.style.display === "none" ? "block" : "none";
}
function toggleDarkMode() {
if (document.documentElement.classList.contains('dark')) {
document.documentElement.classList.remove('dark');
localStorage.theme = 'light';
} else {
document.documentElement.classList.add('dark');
localStorage.theme = 'dark';
}
}
</script>
</body>
</html>

118
scripts/config.yml Normal file
View File

@ -0,0 +1,118 @@
BASE_DIR: /srv/mirror
ENV: ./scripts/.env
global:
type: rsync
scripts:
pre:
# - ./scripts/cleanup.sh
fail:
- ./scripts/alert.sh
post:
- ./script/index.py
# - ./script/rotate_log.py
log: ./logs/sync.log
log_dir: ./logs/
sync:
- ALL
rsync:
options: "-rtlHpv --chmod=D0755,F0644 --partial --hard-links --safe-links --stats --delete --delete-after --delay-updates --max-delete=70000"
exclude:
- ".*.??????"
- ".~tmp~/"
- "Packages*"
- "Sources*"
- "Release*"
- "*.links.tar.gz*"
- "/other"
- "/sources"
repos:
ARCHLINUX:
url: rsync://mirrors.xtom.de/archlinux/
duration: 4
name: "ArchLinux (x86_64)"
path: archlinux
log: ./logs/archlinux
last_sync: "2023-10-09T23:48Z"
UBUNTU:
url: rsync://rsync.archive.ubuntu.com/ubuntu/
duration: 4
name: "Ubuntu"
path: ubuntu
log: ./logs/ubuntu
last_sync: "2023-10-09T23:48Z"
UBUNTU_CD:
url: rsync://releases.ubuntu.com/releases/
duration: 24
name: "Ubuntu Releases"
path: ubuntu_cd
log: ./logs/ubuntu_cd
last_sync: "2023-10-09T23:48Z"
UBUNTU_CD_OLD:
url: rsync://old-releases.ubuntu.com/releases/
duration: 24
name: "Ubuntu Releases (Old)"
path: ubuntu_cd_old
log: ./logs/ubuntu_cd_old
last_sync: "2023-10-09T23:48Z"
DEBIAN:
url: rsync://mirrors.xtom.jp/debian/
type: ftpsync
duration: 4
name: Debian
path: debian
scripts:
# pre: ./scripts/pre_debian.sh
last_sync: "2023-10-09T23:48Z"
DEBIAN_CD:
url: rsync://ftp.lanet.kr/debian-cd/
duration: 24
name: "Debian CD"
path: debian_cd
log: ./logs/debian_cd
last_sync: "2023-10-09T23:48Z"
FEDORA:
url: rsync://dl.fedoraproject.org/fedora-enchilada/linux/
duration: 4
name: "Fedora"
path: fedora
log: ./logs/fedora
last_sync: "2023-10-09T23:30Z"
RASPBIAN:
url: rsync://archive.raspbian.org/archive/
duration: 6
name: "Raspbian"
path: raspbian
log: ./logs/raspbian
last_sync: "2023-10-09T23:30Z"
MANJARO:
url: rsync://ftp.riken.jp/manjaro/
duration: 4
name: Manjaro
path: manjaro
log: ./logs/manjaro
last_sync: "2023-10-09T23:30Z"
ARCHLINUXARM:
name: "ArchLinux (ARM)"
path: archlinuxarm
url: http://jp.mirror.archlinuxarm.org/
type: http
duration: 12
last_sync: "2023-10-09T23:30Z"
ASAHILINUX:
name: "AsahiLinux"
path: asahilinux
url: https://cdn.asahilinux.org/
type: http
duration: 12
last_sync: "2023-10-09T23:30Z"
index:
- ARCHLINUX
- UBUNTU UBUNTU_CD
- DEBIAN DEBIAN_CD
- FEDORA
- MANJARO
- RASPBIAN
- DIVIDER
- ARCHLINUXARM
- ASAHILINUX
- UBUNTU_CD_OLD

View File

@ -49,8 +49,8 @@ def parseIndex(url, base = "", idx = 0, dirs = [], ret = []):
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: createFetch.py [URL] [Path]")
if len(sys.argv) != 3 and len(sys.argv) != 4:
print("Usage: createFetch.py [URL] [Path] (fetch)")
sys.exit()
# urls = {"archlinuxarm": "http://jp.mirror.archlinuxarm.org/", "asahilinux": "https://cdn.asahilinux.org/", "linux-surface": "https://pkg.surfacelinux.com/arch/"}
@ -73,6 +73,9 @@ if __name__ == "__main__":
files = parseIndex('', base = url, dirs = [bpath])
filename = url.split('/')[2]+'.fetch'
if len(sys.argv) == 4:
filename = sys.argv[3]
with open(filename, 'w') as f:
f.write(json.dumps(files, indent=4))

View File

@ -1,35 +0,0 @@
#!/bin/bash
TIMENOW=$(date '+%Y%m%d_%H%M')
BASE_DIR="/srv/mirror"
DIST_ARR=('archlinuxarm' 'asahilinux')
in=0
for di in "${DIST_ARR[@]}"
do
if [ "$di" == "$1" ]; then in=1; fi
done
if [ "$in" -ne 1 ]; then
echo Not declared;exit;
fi
dist=$1
echo HTTP Mirroring ${dist} started at ${TIMENOW}.
echo "${TIMENOW} STARTED ${dist}" >> ${BASE_DIR}/logs/all.log
cd $BASE_DIR/scripts/http
echo ${dist} Fetch >> $BASE_DIR/logs/http.log
python3 -u $BASE_DIR/scripts/http/fetchFile.py ${dist} $BASE_DIR/${dist}/ >> $BASE_DIR/logs/${dist}.log 2>&1
echo ${dist} Download >> $BASE_DIR/logs/http.log
python3 -u $BASE_DIR/scripts/http/getFile.py $BASE_DIR/scripts/http/${dist}.fetch >> $BASE_DIR/logs/${dist}.log 2>&1
if [ $? -eq 0 ];
then
echo Sync ${dist} Success
echo "${TIMENOW} DONE ${dist}" >> ${BASE_DIR}/logs/all.log
cd $BASE_DIR
echo "Updating Index"
python3 -u ./scripts/index.py ${BASE_DIR}
fi

104
scripts/index.py Normal file → Executable file
View File

@ -1,48 +1,80 @@
import os, sys, re
#!/usr/bin/python3
import os, sys
import yaml
import jinja2
import datetime
from pprint import pprint
base_path = sys.argv[1]
assert os.path.exists(base_path)
BASE_DIR = "."
log_path = os.path.join(base_path, "logs/all.log")
assert os.path.exists(log_path)
CONFIG_PATH = os.path.join(BASE_DIR, "scripts/config.yml")
TEMPLATES_DIR = os.path.join(BASE_DIR, "scripts/templates")
LOG_DIR = os.path.join(BASE_DIR, "logs")
OUTPUT_PATH = os.path.join(BASE_DIR, "index.html")
html_path = os.path.join(base_path, "scripts/base.html")
index = os.path.join(base_path, "index.html")
assert os.path.exists(html_path)
# def get_last_sync(repo_name):
# log_path = os.path.join(LOG_DIR, f"all.log")
# if os.path.exists(log_path):
# with open(log_path, 'r') as log_file:
# log_all = reversed(log_file.readlines())
# for logline in log_all:
# time, stat, dist = logline.split()
# if repo_name == dist and stat =="DONE":
# return datetime.datetime.strptime(time, '%Y%m%d_%H%M').strftime("%Y-%m-%d %H:%M")
# return "Not Synced"
with open(log_path, 'r') as f:
log_file = f.read().splitlines()
log_file.reverse()
# main()
with open(html_path, 'r') as f:
html_file = f.read()
dists = re.findall("@@([^@@]+)@@", html_file)
pprint(dists)
if __name__=="__main__":
with open(CONFIG_PATH, 'r') as f:
config = yaml.safe_load(f)
logs = {}
for dist in dists:
logs[dist] = []
env = jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATES_DIR))
base_template = env.get_template('base.html')
full_template = env.get_template('full.html')
half_template = env.get_template('half.html')
for logline in log_file:
print(logline)
time, stat, dist = logline.split(" ")
if stat == "DONE":
time = datetime.datetime.strptime(time, '%Y%m%d_%H%M')
if dist in logs.keys():
logs[dist].append(time)
main_repos = []
additional_repos = []
last = {}
for dist in logs:
if logs[dist]:
last[dist] = sorted(logs[dist])[-1].strftime("%Y-%m-%d %H:%M")
DIV = 0
for line in config['index']:
if line == "DIVIDER":
DIV = 1
continue
repos_line = line.split()
for repo_name in repos_line:
repo_data = config['repos'].get(repo_name)
if not repo_data:
continue
context = {
'path': repo_data['path'],
'name': repo_data['name'],
'lastsync': repo_data.get('lastsync', "Not Synced"),
'upstream': repo_data['url']
}
print(context)
if len(repos_line) > 1:
(main_repos if not DIV else additional_repos).append(half_template.render(**context))
else:
last[dist] = "Not Synced"
pprint(last)
(main_repos if not DIV else additional_repos).append(full_template.render(**context))
for dist in last:
html_file = html_file.replace(f"@@{dist}@@", last[dist])
html_output = base_template.render(
repos="\n".join(main_repos),
repos_more="\n".join(additional_repos)
)
with open(index, 'w') as f:
f.write(html_file)
try:
with open(OUTPUT_PATH, 'w') as f:
f.write(html_output)
except:
if len(sys.argv) == 2:
if os.path.exists(sys.argv[1]):
if not os.path.isdir(sys.argv[1]):
print(f"Writing to {sys.argv[1]}")
with open(sys.argv[1], 'w') as f:
f.write(html_output)
else:
print(html_output)

View File

@ -1,79 +1,141 @@
#!/bin/bash
TIMENOW=$(date '+%Y%m%d_%H%M')
BASE_DIR="/srv/mirror"
ALERT=""
option="-rtlHpv --chmod=D0755,F0644 --partial --hard-links --safe-links --stats --delete --delete-after --delay-updates --max-delete=70000"
CONFIG_PATH="./scripts/config.yml"
YAML="./scripts/yq"
exclude="--exclude=.*.?????? --exclude='.~tmp~/' --exclude='Packages*' --exclude='Sources*' --exclude='Release*' --exclude='*.links.tar.gz*' --exclude='/other' --exclude='/sources'"
BASE_DIR=$($YAML eval ".BASE_DIR" "${CONFIG_PATH}")
TIMESTAMP=$(date '+%Y-%m-%dT%H:%MZ')
ubuntu="rsync://rsync.archive.ubuntu.com/ubuntu/"
ubuntu_cd="rsync://releases.ubuntu.com/releases/"
ubuntu_cd_old="rsync://old-releases.ubuntu.com/releases/"
debian="rsync://mirrors.xtom.jp/debian/"
debian_cd="rsync://ftp.lanet.kr/debian-cd/"
fedora="rsync://dl.fedoraproject.org/fedora-enchilada/linux/"
epel="rsync://dl.fedoraproject.org/fedora-epel/"
fedora_cd=""
archlinux="rsync://mirror.rackspace.com/archlinux/"
raspbian="rsync://archive.raspbian.org/archive/"
manjaro="rsync://ftp.riken.jp/manjaro/"
parse_yaml() {
echo $($YAML eval ".$1" "${CONFIG_PATH}")
}
DIST_ARR=('archlinux' 'debian' 'debian_cd' 'ubuntu' 'ubuntu_cd' 'ubuntu_cd_old' 'raspbian' 'epel' 'fedora' 'fedora_cd' 'manjaro')
sync_repo() {
in=0
for di in "${DIST_ARR[@]}"
do
if [ "$di" == "$1" ]; then in=1; fi
done
local repo=$1
local type=$(parse_yaml "repos.${repo}.type")
local url=$(parse_yaml "repos.${repo}.url")
local path=$(parse_yaml "repos.${repo}.path")
local log=$(parse_yaml "repos.${repo}.log")
if [ "$in" -ne 1 ]; then
echo Not declared;exit;
fi
if [[ "$type" == "null" ]]; then
type=$(parse_yaml "global.type")
fi
dist=$1
echo Syncing $1...
if [[ "$log" == "null" ]]; then
log="$(parse_yaml "global.log_dir")$path"
fi
LASTLOG=`head -1 ${BASE_DIR}/logs/${dist}.log`
log=$(realpath $log)
path="${BASE_DIR}/$path/"
echo -e "----\n| Repo: $repo\n| Type: $type\n| Upstream: $url\n| Path: $path\n| Log: $log\n----"
mv ${BASE_DIR}/logs/${dist}.log ${BASE_DIR}/logs/previous/${dist}-${LASTLOG}.log
mv ${BASE_DIR}/logs/${dist}-error.log ${BASE_DIR}/logs/previous/${dist}-error-${LASTLOG}.log
rotate_log $log
echo ${TIMENOW} >> ${BASE_DIR}/logs/${dist}.log
echo ${TIMENOW} >> ${BASE_DIR}/logs/${dist}-error.log
echo "${TIMENOW}: Mirroring ${dist} from ${!dist} to ${BASE_DIR}/${dist}"
echo "${TIMENOW} STARTED ${dist}" >> ${BASE_DIR}/logs/all.log
if [ "$dist" == "debian" ];
then
case $type in
"rsync")
local rsync_options=$(parse_yaml 'global.rsync.options')
local exclude_list=($(parse_yaml 'global.rsync.exclude[]'))
local exclude=""
for ex in "${exclude_list[@]}"; do
exclude="${exclude} --exclude='${ex}'"
done
echo rsync ${rsync_options} ${exclude} $url $path >> $log
rsync ${rsync_options} ${exclude} $url $path >> $log 2>> ${log}-error
;;
"ftpsync")
cd ${BASE_DIR}/scripts
export BASE_DIR=${BASE_DIR}
./ftpsync
else
echo "rsync ${option} ${exclude} ${!dist} ${BASE_DIR}/${dist}" >> ${BASE_DIR}/logs/${dist}.log
rsync ${option} ${exclude} ${!dist} ${BASE_DIR}/${dist} >> ${BASE_DIR}/logs/${dist}.log 2>> ${BASE_DIR}/logs/${dist}-error.log
fi
./ftpsync >> $log 2>> ${log}-error
cd ${BASE_DIR}
;;
"http")
echo ${repo} Fetch >> $log 2>> ${log}-error
python3 -u $BASE_DIR/scripts/getFetch.py "${url}" $path $BASE_DIR/scripts/${path}.fetch >> $log 2>> ${log}-error
echo ${repo} Download >> $log 2>> ${log}-error
python3 -u $BASE_DIR/scripts/getFile.py $BASE_DIR/scripts/${path}.fetch >> $log 2>> ${log}-error
;;
*)
echo "Unknown type $type for $repo." | tee ${log}-error
;;
esac
if [ $? -ne 0 ];
then
cd ${ALERT}
MSG="${dist} failed at ${TIMENOW}"
if [ -n "$ALERT" ];
then
${ALERT}/alert alert "${MSG}"
clean_log $log
}
rotate_log() {
local log_file=$1
if [[ -f $log_file ]]; then
PREV_LOG=$(cat "$log_file" | head -n 1)
old_log_file="$(dirname $log_file)/old/$(basename $log_file)-$PREV_LOG"
mkdir -p "$(dirname $old_log_file)"
mv "$log_file" "$old_log_file"
fi
echo Sync ${dist} Error
echo "${TIMENOW} ERROR ${dist}" >> ${BASE_DIR}/logs/all.log
echo curl -X POST -d 'email=DEVPG.NET' -d "title=${dist}" -d "content=${MSG}" https://one.devpg.net/send
else
echo Sync ${dist} Success
if [ `echo ${BASE_DIR}/logs/${dist}-error.log | wc -l` -eq 1 ];
then
rm ${BASE_DIR}/logs/${dist}-error.log
local error_file=$1-error
if [[ -f $error_file ]]; then
PREV_LOG=$(cat "$error_file" | head -n 1)
old_error_file="$(dirname $error_file)/old/$(basename $error_file)-$PREV_LOG"
mkdir -p "$(dirname $old_error_file)"
mv "$error_file" "$old_error_file"
fi
echo "${TIMENOW} DONE ${dist}" >> ${BASE_DIR}/logs/all.log
cd $BASE_DIR
echo "Updating Index"
python3 -u ./scripts/index.py ${BASE_DIR}
echo $TIMESTAMP >> $log_file
echo $TIMESTAMP >> $error_file
}
clean_log() {
local error_file=$1-error
nl=$(cat "$error_file" | wc -l)
if [ $nl -eq 1 ]; then
rm "$error_file"
fi
}
##########
# Main #
##########
echo Started job $TIMESTAMP..
global_pre_scripts=($(parse_yaml 'global.scripts.pre[]'))
for script in "${global_pre_scripts[@]}"; do
$script
done
repos=($(parse_yaml 'global.sync[]'))
if [[ "${repos[0]}" == "ALL" ]]; then
repos=($($YAML eval '.repos | keys| .[]' "${CONFIG_PATH}"))
fi
for repo in "${repos[@]}"; do
echo Checking $repo...
duration=$(parse_yaml "repos.${repo}.duration")
last_sync_timestamp=$(date -d "$(parse_yaml "repos.${repo}.last_sync")" +%s)
next_sync_timestamp=$(( last_sync_timestamp + duration * 3600 ))
next_sync_timestamp=1
if [ $next_sync_timestamp -le $(date +%s) ]; then
echo "Lastsync $last_sync_timestamp"
echo "Syncing $repo..."
sync_repo $repo
if [ $? -ne 0 ]; then
global_fail_scripts=($(parse_yaml 'global.scripts.fail[]'))
for script in "${global_fail_scripts[@]}"; do
$script
done
echo "Error syncing $repo"
else
$YAML eval ".repos.${repo}.last_sync = \"$TIMESTAMP\"" -i "${CONFIG_PATH}"
echo "Successfully synced $repo."
fi
fi
done
global_post_scripts=($(parse_yaml 'global.scripts.post[]'))
for script in "${global_post_scripts[@]}"; do
$script
done
echo Ended job $TIMESTAMP..

View File

@ -0,0 +1,94 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PAWE.ME</title>
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@300;400;500;600;700;800;900&display=swap"
rel="stylesheet">
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'class'
}
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
</script>
<style>
.url {
font-style: italic;
color: #5d7abf;
} </style>
</head>
<body class="font-sans text-gray-900 bg-gray-100 py-12 px-6 mx-auto max-w-5xl dark:bg-gray-900">
<header class="mb-10">
<h1 class="text-4xl font-bold mb-2"><a href="http://PAWE.ME/"
class="text-blue-500 hover:text-blue-700">PAWE.ME</a></h1>
<h2 class="text-lg text-gray-600 dark:text-gray-300">Simple mirroring &amp; archiving server.</h2>
<!-- <h2 class="text-lg text-blue-400 dark:text-blue-200 italic"><a href="#">Hide my Email</a>, <a href="#">Invidious</a>, <a href="#">Proxy</a>.</h2> -->
</header>
<main>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Mirroring List</h2>
<div id="mirrorList" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
{{ repos }}
</div>
</section>
<section class="mb-12">
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Additional Mirror</h2>
<!-- <button onclick="toggleView('httpView')" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mb-4">View More</button> -->
<div id="httpView" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-4">
{{ repos_more }}
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/cd-image"
class="text-blue-500 hover:text-blue-700">Image Files</a></h3>
</div>
</div>
</section>
<section>
<h2 class="dark:text-gray-200 text-2xl font-semibold mb-5">Server Info</h2>
<ul class="space-y-2 mb-5">
<li class="text-gray-600 dark:text-gray-500">Xeon CPU</li>
<li class="text-gray-600 dark:text-gray-500">64GiB Memory</li>
<li class="text-gray-600 dark:text-gray-500">1Gbps Network, Seoul, Korea</li>
<li class="text-gray-600 dark:text-gray-500">32TB Storage</li>
</ul>
<p class="text-gray-700 dark:text-gray-400 url">Fill out <a href="/form.html" class="text-blue-600 dark:text-blue-700">this</a> form to request additional mirroring.</p>
</section>
<button
class="fixed bottom-6 right-6 bg-blue-200 hover:bg-blue-300 text-blue-700 dark:bg-blue-800 dark:hover:bg-blue-600 dark:text-white w-10 h-10 rounded-full flex items-center justify-center"
onclick="toggleDarkMode()">
+
</button>
</main>
<footer class="mt-10 text-center text-gray-600">
<a href="mailto:mirror@devpg.net">&copy; PAWE.ME</a>
<br/>
<a href="https://github.com/morgan9e/pawe.me"><i>source</i></a>
</footer>
<script>
function toggleView(elementId) {
const element = document.getElementById(elementId);
element.style.display = element.style.display === "none" ? "block" : "none";
}
function toggleDarkMode() {
if (document.documentElement.classList.contains('dark')) {
document.documentElement.classList.remove('dark');
localStorage.theme = 'light';
} else {
document.documentElement.classList.add('dark');
localStorage.theme = 'dark';
}
}
</script>
</body>
</html>

View File

@ -0,0 +1,6 @@
<div class="bg-white dark:bg-gray-800 col-span-1 md:col-span-2 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/{{path}}"
class="text-blue-500 hover:text-blue-700">{{name}}</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: {{lastsync}}</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">{{upstream}}</span></p>
</div>

View File

@ -0,0 +1,6 @@
<div class="bg-white dark:bg-gray-800 col-span-1 shadow-lg rounded-lg p-5">
<h3 class="dark:text-white text-lg font-semibold mb-1"><a href="/{{path}}"
class="text-blue-500 hover:text-blue-700">{{name}}</a></h3>
<p class="text-gray-600 dark:text-gray-300">Last Updated: {{lastsync}}</p>
<p class="text-gray-600 dark:text-gray-300">Upstream: <span class="url">{{upstream}}</span></p>
</div>

BIN
scripts/yq Executable file

Binary file not shown.