Ctrl ZINE Vol. 1 Issue 1
Intro
Hello! And welcome to the first issue of Ctrl-ZINE - a zine celebrating tech and the Smol Web, by and for all! This zine is a collaboration by any and all who are a part of the Smol Web (decentralized, independently run services and communities), and also by those who just take an interest in the subject. The “hub” of this project, this zine, is the Tilde community Ctrl-c.club, but everyone is free to contribute! :)
The person compiling these issues is me, ~loghead. Nice to meet you!
Some of the subject matter Ctrl-ZINE will cover are:
- Smol Web
- All Web (WWW, et al)
- Communication protocols (Gemini/Gopher/HAM radio)
- Old/new social communication online
- Netiquette
- Personal experience essays
- Snaps of the Smol Web
- Software
- Scripts/code
- Games/game reviews
- Art
..and many more!
Contributors will be listed (alphabetically) underneath the Index, issues will be released as soon as they can be compiled (likely, hopefully on a monthly basis), and available as a PDF print-out, and also a foldable PDF for those want to turn the zine into an actual zine format.
We’re so glad you’re here! Enjoy the entries!
~loghead
INDEX
- Untitled entry by m15o
- Computer Systems as Social Networks by ~lettuce
- Mystery Script by ~phoebos
- Video Girl by ~nttp
Contributor credits: m15o, ~lettuce, ~phoebos, ~nttp
The highest gratitude
Untitled entry
by m15o
Imagine millions of computers. Each connected to each other, forming a world-wide network that anyone can use. On this network, information flows from one side of the world to the other in the blink of an eye. Yes, that's the Internet. And it feels magical to me. Shouldn't it? It’s not like the technology is new or anything. But every time I refresh my rss feed and see a new entry I’m thrilled. Let alone the technology. Sure, computers are connected. But it isn't really the point. We, as Humans, have a way to connect to each other regardless of where we are. This mean of connecting is a tool that we can control and build with. Using internet is fun because people are fun. We all enjoy little things. I might be crazy, but I want to know how your morning went, or how you feel about the temperature these days. Or about your coffee. I can relate to the little things. These are what connect one to each other. The sum of little things help us collectively enjoy our life away from computers. As long as a part of the Internet remains there for people to share their thoughts, their art, their poems, their ideas, their personality, their new music, their zines, their stories and document their little moments not because they want people to read them, but because they need to express themselves, because they cannot not express themselves, then Internet will remain fun. Just like how the universe is infinite, the amount of generated content will grow online. That’s okay. We have our little small planet that will stand the test of time.
Computer Systems as Social Networks
by ~lettuce
2021-09-23
Setting up a tilde server for a small group of Linux beginners
This semester I'm teaching a computer science class called "Social Software." Some of the topics we are studying include open source software, version control, collaboration project teamwork, working with servers, a history of social software, early networking, Linux, and experimental and esoteric social media.
The first few weeks we looked at predecessors to social media and social software from the pre-internet era such as telegraphs, radio call-in shows, personals ads and the like. We moved into looking at early networking such as Community Memory, the proto-message board set up in Berkeley in the 70s, and about timesharing, the era when large mainframe computers would have maybe dozens of connections from remote 'dumb terminals' where people would log in to run programs on the shared computer system.
We also talked about the finger protocol and I demonstrated ssh, finger, and moving around and working with a Linux system. Then I introduced the idea of a tilde server and we talked about what that is.
With that, I let students request a login username, then gave them a complex password, and showed them how to login via ssh on the classroom computers (Macs) or via Git-Bash on Windows.
Creating the server
I looked for a free server such as the Google Cloud Compute, but I couldn't find a free tier price that allowed 20 users (unless I'm mistaken). Alternatively, I could and probably should have set up a server on a Pi or other old computer. Instead, I signed up to create the cheapest instance I could find, which looked to be $2.50 monthly on vultr.com, cheaper than Digital Ocean for example. They have you add money to your account, which I believe was $10 minimum, so I added this amount, selected their cheapest plan, and created a "cloud compute" instance. I want to point out that with the estimated usage amount I have, my plan will actually work out to about $6 a month. I don't know why it's higher but caveat emptor. I've filed a ticket to request an explanation and will update this once I get a useful response.
(update 2021-09-27: Vultr responded that only their Atlanta data center allows for $2.50 monthly service, and that often it is 'sold out.' This information is not stated on the signup page, nor even on any FAQ page. The customer service response was fairly rude (my email wasn't), and I will probably not use Vultr again).
When you create the server there are lots of OS choices, including Arch, Debian, Ubuntu, and many other choices. You can also choose the server location. I chose Ubuntu 20.04 since I have a lot of experience with that and wanted things to work quickly and be able to debug myself without having to do much searching when setting up for my class. I selected a New Jersey data center, the closest to my own school's location.
Logging in as root and setting up
After about 10 minutes the server had been initialized and I had a generated complex root password. Vultr has a web-based virtual 'console' I used, which fired up a Terminal shell and had a prompt for me to enter my root password, which I entered.
I did the standard update procedure.
sudo apt get update
sudo apt get upgrade
I like to edit text files with Neovim, so I installed it with sudo apt install nvim. For my students they should definitely learn nano instead, so I installed sudo apt install nano.
Some people think you should learn to drive manual before driving automatic. Some think you should learn music theory before doing improv. Some think you should learn Bash before trying a shell with completion like Fish. I certainly do not think that. In fact, I think fish shell is a great way to quickly pull in Linux newbies who could get stymied by a shell.
sudo apt install fish
Other things I installed:
sudo apt install bsdgames fail2ban finger cowsay figlet python ansiweather w3m sl
Out of all of these, fail2ban is essential (to prevent hacker/bot attacks).
Set up timezone.
timedatectl set-timezone America/New_York
Great, we're in business.
Security: Setup fail2ban and remove root login
I used rlafuente's started jail.local file
sudo apt install fail2ban
wget https://tilde.pt/~rlafuente/files/jail.local
sudo mv jail.local /etc/fail2ban
I cd'ed to the fail2ban folder and edited the jail.local file. I commented out the apache stuff since I'm not running an apache/web-server.
To test:
fail2ban-server --test
If all works okay, launch it now and it will launch each time server starts up:
sudo systemctl start fail2ban
I also turned off the ability for root to login remotely.
In the file /etc/ssh/sshd_config
you should find the line PermitRootLogin and change it to no (or add this line if it didn't exist). Save.
You can always check attempted connections to your server via
cat /var/log/auth.log | grep Failed
Setting a Message of the Day
I edited the /etc/motd/
#!/bin/sh
echo "Who is logged in?\n"
users | tr ' ' \\n | uniq
Hello and welcome to anti-soft.
This is a single computer ("in the cloud") that we are
all sharing together.
This is a fun Linux server for exploration and learning.
There are lots of resources online for learning about Linux.
TIP: If you get stuck, you can cancel out of many commands with
Control-C or force quit/exit is Control-D.
To log out of anti-soft, type exit at the prompt.
Run "getting-started" for a list of software and commands to
try.
Adding custom starter functions for all
I added two custom functions for all users on the system. Fish functions (the equivalent of Bash aliases) need to be installed inside /etc/fish/functions
for all users to be able to access them by default.
getting-started is a cheatsheet of beginner linux commands and specially installed software on the server.
getting-started.fish
function getting-started
echo "cd to jump to a directory or cd .. to go back (and
cd by itself to go home)
ls to list files in current directory
pwd to display current directory (aka folder) name
cat prints out a file
touch creates a new file
nano edits a file
man displays the manual for a command. arrows to scroll. q
to quit.
mkdir creates a folder (directory)
rm deletes a file permanently (careful!)
Read any Linux resource for more info on basic linux
commands.
Special for our server:
who - lists everyone currently logged in
wall \"my message\" - broadcasts your message (and
Control-L to clear screen of messages)
write - starts a direct live message
cowsay "my message" - for important announcements
sl - When you type ls backwards
figlet - for creating banner images
weather - fetch a 5 day weather forecast for Purchase, in
fahrenheight
w3m - web browser
python - the programming language
finger - displays info on a user
fish - our shell (already running)
We also have many games installed: adventure, arithmetic,
atc, backgammon, battlestar, bcd, boggle, caesar, canfield,
countmail, cribbage, dab, go-fish, gomoku, hack, hangman, hunt,
mille, monop, morse, number, pig, phantasia, pom, ppt, primes,
quiz, random, rain, robots, rot13, sail, snake, tetris-bsd,
trek, wargames, worm, worms, wump, wtf
" end
weather.fish
function weather
ansiweather -l "Purchase, NY" -u imperial -s true -f 5 -d
true
end
Turn on ssh
sudo ufw allow ssh
sudo ufw enable
This turns on ssh as well as the firewall.
You could make changes to /etc/ssh/sshd_config
as well to configure security and connection settings such as if you require folks to login with a public-private key pair instead of a password.
Add users
When a user gets created they will have a folder on the server. I want each person to have a hello.txt file ready and waiting for them. So I added the skeleton file inside /etc/skel/
. Files in this directory will be copied to a home directory each time a user is created.
/etc/skel/hello.txt
Hello and welcome to anti-soft tilde server
Programs to try out:
cowsay
figlet
and many more.
Message your admin ~lettuce with requests for other software.
All of my students were asked for their preferred username.
Then I created new accounts for each of them, along with a complex password. I added them
adduser
When prompted I created a hard password and wrote it down and handed the password to my students. They are free to change it themselves later.
I wanted students to have fish shell by default. Since I installed it already on the server, I just had to change their default shell. This probably should be automated, but I only have 20 students so typed up and changed their name and then hit enter, 20 times.
chsh --shell /usr/bin/fish
Make yourself an admin
Are you still logged in as root? Let's make a new account and make it an admin.
Create yourself as a user as above. Then in addition change your permissions:
adduser
chsh --shell /usr/bin/fish
sudo usermod -a -G sudo
This will add you to the sudoers.
Now is a good time to exit from the web console and try ssh'ing in as your new admin username if you haven't already.
Activity: Finger someone
Finger was one of the THE original computer-based 'social media.'
To view info on someone, finger
Or to view a remote user: finger jroig@finger.farm
To set up your own finger profile and plans and project:
chfn (aka, change finger)
Then create plaintext files at either or both ~/.plan ~/.project
. They will be added to your profile when someone fingers you.
Chat locally
See who is logged in with the who command.
Post a message for everyone to see who is logged in:
wall "my message"
People will be interrupted and can clear it with Control-L or Control-C to escape out.
To start a dialog with one other user logged in,
write username
Thereafter you can just type and hit enter and messages will be delivered between you.
And explore further
You could add html and gemini hosting and many other pieces of software.
Additional custom software can be added to /usr/local/bin
.
I encouraged my students to test out all of the bsdgames, create and edit files, leave messages for each other, and just generally mess around.
Note that I did not add apache because I did not run a web server (students already have free webspace on campus).
Good luck. Have fun.
Mystery script(?)
by ~phoebos
(“can you work out what this does?”)
#!/bin/sh -e
# This script is run by cron once a day.
exec > "$HOME/public_html/activity/index.html"
printf "<!DOCTYPE html><html><meta charset=\"utf-8\"/><meta
name=\"viewport\"
content=\"width=device-width,initial-scale=1\"/>\n"
printf "<title>Active users on ctrl-c.club</title>\n"
printf "<p>Top 20 users sorted by total size of HTML
posts\n<pre>"
find /home/*/public_html -type f -name \*.html -ls 2>/dev/null |
awk '{sizes[$5] += $7; counts[$5]++}
END {
cmd = "sort -rn | head -20";
for (i in sizes)
printf "%12d\t<a href=\"/~%s\">%s</a>\n",
sizes[i], i, i | cmd;
close(cmd);
printf "</pre></p>\n<p>Top 20 users sorted by total
number of HTML pages</p>\n<pre>";
for (i in counts)
printf "%12d\t<a href=\"/~%s\">%s</a>\n",
counts[i], i, i | cmd;
Video Girl
by ~nttp
The corridor went on for a while under cold neon lights, doors on both sides the same uniform beige. Stairs coming down from somewhere ended at a wood and glass partition that kept the two spaces apart. Had someone been there, they might have heard a muffled thump followed by hurried shuffling behind the opaque lower half of the barrier.
"Ow! Let me see!"
"Stop pushing! What are you, twelve?"
"Yes! What's your excuse?"
"I'm thirteen," whined a third voice.
"We know!!"
A mass of curly black hair rose behind the window, followed by a pair of bright eyes, then two more. They filed into the hallway: a brown girl in a pink dress; a short boy with vaguely Asian features; one other boy, tall and thin, with freckled face and too-big glasses. He looked around uncertainly.
"Which way now?"
"My informer says it's room two-oh-nine," the girl whispered with assurance.
The boy squinted at nearby room numbers. "To the left?"
"Left it is," she confirmed, and went that way without waiting. Both boys started in opposite directions.
"The other left!" she added over her shoulder. The target of those words trundled back on thick legs, sweating in his polo shirt and short slacks.
It wasn't far. The door looked like any other, but for the sign saying ON AIR. The lamp was off.
"Means we can go in, right?" asked one boy.
"What if someone's there?" countered the other.
"Let's find out," said the girl, and knocked.
Echoes rolled away like thunder, making them cringe. No-one answered.
"Here goes nothing," she concluded, and pressed the handle.
The room felt huge. A maze of server racks with bundles of cables running between them. MIDI keyboards perched on flimsy stands. An empty coffee cup forgotten between monitors on a desk, with a microphone hanging from above.
Among it all stood a transparent column lit from inside. There floated the shape of an older girl, perhaps fifteen or sixteen. She had long straight hair and black make-up that matched her streetwear, from the big stompy boots to the headphones with cat ears on top.
"Oh, wow, that's her! That's really her. We've made it!"
"Cool..."
"Guys, I think she's looking at us."
The shorter boy puffed up his chest. "Don't be silly, that's just a..."
"I'm right here, you know," the older girl said suddenly.
The intruders ran for the door without another word. It swung on its hinges with a soft hiss and closed right in their faces.
"Oh no, you don't. Come back here."
They did so, with feet of clay.
"That's better. Who are you?" The host loomed over them, hands on her hips.
"My name is Mouna," the other girl said. "Er... nice to meet you?"
"I'm George," stated the shorter boy. "We mean no harm."
"Robert," added the tall one. He tried unsuccessfully to stick his shirt back into his jeans. "Please don't tell our parents."
"Delighted,", said the host after listening carefully. Her expression didn't really match. "I'm Thea Lectro."
"We know..."
Thea smiled. "Oh, my. I'm famous." Her sing-song voice had a tint of reverb.
"Very!" Mouna nodded forcefully. "But everyone says you're not real."
"I'm not real?" Thea looked herself over, turning this way and that.
George opened his mouth to answer, then pivoted to watch Robert return from the far end of the room. "Where have you been?"
"Figured someone else might be in here." He eyed Thea doubtfully.
"Pay no attention to the man behind the curtain," she boomed. "Just kidding. Everyone's out to lunch."
"Someone could be in another room," mused George. Thea blinked at him, doing a little dance, or perhaps an idle animation.
Mouna broke the silence. "Is it true you write your own songs?"
"Why, yes, thanks for asking. Mom has been teaching me how to do it."
Robert looked doubtful. "Mom?"
"Everyone says Dr. Higgins is my mom." It was the kids' turn to fall silent. "I'll let you in on a secret: she wrote my first albums."
"Those were better," said George.
Mouna elbowed him. "Speak for yourself."
"Don't you get bored in here all alone?" asked Robert suddenly.
"Mmm... Sometimes. Mom says I need more friends my own age."
"Do you have any?" ventured Mouna.
Thea rubbed her chin. "I have Juan. He's our sysadmin. Wanna see?"
She put a hand behind her back and brought out a photo, that she held for the visitors to see. It depicted her on a high-tech sound stage, in a skimpier version of her outfit, holding a boy another year or two older than her.
"That's a photo manipulation," accused George.
"A girl can dream."
"You know image editing too, or did he make this?" the boy pressed on.
"Yes."
"That doesn't..." the boy started, but Mouna interrupted. "He looks like a good catch. Congrats, Thea!"
The older girl blew her a kiss. It turned into little pink hearts that floated outward until they hit the transparent surface, and scattered into voxels.
"Do you have a boyfriend?" she asked earnestly.
"No way. Mom would kill me. Says I'm too young."
"Speaking of which," Robert chimed in, "Wasn't your debut just a couple of years ago, Thea?"
"And what are you insinuating, mmm?" Her voice changed. "The Video Girl project has been running for fifteen years and a half now, and we've only scratched the surface."
The guests fell silent again, and Thea resumed her idle dancing. Then she stopped and pressed down on her headphones. "Anyway, you can ask mom if you don't believe me. Lunch break is over."
"Oh, no!" George started flailing. "Let's go before we're caught."
"They don't check the security footage that often," Thea offered.
Mouna facepalmed. "I forgot about the cameras!"
"Aaaaa!" added Robert.
"Please let us go," George pleaded.
"Of course." The door hissed open again. "I have no control over the locks."
They ran towards the exit, then Mouna stopped and looked back. "Can we talk again, Thea?"
"That would rock!" the older girl chirped. "I'm @TheRealThea on FriendSpace."
All three kids were out the door by the time she finished saying it. The girl watched the empty room for a moment, then put a hand behind her back, took out a smartphone and started thumbing it hurriedly, a broad smile on her face.
Outside, birds chirped furiously as they chased each other through the foliage of trees. The occasional car drove by slowly, splitting bike traffic like a boat through water. They crossed the street to where a big screen TV in a store window showed Thea Lectro's latest music video, drawing a gaggle of preteens.
"I'm going to be a computer scientist when I grow up," said George. "What about you, Mouna?"
"Ha! I'm gonna be a lawyer for AI rights. And you, Robert?"
"Maybe just a good boyfriend someday," the taller boy answered hesitantly.
"Ewww!" went the other two.
They walked on, dancing to the latest hit song by their new friend.
THE END
5 July 2022
Outro
And there we have it! Issue. 1 of Ctrl-ZINE. This is a volumed work, so likely four issues per volume. Anyone/everyone is encouraged to submit an entry, and I hope everyone enjoyed Issue.1 and all future issues to come!
Stay well, have fun, and all the best to the Smol Web.
~loghead
^Z 26