Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
5a5f0d1ce1
@ -14,7 +14,7 @@ def init_app(app):
|
|||||||
databaseUrl = urlparse(app.config['DATABASE_URL'])
|
databaseUrl = urlparse(app.config['DATABASE_URL'])
|
||||||
|
|
||||||
app.config['PSYCOPG2_CONNECTION_POOL'] = psycopg2.pool.SimpleConnectionPool(
|
app.config['PSYCOPG2_CONNECTION_POOL'] = psycopg2.pool.SimpleConnectionPool(
|
||||||
1,
|
1,
|
||||||
20,
|
20,
|
||||||
user = databaseUrl.username,
|
user = databaseUrl.username,
|
||||||
password = databaseUrl.password,
|
password = databaseUrl.password,
|
||||||
@ -34,13 +34,13 @@ def init_app(app):
|
|||||||
key = result.group()
|
key = result.group()
|
||||||
with open(join(schemaMigrationsPath, filename), 'rb') as file:
|
with open(join(schemaMigrationsPath, filename), 'rb') as file:
|
||||||
schemaMigrations[key] = file.read().decode("utf8")
|
schemaMigrations[key] = file.read().decode("utf8")
|
||||||
|
|
||||||
connection = app.config['PSYCOPG2_CONNECTION_POOL'].getconn()
|
connection = app.config['PSYCOPG2_CONNECTION_POOL'].getconn()
|
||||||
|
|
||||||
hasSchemaVersionTable = False
|
hasSchemaVersionTable = False
|
||||||
actionWasTaken = False
|
actionWasTaken = False
|
||||||
schemaVersion = 0
|
schemaVersion = 0
|
||||||
desiredSchemaVersion = 7
|
desiredSchemaVersion = 8
|
||||||
|
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
|
|
||||||
@ -95,11 +95,11 @@ def init_app(app):
|
|||||||
if schemaVersion != versionFromDatabase:
|
if schemaVersion != versionFromDatabase:
|
||||||
app.logger.critical("incorrect schema version value \"{}\" after running migration {}, expected \"{}\". exiting.".format(
|
app.logger.critical("incorrect schema version value \"{}\" after running migration {}, expected \"{}\". exiting.".format(
|
||||||
versionFromDatabase,
|
versionFromDatabase,
|
||||||
migrationKey,
|
migrationKey,
|
||||||
schemaVersion
|
schemaVersion
|
||||||
))
|
))
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
||||||
app.config['PSYCOPG2_CONNECTION_POOL'].putconn(connection)
|
app.config['PSYCOPG2_CONNECTION_POOL'].putconn(connection)
|
||||||
|
34
capsulflask/schema_migrations/08_down_various_os_updates.sql
Normal file
34
capsulflask/schema_migrations/08_down_various_os_updates.sql
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
DELETE FROM os_images WHERE id = 'openbsd68';
|
||||||
|
DELETE FROM os_images WHERE id = 'alpine312';
|
||||||
|
|
||||||
|
UPDATE os_images SET deprecated = FALSE WHERE id = 'openbsd67';
|
||||||
|
UPDATE os_images SET deprecated = FALSE WHERE id = 'alpine311';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'alpine311.img'
|
||||||
|
WHERE id = 'alpine311';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'ubuntu-18.04-minimal-cloudimg-amd64.img'
|
||||||
|
WHERE id = 'ubuntu18';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'openbsd-cloud-2020-05.qcow2'
|
||||||
|
WHERE id = 'openbsd66';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'openbsd67.img'
|
||||||
|
WHERE id = 'openbsd67';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'ubuntu20.img'
|
||||||
|
WHERE id = 'ubuntu20';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'debian10.img'
|
||||||
|
WHERE id = 'debian10';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'centos7.img'
|
||||||
|
WHERE id = 'centos7';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'centos8.img'
|
||||||
|
WHERE id = 'centos8';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'guixsystem-cloud-2020-05.qcow2'
|
||||||
|
WHERE id = 'guix110';
|
||||||
|
|
||||||
|
UPDATE schemaversion SET version = 7;
|
37
capsulflask/schema_migrations/08_up_various_os_updates.sql
Normal file
37
capsulflask/schema_migrations/08_up_various_os_updates.sql
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
INSERT INTO os_images (id, template_image_file_name, description, deprecated)
|
||||||
|
VALUES ('openbsd68', 'openbsd/6.8/root.img.qcow2', 'OpenBSD 6.8', FALSE);
|
||||||
|
|
||||||
|
INSERT INTO os_images (id, template_image_file_name, description, deprecated)
|
||||||
|
VALUES ('alpine312', 'alpine/3.12/root.img.qcow2', 'Alpine Linux 3.12', FALSE);
|
||||||
|
|
||||||
|
UPDATE os_images SET deprecated = TRUE WHERE id = 'openbsd67';
|
||||||
|
UPDATE os_images SET deprecated = TRUE WHERE id = 'alpine311';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'alpine/3.11/root.img.qcow2'
|
||||||
|
WHERE id = 'alpine311';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'ubuntu/18.04/root.img.qcow2'
|
||||||
|
WHERE id = 'ubuntu18';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'openbsd/6.6/root.img.qcow2'
|
||||||
|
WHERE id = 'openbsd66';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'openbsd/6.7/root.img.qcow2'
|
||||||
|
WHERE id = 'openbsd67';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'ubuntu/20.04/root.img.qcow2'
|
||||||
|
WHERE id = 'ubuntu20';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'debian/10/root.img.qcow2'
|
||||||
|
WHERE id = 'debian10';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'centos/7/root.img.qcow2'
|
||||||
|
WHERE id = 'centos7';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'centos/8/root.img.qcow2'
|
||||||
|
WHERE id = 'centos8';
|
||||||
|
|
||||||
|
UPDATE os_images SET template_image_file_name = 'guix/1.10/root.img.qcow2'
|
||||||
|
WHERE id = 'guix110';
|
||||||
|
|
||||||
|
UPDATE schemaversion SET version = 8;
|
@ -5,8 +5,7 @@
|
|||||||
# POSIX or die
|
# POSIX or die
|
||||||
|
|
||||||
vmname="$1"
|
vmname="$1"
|
||||||
# resolve the .qcow2 symlink so backing images never change
|
template_file="/tank/img/$2"
|
||||||
template_file="/tank/img/$(readlink /tank/img/$2)"
|
|
||||||
vcpus="$3"
|
vcpus="$3"
|
||||||
memory="$4"
|
memory="$4"
|
||||||
pubkeys="$5"
|
pubkeys="$5"
|
||||||
@ -48,7 +47,7 @@ if [ -f /tank/vm/$vmname.qcow2 ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
qemu-img create -f qcow2 -b "$template_file" "$disk"
|
cp "$template_file" "$disk"
|
||||||
cp /tank/config/cyberia-cloudinit.yml /tmp/cloudinit.yml
|
cp /tank/config/cyberia-cloudinit.yml /tmp/cloudinit.yml
|
||||||
echo "$pubkeys" | while IFS= read -r line; do
|
echo "$pubkeys" | while IFS= read -r line; do
|
||||||
echo " - $line" >> /tmp/cloudinit.yml
|
echo " - $line" >> /tmp/cloudinit.yml
|
||||||
|
@ -8,18 +8,21 @@
|
|||||||
{% block subcontent %}
|
{% block subcontent %}
|
||||||
<p>
|
<p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>2020-01-30: Baikal ownership transferred to Cyberia Computer Club</li>
|
<li>2020-10-29: Add OpenBSD 6.8 and Alpine 3.12 support, remove previous versions.</li>
|
||||||
<li>2020-01-31: Prepping docs</li>
|
<li>2020-10-23: Automate VM build system (backend)</li>
|
||||||
<li>2020-02-26: Re-prepping docs</li>
|
<li>2020-10-22: Re-worked FAQ, added more supporting docs</li>
|
||||||
<li>2020-03-07: CVM goes live</li>
|
|
||||||
<li>2020-03-10: CVM name changed to Capsul</li>
|
|
||||||
<li>2020-03-10: Capsul site goes live</li>
|
|
||||||
<li>2020-03-22: Alpine support added</li>
|
|
||||||
<li>2020-03-25: Network limits made public</li>
|
|
||||||
<li>2020-04-17: OpenBSD support added</li>
|
|
||||||
<li>2020-04-26: Support link added</li>
|
|
||||||
<li>2020-05-04: Simplified payment page</li>
|
|
||||||
<li>2020-05-16: Beta version of new Capsul web application</li>
|
<li>2020-05-16: Beta version of new Capsul web application</li>
|
||||||
|
<li>2020-05-04: Simplified payment page</li>
|
||||||
|
<li>2020-04-26: Support link added</li>
|
||||||
|
<li>2020-04-17: OpenBSD support added</li>
|
||||||
|
<li>2020-03-25: Network limits made public</li>
|
||||||
|
<li>2020-03-22: Alpine support added</li>
|
||||||
|
<li>2020-03-10: Capsul site goes live</li>
|
||||||
|
<li>2020-03-10: CVM name changed to Capsul</li>
|
||||||
|
<li>2020-03-07: CVM goes live</li>
|
||||||
|
<li>2020-02-26: Re-prepping docs</li>
|
||||||
|
<li>2020-01-31: Prepping docs</li>
|
||||||
|
<li>2020-01-30: Baikal ownership transferred to Cyberia Computer Club</li>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -11,65 +11,21 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
Which instance type should I buy?
|
Which instance type should I buy?
|
||||||
<ul><li>
|
<p>There are no hard rules for this sort of thing, but here are some guidelines:</p>
|
||||||
It depends a lot on your requirements, but I can lay down a few guidelines.
|
<p>f1-xs: blog, vpn, bot, cgit</p>
|
||||||
<ul>
|
<p>f1-s: a bot, owncloud, gitea, popular blog</p>
|
||||||
<li>
|
<p>f1-m: docker host, build system</p>
|
||||||
f1-s
|
<p>f1-l: large webservice, rotund java app</p>
|
||||||
<ul>
|
<p>f1-x: gitlab (wow such memory very devops</p>
|
||||||
<li> blog </li>
|
<p>f1-xx: something gargantuan</p>
|
||||||
<li> vpn </li>
|
|
||||||
<li> bot </li>
|
|
||||||
<li> cgit </li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
f1-m
|
|
||||||
<ul>
|
|
||||||
<li> owncloud </li>
|
|
||||||
<li> gitea </li>
|
|
||||||
<li> popular blog/vpn/bot </li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
f1-l
|
|
||||||
<ul>
|
|
||||||
<li> docker host </li>
|
|
||||||
<li> build system </li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
f1-x
|
|
||||||
<ul>
|
|
||||||
<li> large webservice with thousands of users </li>
|
|
||||||
<li> rotund java app </li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
f1-xx
|
|
||||||
<ul>
|
|
||||||
<li> gitlab (wow such memory very devops) </li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
f1-xxx
|
|
||||||
<ul>
|
|
||||||
<li> something huge </li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
How do I log in?
|
How do I log in?
|
||||||
<ul><li>
|
<p>ssh to the ip provided to you using the cyberian user.</p>
|
||||||
<p>ssh to the ip provided to you using the cyberian user.</p>
|
<pre class='code'>$ ssh cyberian@1.2.3.4</pre>
|
||||||
<pre class='code'>$ ssh cyberian@1.2.3.4</pre>
|
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
How do I change to the root user?
|
How do I change to the root user?
|
||||||
<ul><li>
|
|
||||||
<p>The cyberian user has passwordless sudo access by default. This should work:</p>
|
<p>The cyberian user has passwordless sudo access by default. This should work:</p>
|
||||||
<pre class='code'>
|
<pre class='code'>
|
||||||
# Linux
|
# Linux
|
||||||
@ -77,74 +33,55 @@ $ sudo su -
|
|||||||
|
|
||||||
# OpenBSD
|
# OpenBSD
|
||||||
$ doas su -</pre>
|
$ doas su -</pre>
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Do you offer reverse DNS?
|
Do you offer reverse DNS?
|
||||||
<ul><li>
|
|
||||||
<p>We do, but right now it's a manual process. Shoot us an email and we'll get it done.</p>
|
<p>We do, but right now it's a manual process. Shoot us an email and we'll get it done.</p>
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
What if I don't pay?
|
What if I don't pay / don't maintain my payments?
|
||||||
<ul><li>
|
<p>Your VM will eventually be deleted.
|
||||||
<p>Your VM will be deleted. You will receive coal.
|
Capsul will send you a few inoffensive reminders as that termination date approaches.
|
||||||
You will be banned from our minetest server.
|
</p>
|
||||||
We will attempt to give you ample warning before nuking a server, but that's no guarantee.
|
|
||||||
</p>
|
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Besides my virtual machines and payments, what information do you keep about me?
|
Besides my virtual machines and payments, what information do you keep about me?
|
||||||
<ul><li>
|
|
||||||
<p>We associate an email address with every VM so that we can track payment and respond to support requests.</p>
|
<p>We associate an email address with every VM so that we can track payment and respond to support requests.</p>
|
||||||
<p>If you pay with a credit card, Stripe sends some additional details about you that we literally cannot delete.</p>
|
<p>If you pay with a credit card, Stripe stores some additional details about you that we literally cannot delete.</p>
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
What can I do with my VM?
|
What can I do with my VM?
|
||||||
<ul><li>
|
<p>Make it into a mailserver, a bitcoin miner, a VPN host, whatever you'd like.</p>
|
||||||
<p>Make it into a mailserver, a bitcoin miner, a VPN host, whatever.</p>
|
<p>Our systems exist within the USA, and as such we are bound by US law.</p>
|
||||||
<p>We place no restrictions on what you can do, as long as it's not illegal. Don't get us in trouble.</p>
|
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Can you recover my passwords/insert new keys?
|
Can you recover my passwords/insert new keys?
|
||||||
<ul><li>
|
<p>Can we? Technically yes. Will we? No, never. It would violate the trust that our users have in us.
|
||||||
<p>Can we? Technically yes. Will we? Never. It would violate the trust that our customers have in us.
|
We have no interest in touching client VMs after they're running.
|
||||||
We have no interest in touching client VMs after they're running.
|
We promise to keep your machines running smoothly.
|
||||||
If you lose access to your VM, that's on you.</p>
|
If you lose access to your VM, that's on you.</p>
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Do you offer refunds?
|
Do you offer refunds?
|
||||||
<ul><li>
|
<p>Not now, but email us and we can probably figure something out.</p>
|
||||||
<p>Not now.</p>
|
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Where do the VMs run? Is it on a machine that you guys own/control?
|
Where do the VMs run? Is it on a machine that you guys own/control?
|
||||||
<ul><li>
|
|
||||||
<p>Capsul runs on a server named Baikal which Cyberia built from scratch & mailed to a datacenter
|
<p>Capsul runs on a server named Baikal which Cyberia built from scratch & mailed to a datacenter
|
||||||
in Georgia called CyberWurx. CyberWurx staff installed it for us in a rack space that
|
in Georgia called CyberWurx. CyberWurx staff installed it for us in a rack space that
|
||||||
Cyberia pays for. </p>
|
Cyberia pays for. </p>
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Do you offer support?
|
Do you offer support?
|
||||||
<ul><li>
|
<p>Yep, see <a href="/support">our support page</a>.</p>
|
||||||
<p>Yep, email us at <a href="mailto:support@cyberia.club">support@cyberia.club</a></p>
|
</li>
|
||||||
<ul>
|
<li>
|
||||||
<li>all volunteers have very busy schedules, but we will do our best to respond in a reasonable time period.</li>
|
Do you have an SLA?
|
||||||
<li>If you would prefer private support, please send your mail to <a href="mailto:capsul@cyberia.club">capsul@cyberia.club</a> instead.</li>
|
<p>No, but we normally respond pretty quickly.</p>
|
||||||
</ul>
|
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Will you implement feature X?
|
Will you implement feature X?
|
||||||
<ul><li>
|
<p>Maybe! Email <a href="mailto:ops@cyberia.club">ops@cyberia.club</a> and ask us about it.</p>
|
||||||
Maybe! Email <a href="mailto:ops@cyberia.club">ops@cyberia.club</a> and ask us about it.
|
|
||||||
</li></ul>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<h1>SUPPORT</h1>
|
<h1>SUPPORT</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="row half-margin">
|
<div class="row half-margin">
|
||||||
<a href="mailto:support@cyberia.club?subject=Please%20halp!">support@cyberia.club</a>
|
<a href="mailto:support@cyberia.club?subject=Please%20help!">support@cyberia.club</a>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
@ -17,7 +17,7 @@
|
|||||||
<a href="https://lists.cyberia.club/~cyberia/support">https://lists.cyberia.club/~cyberia/support</a>
|
<a href="https://lists.cyberia.club/~cyberia/support">https://lists.cyberia.club/~cyberia/support</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
If you do not want your mail to appear in a public archive, email <a href="mailto:capsul@cyberia.club?subject=Please%20halp!">capsul@cyberia.club</a> instead.
|
If you do not want your mail to appear in a public archive, email <a href="mailto:capsul@cyberia.club?subject=Please%20help!">capsul@cyberia.club</a> instead.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Please describe your problem or feature request, and we will do our best to get back to you promptly. Thank you very much.
|
Please describe your problem or feature request, and we will do our best to get back to you promptly. Thank you very much.
|
||||||
|
@ -111,10 +111,10 @@ class ShellScriptVirtualization(VirtualizationInterface):
|
|||||||
def create(self, email: str, id: str, template_image_file_name: str, vcpus: int, memory_mb: int, ssh_public_keys: list):
|
def create(self, email: str, id: str, template_image_file_name: str, vcpus: int, memory_mb: int, ssh_public_keys: list):
|
||||||
validate_capsul_id(id)
|
validate_capsul_id(id)
|
||||||
|
|
||||||
if not re.match(r"^[a-zA-Z0-9_.-]+$", template_image_file_name):
|
if not re.match(r"^[a-zA-Z0-9/_.-]+$", template_image_file_name):
|
||||||
raise ValueError(f"template_image_file_name \"{template_image_file_name}\" must match \"^[a-zA-Z0-9_.-]+$\"")
|
raise ValueError(f"template_image_file_name \"{template_image_file_name}\" must match \"^[a-zA-Z0-9/_.-]+$\"")
|
||||||
|
|
||||||
for ssh_public_key in ssh_public_keys:
|
for ssh_public_key in ssh_public_keys:
|
||||||
if not re.match(r"^(ssh|ecdsa)-[0-9A-Za-z+/_=@. -]+$", ssh_public_key):
|
if not re.match(r"^(ssh|ecdsa)-[0-9A-Za-z+/_=@. -]+$", ssh_public_key):
|
||||||
raise ValueError(f"ssh_public_key \"{ssh_public_key}\" must match \"^(ssh|ecdsa)-[0-9A-Za-z+/_=@. -]+$\"")
|
raise ValueError(f"ssh_public_key \"{ssh_public_key}\" must match \"^(ssh|ecdsa)-[0-9A-Za-z+/_=@. -]+$\"")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user