From d1509d47f44e7e017d95da864328da4542dc3890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Palomares=20Pizarro?= Date: Tue, 8 Nov 2022 12:54:40 +0100 Subject: [PATCH] Initial commit --- EVALME.el | 17 + about.org | 25 ++ btrfs_better_than_zfs.png | Bin 0 -> 32915 bytes css/styles.css | 65 +++ freebsd_user_on_btrfs.png | Bin 0 -> 53969 bytes inc/footer.html | 2 + inc/header.html | 23 ++ index.org | 32 ++ marijuana_reviews.org | 172 ++++++++ media.org | 131 ++++++ openbsd.org | 482 ++++++++++++++++++++++ tech_posts/brotli_in_openbsd_http.org | 61 +++ tech_posts/bsd_make.org | 211 ++++++++++ tech_posts/coreboot_x220.org | 12 + tech_posts/fear_and_loathing_in_artix.org | 177 ++++++++ tech_posts/freebsd_as_desktop.org | 298 +++++++++++++ tech_posts/index.org | 28 ++ tech_posts/modern_perl.org | 214 ++++++++++ tech_posts/org_mode_as_ssg.org | 153 +++++++ 19 files changed, 2103 insertions(+) create mode 100644 EVALME.el create mode 100644 about.org create mode 100644 btrfs_better_than_zfs.png create mode 100644 css/styles.css create mode 100644 freebsd_user_on_btrfs.png create mode 100644 inc/footer.html create mode 100644 inc/header.html create mode 100644 index.org create mode 100644 marijuana_reviews.org create mode 100644 media.org create mode 100644 openbsd.org create mode 100644 tech_posts/brotli_in_openbsd_http.org create mode 100644 tech_posts/bsd_make.org create mode 100644 tech_posts/coreboot_x220.org create mode 100644 tech_posts/fear_and_loathing_in_artix.org create mode 100644 tech_posts/freebsd_as_desktop.org create mode 100644 tech_posts/index.org create mode 100644 tech_posts/modern_perl.org create mode 100644 tech_posts/org_mode_as_ssg.org diff --git a/EVALME.el b/EVALME.el new file mode 100644 index 0000000..a3acb13 --- /dev/null +++ b/EVALME.el @@ -0,0 +1,17 @@ +;; Change this +;; Change this +(setq org-publish-project-alist + '(("qorg11.net" + :base-directory "/home/qorg/docs/repos/qorg_org" + :publishing-directory "/home/qorg/docs/repos/qorg_org/out_html" + :section-numbers nil + :publishing-function org-html-publish-to-html + :table-of-contents nil + :recursive t + ))) + +(defun make-qorg () + (interactive) + (org-publish "qorg11.net")) + + diff --git a/about.org b/about.org new file mode 100644 index 0000000..c071f14 --- /dev/null +++ b/about.org @@ -0,0 +1,25 @@ +#+INCLUDE: "inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+TITLE: Suragu.net +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: about.html + +* About + +This (very alternative) website exists for the sole purpose of +existing. This website has no objetive purpose. + +As if someone cared, here's my neofetch. + +#+begin_export html + +#+end_export + +** About the person + +[[./img/fermin_trujillo.jpg][Freelancer from Spain]] + + diff --git a/btrfs_better_than_zfs.png b/btrfs_better_than_zfs.png new file mode 100644 index 0000000000000000000000000000000000000000..e7448023478039cd76fd2fd2472613ef2c05acb4 GIT binary patch literal 32915 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 Scohr)Ku$(Ux a { + text-decoration: none; + font-weight: bold; + margin-left: auto; + margin-right: auto; + font-size: 16px; + color: #6a0606; + margin: auto; + +} +.button { + border: 1px; + border-style: solid; + width: 120px; + border-color: purple; + margin: 2px; + text-align: center; +} + +.sidebar { + position: fixed; + top: 0; + left: 0; + width: 125px; + height: 100%; + transition: all 0.5s ease; + border: 1px solid red; + border-top: 0px; + border-left: 0px; + background-color: rgba(42, 20, 41, .5); + +} diff --git a/freebsd_user_on_btrfs.png b/freebsd_user_on_btrfs.png new file mode 100644 index 0000000000000000000000000000000000000000..38a24fa14a6fc5058df169274b2052aef9ea2a63 GIT binary patch literal 53969 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 +Unlimited Aku works VOL. II La saga del exilio diff --git a/inc/header.html b/inc/header.html new file mode 100644 index 0000000..daa0464 --- /dev/null +++ b/inc/header.html @@ -0,0 +1,23 @@ + diff --git a/index.org b/index.org new file mode 100644 index 0000000..38c3ee7 --- /dev/null +++ b/index.org @@ -0,0 +1,32 @@ +#+INCLUDE: "inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil ^:nil +#+TITLE: SURAGU +#+HTML_HEAD_EXTRA: +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: index.html + +* suragu.net +Welcome to suragu.net! My personal website. In which you can read my +philosophical posts or my posts about technology. + +* Contact + +You can contact me through email: chief_keef at riseup dot net or +XMPP: keef at this domain +* Donate + +If you appreciate my work and wish to say thanks, you can send money +to any of these cryptocurrencies addresses: + +- Monero: 87nNzDdnACV614EuueWcwiX16hYNr9cVMACzYExHvGRRf2sHDUydjNvFvoMRBRbJntgxanvE9vzGxLTgenydK8PuSMq9aXC +- Bitcoin: bc1q8k6f3ja8na82wl6ehw73uhy67d45pkhs63yvy5 + +* Mirrors +#+begin_export html +

+[Tor]​ [I2P]​ +

+#+end_export diff --git a/marijuana_reviews.org b/marijuana_reviews.org new file mode 100644 index 0000000..af58021 --- /dev/null +++ b/marijuana_reviews.org @@ -0,0 +1,172 @@ +#+INCLUDE: "inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+TITLE: Suragu.net +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: marijuana_reviews.html + +* SURAGU’s Marijuana Reviews + +Creativity, It’s a known fact that grass increases creativity from +eight to eleven times. In fact, everyone finds they’re more creative +stoned than straight. Humans have always been very creative at the +time to get high. In Spain, stoners were so bored that they found a +legal loophole that allowed them to legally consume and sell dispense +Cannabis buds. Since I joined one of those clubs, my vision of a +fucking plant has changed so damn much. Like everything in +contemporany society, you have so much choice it’s depressing. In this +post I will review all the strains I have tried. + +But I won’t say “this shit dope” because that would be too boring. And +I’m also not going to explain how each bud helps you with insomnia, +anxiety, depression and ADHD because despite recent research shows +it’s not so darn harmful, i’m not an idiot either. + +So I’ll review the buds using Pen & Pixel Graphics album covers. I am +not rating the weed on how good the album is. Just in how weird the +cover is. + +I’d like to thank my friend Endemic for the idea of making weed +reviews with album covers, for showing me all this awesome music and +helping me choose the covers. + +Whatever weed you’re smoking. And despite whatever these reviews says +about each strain, there’s this quote from Kabuto Makai I the Great +that you should never forget: + +“Sea Indica o Sativa me da igual que guay está la keli echandose +un mai” + +** Amnesia (grass) + +Amnesia Haze is a classic, is a strain that anyone who has been +smoking real weed for more than 2 minutes has tried. With more than +20% of THC, the shit will get anyone high. I will give this strain the +rating of DJ Screw - The Legend. + +[[./img/covers/thelegend.jpg]] + +DJ Screw in the sky with a skull behind him it’s something I could +have never thought of. And going to a cannabis club is also something +I would have never thought of. I also find it pretty funny that +there’s a car with Screw by its side. + +** Amnesia (Hash) + +Advantages of going to a Cannabis Social Club is that you know that +you’re smoking quality grass and quality hash. The hash here is made +by the dudes who work at the club, not by a moor sweating in his +room. So it has a very high quality. + +The thing with hash is that it is hash. Too strong for some. But me? +It only leaves me thinking very weird funny things and I’m so relaxed +I can’t move. Then I move to some kind of backrooms. In which I find +myself listening to whatever Antonio Recio is saying. Great +experience. Amnesia Hash deservers nothing less than Lil Keke - The +commision + +[[./img/covers/thecommision.jpg]] + +Where do I start? Where are them? First time I thought it I felt like +this was a GTA San Andreas mission. Like the dudes are in the Four +Dragons Casino. And I like how the dude is peacefully smoking a cigar +when he got 2 bodyguards. I don’t know. It is pretty surreal. + +** Amnesia Hy-Pro + +I don’t even know what Hy-Pro means. The friend who sold me this told +me that it has a shitton of THC. I believe him. It did indeed had a +shit ton of THC. It was a psychedelic experience. So high I didn’t +even know my name. I have not felt something similar to that since +then. So I can give this thing nothing less than Juvenile - 400 +Degrees + +[[./img/covers/400degres.jpg]] + +I wish I could know where to start with this cover. First we can see +that they’re in hell. And there’s this dude burning money. and a gold +watch. Dude’s rich and he’s showing off. Then we can see, similary to +DJ Screw’s The Legend, a giant face of the same dude in the +sky. Presumably Juvenile is the devil. If you look both at the left +and right side, you can see, scot-free, hookers. Why are there hookers +in hell? I can’t tell. Then you have the Parental Advisory sticker. I +couldn’t have known. + +** Chocolope + +Chocolope is a Sativa-Dominant strain. Marijuana journalists says that +it has a sweet flavour, tasting simillary to chocolate. In my +experience, it just tasted like marijuana smoke. I’ve had better highs +in my life. Nevertheless Chocolope is a good strain that gives a good +effect. Used it to saw Perturbator live and had a great +experience. The Chocolope deserves Three 6 Mafia - The end + +[[./img/covers/theend.jpg]] + +I don’t even know how to explain this cover. What are they on? Is that +a car? A giant stereo? I genuinely can’t tell. But for some reason +they’re into outer space and you can see the earth behind them. The +earth is exploding. Maybe it is trying to say that only Three 6 Mafia +survived the apocalypse by riding a giant stereo. Riding a giant +stereo to outer space is something that could only happen in Memphis, +Tennesse. + +** Unknown Indica Strain + +We got a Special Joint for this mysterious strain we can’t remember +the name of. We have vague indications that the strain name was +“Wedding cake”. Thing is that we thought that C. Indica were for +pussies. We were so damn wrong. We were nailed to the couch for at +least 15 minutes. To this thing I can only give SSUR - Guerrillas in +the midst + +[[./img/covers/guerrilla.jpg]] + +Why does the Che Guevara look like a Monkey, why are there hookers if +they’re in the guerrilla. What’s up with the explosion, what’s with +all the money? I’d frame this cover if I could. + +** Terps (Hash) + +It is impossible for a Allah’s Follower to make bad hash. These +“Terps” is dry extraction of hash. I don’t know what “Dry” means. My +Marijuana Master doesn’t know what “Dry” is. So I just asume it is +just zoomer expression to say that a hash is good. But to answer the +question if “Was it good?” The answer is the following picture: + +[[./img/covers/greatesthits.jpg]] + +We smoked this hash mixed with Weed Marijuana. When we left the CSC, +we were in another dimension. Sadly we had to catch the bus later. We +were there and all of us started to feel exagerately dizzy. I don’t +rememebr anything that happened in the hour of bus. I just remember +that I was listening to some music, I can only rememeber “My mind went +blank” my DJ Screw (The Legend). Then they woke me up. First thing I +see is a bottle full of vomit. + +** Santa Sativa + +#+begin_quote +santa: 1. adj sacred; hallowed: holy ground +#+end_quote +Santa Sativa is a Sativa Dominant Weed Marijuana strain. Relatively +high THC and low CBD. First time we tried this the Terps Incident +happened. So the weed must have been good shit. Then we smoked this +shit and unbeliable things happened. Everyone I thought to be Cannabic +Senseis said this strain was one of the best herbs they have ever +consumed. Thus, this strain deserves nothing less than: Snoop Dogg - +Da Game Is To Be Sold. Not To Be Told. + +[[./img/covers/dagame.jpg]] + +This masterpiece of the contemporany art is deleightful for our +eyes. We can see the motherfucking d-o double g holding a walking +stick made from gold. For undisclosed reasons. He is outside the +“Snoop World” (See Montana Management Co.) The thing is that his +mansion looks like a fucking castle you’d see in Disney +World. Perspective fucks with us so much in this one. As he is behind +Snoop World mansion, he’s sitting in the bonnet. Smoking what seems to +be a Swisher Sweet and his arm is in another car. There are also three +dogs in the pictures with shining diamonds. diff --git a/media.org b/media.org new file mode 100644 index 0000000..ee63024 --- /dev/null +++ b/media.org @@ -0,0 +1,131 @@ +#+INCLUDE: "inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil ^:nil -:nil +#+TITLE: suragu.net - Media I've consumed +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: media.html + +* Media I've consumed +Well, someone has said, that in this world there are people for +everything, or "it takes all sorts to make a world", so there must be +someone interested on the media I consume and what I think about +it. So here are music albums, movies and similar. + +As i'm not a professional rater, I'm not gonna rate them, in numbers, +i'll just say what I think about the thing and that's it. + +Pssss. You can get some of the media listed [[https://files.suragu.net/][here]]. + +** Movies +I love the "guy who think he's cool" cinema. + +- *Pulp Fiction (1994)*: The movie is stupid, ridicolous and most + pejorative adjectives you can think of. But it's my favorite movie + nevertheless. +- *Kill Bill (2003-2004)*: Good movies. +- *Trainspotting (1996)*: Movie about [[https://concealed.world/home.php][Scottish Drug addicts]]. The thing + sends a Good Message. And the movie is really enjoyable. +- *T2 Trainspotting (2017)*: Not as good as the original but still + passable. +- *Ghost in the Shell (1995)*: It's the only anime movie i've + watched. It's pretty cyberpunk so i like it. +- *Torrente: El brazo tonto de la ley (1997)*: Fucking funny garbage, if + i wasn't high i wouldn't have liked the thing. +- *Torrente 2: Misión en Marbella*: Idem +- *El día de la Bestia (1995)*: My favorite movie this country has made +- *Acción mutante (1993)*: One of the movies i laughed the most +- *Fear and loathing in Las Vegas (1998)*: I don't know what I watched +- *Scarface (1983)*: Masterpiece. +- *Navajeros (1980)*: Funny at times but didn't like it at all. +- *El pico (1983)*: Way better than Navajeros and has a cool message. +- *El pico 2 (1984)*: This one was interesting. +- *Scary Movie (2000):* Utter shit. But THC boosts movies. +- *Ali G Indahouase:* ??? +- *The Godfather (1972):* Masterpiece +- *Lady Snowblood (1973):* I loved Kill Bill. I loved this even more. +- *The great lebowski:* Same as fear and loathing in las vegas. +** Videogames +Well, now I got a decent computer in which I can play games +decently. I have completed all the storyline of these games unless +stated otherwhise. + +- *Borderlands 2:* One of my favorite games. +- *Borderlands: The Pre-sequel*: Still playing it +- *Milk (out|in)side a bag of milk (out|in)side a bag of milk*: Had a [[./img/funny.png][funny frame]] +** Anime +I'm not much of an anime watcher, but eh, sure. I'm including both +anime shows and movies in this section. + +- *Serial Experiments Lain*: The anime is cool. I used to simp for Lain + but then I discovered I'm suragu, not a insecure, twitter user +- *Paranoia Agent*: I remember once a linguistics teacher I had told me + to watch this anime. I watched it and I really enjoyed it. A good + satire. I have keked big to this one. +- *Texhnolyze*: Made by the same guys that made Lain. But i enjoyed this + one more than Lain +- *Haibane Renmei*: Made by the same guy as Lain and Texhnolyze, this is + the only media that made me cry and i have 0 problems admitting it. +- *The curse of Kazuo Umezu*: I can't take gore animes seriously + because I analyze the situation, which makes me laugh + uncontrollably. Altough it was fun to watch. +- *Shoujo Tsubaki (1992)* : The thing stated above doesn't apply for this + one. This one is actually depressing. +- *Belladonna of Sadness (1973)*: Masterpiece. The Japanese version of + Pink Floyd's The Wall. Psychedelic, deep, and weird. + +** Books +I know how to read + +- *Neuromancer (1984)*: A drugaddict hacker needs to make money but he + can't work because he stole from his bosses. +** Music +This shit will never be complete. + +- *Big Moe - City of Syrup* +- *bôa - Twilight* +- *CCR - Pendulum* +- *Chief Keef - Finally Rich* +- *Chief Keef - The Leek, Vol. 1:* Sounds like Korean Vaporwave +- *D.R.I. - Crossover* All songs are the same to be honest +- *D.R.I. - Thrash zone* Cool +- *DJ Screw - All screwed up Vol. II* +- *DJ Screw - 3 N’ The Mornin’ Part One* +- *DJ Screw - 3 N' The Mornin' Part Two* +- *DJ Screw - The Legend* +- *Dr. Octagon - Dr. Octagonecologyst*: Kool Keith is a genius. +- *Dr. DOOOM - First come, first served* +- *Denzel Curry - Melt my eyez see your future* +- *Envidia Kotxina - Asi en la tierra komo en el zielo+* +- *Gospel - The Moon is a Dead world* +- *Iron Maiden - Somewhere in time* My favorite album from these dudes +- *Kanye West - My Beautiful Dark Twisted Fantasy (2010)* +- *Kendrick Lamar - DAMN.* +- *Kendrick Lamar - Section.80* +- *Kendrick Lamar - good kid, m.A.A.d. city:* I listen to this album at night while doing stuff and I like it. +- *King Geedorah - Take me to your leader +- *Living Death - World neuroses* It’s alright +- *MF DOOM - MM..FOOD* +- *Metallica - Kill ’em all* +- *Metallica - Ride the lighting* +- *Metallica - Master of Puppets* +- *Metallica - …And Justice for All* +- *Megadeth - Rust in peace* +- *Megadeth - Countdown to extinction* +- *Megadeth - Youthanasia* +- *MF Grimm - The hunt for the Gingerbread man:* Underrated. +- *Madvillain - Madvillany: Masterpiece.* +- *Makaveli - The Don Killuminati: The 7 Day Theory* +- *Neutral Milk Hotel - In the airplane over the sea:* Dude please learn how to sing. +- *Scattle - Backup* +- *Scattle - Visitors* +- *TOOL - Lateralus* +- *Viktor Vaughn - Vaudeville Villain* +- *Wu-Tang Clan - Enter the Wu-Tang* +- *Zabutom - Zeta force* +- *cLOUDEAD - cLOUDEAD* +- *death’s dynamic shroud.wmv - I’ll try living like this*: Used to love it. Now it gives me anxiety. +- *smashing pumpkins - mellon collie and the infinite sadness:* My mother likes it +- *suicideboys - I want to die in new orleans + some of their EPs* +- *わたしのココ - カラダは正直:* I was told by my friend that this was noise, I thought noise was about making music breaking plates and stuff. Album was good. diff --git a/openbsd.org b/openbsd.org new file mode 100644 index 0000000..27ec1c5 --- /dev/null +++ b/openbsd.org @@ -0,0 +1,482 @@ +#+INCLUDE: "inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+TITLE: suragu.net - OpenBSD +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: openbsd.html +* Fear and Loathing in OpenBSD, or my experiences with OpenBSD +The other day I woke up and I thought "I'm going to migrate my server +to OpenBSD for absolutely no reason". And so I did. The operating +system have been a pain and a pleasure simultaneously, and in this +page I intend to give my experiences with it. + +I will be updating this page as I have more experiences with +OpenBSD. So add this page to your booksmarks! + +Last update. 2022-06-09 + +For questions or comments on this article feel free to reach me out at +teru-sama [at] riseup [dot] net + +** Installation +The installation process was pretty straightforward, it was just +enter, enter, enter, altough I had to connect an ethernet cable for it +to download some necessary firmware (so I could use the network card) +and thus, the wireless connection. + +** Setting up services +*** httpd(8) +The website you're in is the website I care the most, kill-9 can wait +because that's only a website in which i complain about +things. Complaining about everything is not good because in this life, +well, in Ozzy Osbourne words, "Learn how to love and forget how to +hate". So I'd rather focus on ebin.city and suragu.net for the +time. + +OpenBSD ships with the =httpd= web server. A really simple and very +secure http server. The main config file is =/etc/httpd.conf= which +has a very simple, human readable syntax. + +One of the features of this webserver is that chroots to a +directory. Meaning that, to the web server, anything before the given +directory (=/var/www= by default), does not exist. So if a vulnerability +is found, the attacker can't do much things, as the attacker can't go +beyond =/var/www=. +*** slowcgi(8) +OpenBSD comes out-of-the-box with a FastCGI implementation, which is +very simple to use. you only have to add =fastcgi= at the desired site +in =httpd.conf= . The following configuration file is enough to +execute CGI scripts. +#+begin_src conf-space + server "suragu.net" { + listen on * port 80 + root "sites/suragu.net" + location "/*.cgi" { + fastcgi + root "sites/suragu.net" + } + } +#+end_src + +But not so fast! Remember that httpd runs in a chroot? Well, your CGI +apps won't work by default, because the chroot lacks the binaries that +are necessary to execute the program. So if your CGI appliaction is a +perl script, you'll have to do something like =cp /usr/bin/perl +/var/www/bin=. If your Perl script uses third-party modules, you'll +have to copy them to anything that is in =@INC=, so +=/usr/var/www/usr/lib/perl5= or something like that. Also your chroot +will lack all the core utils. I just installed plan9port and copied +the files to =/var/www/bin=, which is more than enough. + +As mentioned before. I haven't been able to setup werc in httpd. Not +sure why. I might try to reinstall it some other day. But I guess I'd +have to use another server to do that. + +As of 2022-06-02 I got werc to werk under httpd. The config file is a +bit weird, but it worked. Altough I had to install an older werc +version because the most recent one had some issues. This is the +config that worked. Thanks to solene in IRC for the pattern! + +#+begin_src conf-space + server "kill-9.xyz" { + alias "www.kill-9.xyz" + listen on 127.0.0.1 port 1340 + + listen on * tls port 443 + + tls { + certificate "/etc/ssl/kill9cert.pem" + key "/etc/ssl/kill9key.pem" + } + + # If there's a dot in the URL (i.e. a file extension, don't run it as + # a CGI script.) + + location match "%s*%.%s*" { + root "/werc/sites/kill-9.xyz" + no fastcgi + } + + location match "/" { + fastcgi param SCRIPT_NAME "/werc/bin/werc.rc" + fastcgi param SCRIPT_FILENAME "/werc/bin/werc.rc" + fastcgi param DOCUMENT_ROOT "/werc/sites/kill-9.xyz" + } + root "/werc/sites/kill-9.xyz/" + + + } +#+end_src + +And then I tried to install cgit. When clonning from httpd I got an +error I've never got before. Something like "Recieved HTTP/0.9 when +not allowed". I don't know what the hell =httpd(8)= meant by that. But +it was fixed by nuking the repos and pushing them again from +scratch. I guess it had something to do with file corruption. But you +have to be crazy on acid to think that sending HTTP/0.9 is a good way +to tell a file is corrupted. +*** Darknets +Not much difference from how you'd install Tor & I2P in a Linux +machine. Just install the tor and i2pd packages using =pkg_add(1)= and +configure them normally. I had to copy the old private keys from my +old machine to the new server. But that was not a big issue. I also +migrated from the classic I2P, written in Java to i2pd. Not because I +dislike the Java I2P, I think it is, along with Freenet, the only good +software written in Java. I just wanted to keep the server as light as +possible. And i2pd is way lighter than Java I2P. + +** Programming in OpenBSD +OpenBSD claims to be the most secure UNIX out there. This is probably +true as it has much features, such as the W^X thing. Which means +memory can be written or executed, but not both. Basically an attacker +could not execute a buffer overflow attack. Because he can only +write. But not execute it. This thing was introdouced in 2003. +*** pledge(2) +OpenBSD takes security very seriously. This was the reason to be of +the =pledge()= syscall. Pledge does, as defined by the manpage: +"restrict system operations". This is the prototype: +=pledge(const char *promises, const char *execpromises);= + +Check the manpage for the possible promises. This is a quick example: + + +#+begin_src c + #include /* printf() */ + #include /* pledge() */ + #include /* chmod() */ + + int + main(void) + { + /* stdio promise allows basic input output operations. Check the + ,* manpage for the syscalls this promise allows. */ + pledge("stdio", ""); + + chmod("/etc/passwd",0644); + + return 0; + /* This code will crash at runtime. the "stdio" promise doesn't + ,* allow the chmod() syscall. */ + } +#+end_src + +Running that code will prodouce the following output: + +#+begin_src sh +Abort trap (core dumped) +#+end_src + +This is very useful, imagine that for example, some injects, somehow, +malicious code in your =cat(1)= program. Sending data to a remote +server. As cat didn't =pledge("inet",...)=, cat won't be able to +create a connection. +*** unveil(2) +I like this syscall more than =pledge(2)= according to the manpage: +"unveil parts of a restricted filesystem view" This means that, except +for the file specified in the =unveil()= calls, wont' exist for the +program. Consider the following code and its output: + +#+begin_src c + #include /* read(), write(), unveil() */ + #include /* open() and flags */ + #include /* strerror() */ + #include /* errno variable */ + #include /* fprintf() */ + + int + main(void) + { + /* This program can exclusively open /etc/httpd.conf for reading. */ + unveil("/etc/httpd.conf","r"); + /* This call disables further calls to unveil() */ + unveil(NULL, NULL); + /* What happens if we try to open another file? */ + int fd = open("/etc/passwd", O_RDONLY); + + if(fd == -1) { + fprintf(stderr,"Error opening file: %s\n", + strerror(errno)); + _exit(-1); + } + + char buf[8192]; + int bytes = read(fd, buf, 8192); + write(STDOUT_FILENO, buf, bytes); + + return 0; + } +#+end_src + +Output: =Error opening file: No such file or directory= + +Yes, my /etc/passwd file exists. +*** perl(1) +Perl is the only scripting language that OpenBSD ships. And they have +their reasons you can read [[https://marc.info/?l=openbsd-misc&m=159041121804486&w=2][here]]. This means that Perl comes with +support for the OpenBSD weird features. This means that you can call +=pledge(2)= and =unveil(2)= from your Perl scripts! Here's an example +of that: + +#+begin_src perl + #!/usr/bin/perl + + # The syscalls come as modules, so you have to import them, the + # subroutines are exported by default. + + use OpenBSD::Pledge; + use OpenBSD::Unveil; + # The manpage says that, without the "stdio" promise, perl is useless, + # so it is called by default no matter what you do. + pledge("inet rpath wpath unix"); # Some example promises... + unveil("/etc/httpd.conf","r"); + unveil("/etc/pf.conf","r"); + unveil(); # Restrict further calls to unveil() + +#+end_src +*** strlcpy(3) and strlcat(3) +The well known =strncpy(3)= and =strncat(3)= functions copy no more +than =n= characters, but these functions are not guaranteed to add the +'\0' at the end of the string. =strlcpy(3)= and =strlcat(3)= guarante +that the string ends with '\0' +*** Makefiles +For some reasons, I wanted to rewrite the Makefile of one of my +programs. And I discovered that BSD make is much better than GNU +make. With GNU Make you have to declare pattern rules. And weird +syntax. And you have to write similar makefiles for each program. In +OpenBSD this is not necessary because makefile has some kind of +"templates". This is a perfectly working makefile, /with =clean= and +=install= targets/ +#+begin_src makefile +PROG = sakisafecli +SRCS += funcs.c sakisafecli.c +MAN = sakisafecli.1 sakisafeclirc.5 +LDADD = -lssl -lz -lpthread -lnghttp2 -lcurl -lconfig -lcrypto -L/usr/local/lib +CPPFLAGS = -I/usr/local/include +BINDIR=/usr/local/bin +.include +#+end_src + +This makefile also works in Linux, but using the =bmake= command +instead of =make=. It also works in FreeBSD but you'd have to repleace +CPPFLAGS with CFLAGS. +*** Libraries +OpenBSD, unlike every Linux distribution out there, thinks about +everyone. And when you download a library through the package manager, +it will install the shared objects (for dynamic linking), the header +files (which means, no -dev/-devel packages) AND the .a files. For +static linking! +** Software and the power it holds +OpenBSD comes with a lot of software that should be enough for your +normal tasks. But, it's not like OpenBSD grabbed some code and put it +in the code, no, they wrote their own versions of popular +software. And "ported" them to OpenBSD, so the software that comes +with the operating system uses the security features, they call +=pledge()=. and stuff like that. + +*** mg(1) +This is a Emacs clone. For the people who, for any reason, can't (or +don't want) to run GNU Emacs. This clone is pretty complete, the only +thing it lacks, regarding emacs, is emacs lisp support and syntax +highlighting. But this is a good =nano(1)=, =ed(1)= or =vi(1)= repleacement. +*** signify(1) +GNU Privacy Guard is kinda heavy, and we don't have any other decent +OpenPGP implementation. This is the reason of why the OpenBSD devs +created =signify(1)=, a tool to cryptographically sign and verify +files and messages. And this is the way OpenBSD images are +verified. It's pretty simple to use: + +#+begin_src shell-script + # Generate pub and sec key. They have to have the same name. Only + # changing the file extension + + $ signify -G -c "raoul's signify key" -p raoul.pub -s raoul.sec + + # Sign a file/message + + $ echo "Hello world!" > message.txt + $ signify -S -s raoul.sec -m message.txt + + # Verify file/message + + $ signify -V -p raoul.pub -m message.txt + + # Further examples in the manpage. +#+end_src +*** tmux(1) +Tmux, the legendary terminal multiplexer, that is way better than +screen, was initially developed for OpenBSD. I don't think I have to +talk a lot about tmux because everyone knows it. tmux in OpenBSD comes +with all the security features too. +*** doas(1) +This is a repleacement for sudo that has been developed by OpenBSD. it +has also emerged in the linux community. Altough it works best in +OpenBSD. I have some issues getting doas to work in Debian, but not in +Void Linux. doas is very simple to configure. No need to add yourself +to a group or anything like that. You can simply add this to +=/etc/doas.conf= + +#+begin_src conf-space + permit nopass keepenv raoul as groq + # Allow user raoul to execute commands as groq. Keeping all the + # environment variables. + + # raoul can't execute commands as any user that is not groq. + + permit nopass keepenv qrog + + # qrog can execute commands as any user. +#+end_src +*** openrsync(1) +Sometimes you want to syncronize files between your computers and +servers. And then you realize =cp(1)= is kinda bad for that and =tar= +isslow. Then you discover =rsync= and that just works. But this wasn't +the case for the OpenBSD guys, they wanted a rsync implementation +under the BSD license. So they wrote =[[http://openrsync.org][openrsync=]]. This works just like +rsync and, according to the manpage: "openrsync is compatible with +rsync protocol version 27 as supported by the samba.org implementation +of rsync". Meaning that if you don't have openrsync in other server, +it will just worke, and vice versa. This is an example of usage of +openrsync. + +#+begin_src shell + openrsync --rsync-path=openrsync -av Xanopticon remote_server:/var/www/files/Music +#+end_src + +As I don't have =rsync= installed in the remote server, but I have +=openrsync=, I specify that the path of =rsync= is =openrsync=. This +way it just works. + +*** acme-client(1) +Today I recieved a mail telling me that the [[https://kill-9.xyz][kill -9]] certificate +expired. "Fuck's sake" --- I inmediatly thought. "I have to renew +it". But I was not going to install certbot in this OpenBSD server. So +I had to find a way. I remembered that OpenBSD ships with +=acme-client=. A program that helps you to generate your certificates +for TLS connections. And they can be signed with the Let's Encrypt +certificate authority. The config file is pretty simple and +intuitive. You can copy and paste it from +=/etc/examples/acme-client.conf= and only configure the revelant part +that would be your domain. In my case I have it like this: + +#+begin_src conf-space + authority letsencrypt { + api url "https://acme-v02.api.letsencrypt.org/directory" + account key "/etc/acme/letsencrypt-privkey.pem" + } + + domain suragu.net { + alternative names { "www.suragu.net", "files.suragu.net" } + domain key "/etc/ssl/suragu.key" ecdsa + domain full chain certificate "/etc/ssl/suragu.crt" + sign with letsencrypt + } +#+end_src + +I used to use wildcard certificates. That were valid to any suragu.net +subdomain. But I couldn't make them work in =acme-client=. But as +=acme-client= is less of a pain in the ass than certbot. I can +certainly just modify the configuration file each time I create a new +subdomain. And that doesn't happen too often. +** Documentation +OpenBSD takes documentation very seriously. So seriously, if a manpage +is lacking in a sys util, it's considered a bug. So everything that +comes with your OpenBSD installation is very well documented. Config +files have their own manpages section, the section 5. so you can learn +how to write httpd config files by running =man httpd.conf= This is +something more developers should do. There's also the =/etc/examples= +directory which contains examples of most config files that you'd want +to setup. Those file are commented and everything. But =/etc/examples= +always lacks the config file I want or doesn't help at all. +** Backups +I am a self-proclaimed good sysadmin. This means I should be able to +do backups and restore them. Not gonna lie, before OpenBSD i haven't +had any backup. Though I have heard that you can do incremental +backups with =tar(1)=. I guess this could be useful. But OpenBSD comes +with it's features and things. These tools are =dump(8)= and +=restore(8)=. Those were a bit confusing to me until I learned how to +use them properly. You can read the manpages for [[https://man.openbsd.org/dump.8][=dump(8)=]] and +[[https://man.openbsd/restore.8][=restore(8)=]] which explains pretty well how to use the software. At +least that's what should have happened. Because it didn't. For some +reason OpenBSD insists in using tapes in 2022. So yeah, apparently the +-a flag is mandatory these days. You can use this command to backup a +directory, =/etc= in this case. +#+begin_src shell-script + # 0 means it is a level 0 backup. Next backup should be level 1, then + # 2... Read the manpage for more details. + $ doas dump -0uaf backup_etc.dump /etc +#+end_src +This will take some time depending how big the directory is. =/etc= is +usually not too big so this example will not take a lot of time. + +After 1 hour of wondering why my backup wasn't working, i discovered +that =restore(8)= takes everything as relative paths. Meaning that it +will restore to the directory you're in, so if you do =restore +-xfbackup_etc.dump /etc/httpd.conf=, it will restore it to +=$PWD/etc/httpd.conf=, not to =/etc/httpd.conf=. So you should cd to / +when restoring backups, something like this: + +#+begin_src sh + cd / + restore -xf /var/backups/backup_etc.dump /etc/ +#+end_src +** Network +First I tried to use the wifi card my computer came with. But for some +reason it kept sayin =wpi0: device timeout=. Leaving my computer +without connection. So I had to connect the Ethernet cable. And I +thought that that would solve the connection problem. But today I woke +up and my computer did not have internet connection. But it had LAN +connection. Not sure what happened. And well, that's the reason of why +my site was down. I'll try to fix it. +*** Firewall +OpenBSD comes with a firewall, called pf, which stands for Packet +Filter. As every other software developed by OpenBSD, it uses its +simple config file. + +I used the firewall to deny ssh requests from every IP address except +my local network (that is, 192.168.0.0/16) and from my static IPv6 +address. + +At first the rules were not working for the IPv6 address, because I +don't have IPv6 at home, I use a WireGuard interface for that for +that, and pf didn't know that. So I had to specify that those rules +should also apply to the wireguard interface, like this: + +=pass in on {egress wg0} ...= + +And that just worked. + +Yiou can also limit the connection of an user. For example, the +following line will disable all the connection for the user 'groq': + +#+begin_src conf-space + # Block outcoming connections to user raoul. + block return out proto {tcp udp} user raoul + # Block incoming connection to user raoul. Not sure how useful this is. + block return in proto {tcp udp} user raoul +#+end_Src + +And I've also added some IP addresses that have tried to exploit, +ehem, WordPress vulnerabilities in my webserver. I added them to a +file, =/etc/spammers=. And used a =pf(8)= feature to block all of +them. And I also wanted that ssh would be disabled for everyone except +for the machines in the Local Area Network. So only people in my +network could ssh to my server. pf.conf has a very readable syntax, +which makes this very easy: + +#+begin_src conf-space + # Good/Dreaded IP ranges + table const { 192.168.0.0/16 } + table const file "/etc/spammers" + + # Block spammers requests to the server. Also requests to spammers. + + block in on { egress wg0 } from to any + + # Allow SSH access from the LAN + + block return in log proto tcp from any to port ssh pass in on egress + proto tcp from to port 22 +#+end_src + diff --git a/tech_posts/brotli_in_openbsd_http.org b/tech_posts/brotli_in_openbsd_http.org new file mode 100644 index 0000000..b24af49 --- /dev/null +++ b/tech_posts/brotli_in_openbsd_http.org @@ -0,0 +1,61 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+TITLE: suragu.net - Brotli in OpenBSD's httpd +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: index.xhtml + +* Brotli in OpenBSD's httpd + +The modern web is heavy. My website is not heavy, but I still wanted +to add compression because why not. Fortunately, compression +algorithms exists. Some web servers send compressed versions of the +file they serve, to serve bandwith, or to make the site load +faster. There are other methods to serve bandwith like minimized CSS, +HTML and JavaScript. But I think we can all agree that using a +compression algorithm is a better way to accomplish this. + +The main compression algorithm supported by browsers (and web servers) +is gzip. A compression algorithm that has been with us +since 1992. It's kinda old, but still serves its purpose pretty +well. Especially when you use all of its power with the =-9= +flag. Which compresses the file way better. At the cost of slower +speed of compression and decompression. But this isn't a big problem +since the client isn't receiving large files, like more than 100MBs, +the client is receiving HTMl, CSS and maybe JavaScript. Not binary +files (compression is kinda counterproducent with binary files). + +The OpenBSD httpd comes with the =gzip-static= option, you just add it +wherever inside a =server= block in your httpd.conf. Then you =cd= to +your webroot and run this command: =gzip -9k *.html= + +=-9= was explained before. And =-k= tells gzip not to delete the files +after they have been compressed. As =gzip= deletes the original +file. keeping only the =.gz= file. + +This should be enough for most scenarios. gzip compresses files really +well. But I wanted more. So I made some changes to the httpd source +code to add brotli support. + +At first. I wanted to add zstd support to httpd. And when I had +everything done. curl was receiving the zstd files instead of the +original files, I realized that browsers do not (yet) have zstd +support. So I decided to use brotli instead. It wasn't that difficult +to accomplish as I already wrote the hard part. I only had to replace +"zstd" with "br". + +This isn't done automatically. If you currently have =gzip-static= on your httpd +configuration. You must replace it with =br-static=. And then you have +to remove all the =.gz= files in your webroot (as they aren't needed +anymore). Then you can read the =brotli= manpage to learn how to use +brotli. But I wanted maximum compression. So this command was enough: +=brotli --max --keep *.xhtml=. + +[[../img/brotli_httpd.png]] + +You can download the patch [[https://ls.raoul11.net/files/KbQBFQat/brotli.patch][here]]. + + + diff --git a/tech_posts/bsd_make.org b/tech_posts/bsd_make.org new file mode 100644 index 0000000..d26be9a --- /dev/null +++ b/tech_posts/bsd_make.org @@ -0,0 +1,211 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+options: ^:{} +#+TITLE: SURAGU - Using BSD make +#+HTML_HEAD_EXTRA: + +* Using BSD make for your (small) project +For questions or comments on this article feel free to reach me out at +teru-sama [at] riseup [dot] net. + +Alright, so you wrote your software! Bad news kid, now you have to +compile it! Worse than that, you have to make that the compilation is +not a pain in the ass so more people can actually use your software! + +Thankfully, developers thought about on the unbearable pain of +compiling software, and thus =make= was born. =make=, A =makefile= is +a set of instructions that tells the software =make= how to compile +the software. Being honest, if you're in this website you already know +what =make= is. + +BSD Make (also called =bmake=) comes with interesting features that +make writing makefiles easier. As it comes with some kind of templates +that will surely help you at the time of writing the makefile, bsd +makefiles tend to be readable and easily editable. Consider this +source tree. I am adding libcurl to this example to add some +"complexity" to the makefile. + +main.c: +#+begin_src c -n -r + #include + + /* Not gonna create an header file for a simple makefile + ,* example.... */ + + void + get_url(const char *s); + + int + main(void) + { + puts("getting suragu.net..."); + get_url("suragu.net"); + } +#+end_src + +geturl.c: + +#+begin_src c +n + #include + + void + get_url(const char *s) + { + CURL *curl = curl_easy_init(); + curl_easy_setopt(curl,CURLOPT_URL,s); + curl_easy_setopt(curl,CURLOPT_WRITEDATA,stdout); + + curl_easy_perform(curl); + + curl_easy_cleanup(curl); + + } +#+end_src + +This, the traditional Makefile would look a bit like this: + +Makefile: +#+begin_src makefile -n -r + CC ?= cc + LDFLAGS = `pkg-config --cflags --libs libcurl` + OBJS = main.o geturl.o + TARGET = geturl + + # Link the thing + all: $(OBJS) + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -o $(TARGET) + + # Compile all source code to object files + %.o : %.c + $(CC) -c $(CFLAGS) $< -o $@ + + .PHONY clean + clean: + rm *.o $(TARGET) +#+end_src + +Typing =make= will result on a working makefile, the makefile will +compile the software as expected and not much else would happen. The +software also works as expected, however, in my opinion =make= syntax +makes 0 sense and it could be improved. Fortunately, this can be +solved using the BSD make templates. Consider the following Makefile: + +Makefile: +#+begin_src makefile -n -r + PROG = geturl + SRCS = main.c geturl.c + LDADD != ${PREFIX}/bin/pkg-config --cflags --libs libcurl + MAN = + + .include +#+end_src + +If you're in Linux, you might have to install =bmake=, which is a port +of NetBSD make, it is more likely in your distro's repositories. To +run that Makefile, just type =bmake=, and magic will happen. But let's +explain it + +PROG is like the target, is what the template uses to get the +resulting binary. If SRCS is empty, bmake will just compile +=progname.c=. +=SRCS= are the sources files you want to compile. And =LDADD= are the +flags you want to pass to the linker, notice that in this case I used +!= instead of \=, this is because when you want to assign the output of +a comman in BSD make, you have to do !=, you can't do =SRCS = +`pkg-config ...`= because it won't work. + +the =.include = line makes all the magic possible. It is +the template, and then you pass all the variables you defined before +to that template, so the =.include= directive must be at the very +bottom of the Makefile. + +Also, this simple makefiles comes with all the rules someone would +like. "bmake clean" works, so does "bmake install". + +Notice how there isn't "CFLAGS" in this makefile, this is because, if +you want to add any CFLAG, you can do it this way, and BSD make will +understand: + +#+begin_src shell -n -r + sukamu@wakaran ~/docs/xdd $ bmake CFLAGS="-O2 -pipe -Wall -pedantic" + cc -pipe -O2 -pipe -Wall -pedantic -c main.c + cc -pipe -O2 -pipe -Wall -pedantic -c geturl.c + cc -pipe -o geturl main.o geturl.o -lcurl +#+end_src + +You can specify default CFLAGS in the Makefile, but when adding CFLAGS +in the command line, those will be overwritten. + +** Compilation options using BSD make + +configure scripts have their weird defined optins, such as +=--enable-xxx= or =--disable-xxx=, which enables or disables features +in the software you're compiling. This can be also be done with BSD +make and =CFLAGS= To do this you only have to use the simple Make +conditionals. Consider the following C source code: + +#+begin_src c -n -r + #include + + int main(void) { + + #ifdef USE_OPTION + puts("This is a string that will only be printed if use-option is enabled at compile time."); + #endif + puts("Hello world!"); + + + + return 0; + } +#+end_src + +#+begin_src makefile -n -r + PROG = option + SRCS = main.c + LDADD != ${PREFIX}/bin/pkg-config --cflags --libs libcurl + MAN = + + # Compilation options + use-option = "no" + .if "${use-option}" == "yes" + CFLAGS +="-DUSE_OPTION" + .endif + + .include + +#+end_src + +If you compile normally, nothing weird would happen: + +#+begin_src shell-script -n -r + diego@sukamu ~/xdxd $ make + cc -pipe -g -MD -c main.c + cc -pipe -o option main.o -lcurl + diego@sukamu ~/xdxd $ make + Hello world! +#+end_src + +Now, let's recompile with =use-option=yes=. + +#+begin_src shell-script -n -r + diego@sukamu ~/xdxd $ bmake use-option=yes + cc -pipe -g "-DUSE_OPTION" -MD -c main.c + cc -pipe -o option main.o -lcurl + diego@sukamu ~/xdxd $ ./option + This is a string that will only be printed if use-option is enabled at compile time. + Hello world! +#+end_src + +So, if you add ="use-option=yes"= to the make flags, the Makefile will +add the required CFLAGS to enable the compile time option. + +** Conclusion + +BSD make is great for both small and big projects. And maybe more sane +than other alternatives, as doesn't require you to write a lot of +stuff just to build your project. BSD Make is a build system made for +lazy people. And lazy people always come with the simplest solutions. diff --git a/tech_posts/coreboot_x220.org b/tech_posts/coreboot_x220.org new file mode 100644 index 0000000..88fd82d --- /dev/null +++ b/tech_posts/coreboot_x220.org @@ -0,0 +1,12 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+TITLE: suragu.net - Coreboot in a x220 +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: coreboot_x220.html + +* The memories of a corebooter + + diff --git a/tech_posts/fear_and_loathing_in_artix.org b/tech_posts/fear_and_loathing_in_artix.org new file mode 100644 index 0000000..3166ec9 --- /dev/null +++ b/tech_posts/fear_and_loathing_in_artix.org @@ -0,0 +1,177 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+options: ^:{} +#+TITLE: suragu.net - Fear and loathing in Linux +#+HTML_HEAD_EXTRA: + +* Fear and loathing in Linux (Or BSD user tries Linux) + +If you enjoy this article, please consider donating: +https://liberapay.com/raoul11. For questions or comments on this +article feel free to reach me out at teru-sama [at] riseup [dot] net. + +One day I said "I want to die with FreeBSD installed", and I still do, +FreeBSD is a marvellous operating system that should be the final word +in operating systems. Sadly the other day when I bought a new computer +they pranked me very well because the network card this computer came +with is not supported in the current stable version of +FreeBSD. "Father, into your hands I commend my spirit, father, into +your hands, why have you forsaken me?" I said, but after some searches +I find that this network card WILL be supported and you can test the +driver in the -CURRENT branch of FreeBSD, I didn't thought -CURRENT +would be much of a pain, knowing I come from "bleeding edge" Linux +distributions. So I installed FreeBSD 14.0, the thing worked but when +I tried to install the required modules for xorg to work it didn't +work. And that's all they had to say. I want a stable system. Not +that. + +Some time ago, when I published my [[./freebsd_as_desktop.html][FreeBSD as desktop]] blog post, I got +a comment in Hacker News (or lobsters, can't remember) that told me +that I was making clickbait because the experience was good. And the +title promised "Fear and loathing". Well, this one does have fear and +loathing. + +So my first try was the old reliable. Void Linux, a distro that has +never failed me. Until yesterday, because when you come from BSD, you +know what's wrong with Linux. + +Despite Xfce focuses on Linux operating systems and the BSD support +could be a lot better, because it sometimes can't tell the difference +between oss and pulse audio, or the microphone doesn't work, or other +kinds, doing trivial things was a lot easier on FreeBSD than in Void +Linux, but that's okay. I can with it, i've had worse things in my +life. So I could configure it. Then I wanted to install some packages +for void installation in which I could use my beloved [[https://git.raoul11.net/sakisafe.git][sakisafecli]]. But +when I installed it I found out what was wrong with Linux. + +So i tried to run =bmake= in linux (BSD make is much better than GNU +make and should cover some trivial makefiles). And it started to give +errors, like curl.h is not found. And this is when a BSD user will +cause the Fall of Rome. In BSD operating systems, there are not +=-devel= (or -dev) packages. So when you install libfoo you install +the shared objects (.so files), the header files (the thing in +/usr/local/include) and sometimes the .a files for static linking +(which is something Linux distributions should also do). I don't think +it's very arguable that it is possitive to include the header files in +the same package. Because they're just text files that won't take a +lot of space. Maybe this is normal for some kind of devices, but if +you install arch linux or void in a amd64 machine i don't think you +care a lot about space. + +That was the moment in which I remembered that one day a friend of my +told me that arch linux doesn't have -devel packages. And that was +enough for me to install Artix Linux, I don't even know what init +system I'm using. + +Let the _fear and loathing_ begin. + +** Operation: filesystem +The state of ZFS in Linux is quite commedic because OpenZFS is under +the CCLD and Linux is on the GPL and CCDL is incompatible with the +GPL. So because of the GPL we can't have ZFS endorsed by the kernel on +Linux systems. Just because the GPL, I don't think it's pretty good +that a so-called "free" software license tells you that you *must* +share your changes. And I think it's pretty idiotic that, because a +License, they can't add a sequence of ASCII characters to a kernel. + +It was pretty funny because one day I found this message regarding +btrfs on FreeBSD on the forums: + +[[../img/freebsd_user_on_btrfs.png]] + +When I was installing Artix and it was part to create the partitions, +I audibly chuckled, and I selected btrfs as my file system. And began +using btrfs because I'm always open to try new things. + +As mentioned before, the state of ZFS on Linux is commedic, because of +differences between Artix and Arch, I couldn't install the 3rdparty +zfs module from the AUR, so I had to compile OpenZFS code myself. This +wasn't much of a problem. + +Meanwhile, I also looked for "artix zfs" in my search engine and I +found this blog post that was funny to me because it's like the +counter part of the other post: + +[[../img/btrfs_better_than_zfs.png]] + +So well, installing ZFS from source wasn't much of a problem. After +building and installing it =modprobe zfs= just worked and I could +mount my pools just fine. And thus, restoring my data. so no big +problem there. + +I wanted to try btrfs features because I am curious, and apparently +btrfs is "zfs for linux", so i wanted to try its features + +Our man break19 was right, because if I want to add compression +to my storage devices I have to do some weird stuff in the fstab, and +that's too much, i prefer the old good "zfs set compression=gzip +zroot" rather than editing that file. I also can't play with btrfs +subvolumes or snapshots because the btrfs command line utility is +horrible and I haven't figured anything out. + +** Package management and the power it holds + +Different commands. Same shit, the only package managers that has +innovated in something are GNU Guix and Nix, but I don't think there +is much difference between =pkg= and =pacman=. + +What is true is that =pacman= has a syntax that sucks, for example. in +FreeBSD you'd do =pkg install emacs=, while with Artix you do =pacman +-S emacs=, like I know what -S means, and apparently "pacman -Ss" is +better than "pacman search", so i prefer FreeBSD package manager. + +But what was funny to me is that when I installed =clang=, pacman +notified me that also =gcc= will be installed. I thought this was very +curious so I asked in the artix IRC channel, the answer frightened me: + +#+begin_src text + | Hello, nice operating system and all, but I have a question + why does clang depends on gcc + | it's because clang uses the standard library provided by gcc + most linux distros are like this +#+end_src + +As a computer user I tell you, that no big problem. But as a BSD user +I ask "why"? + +I didn't know it, but pacman is very fast. It downloads things in +parallel and uses zstd, a fast compressing/decompressing software for +compression, so I have no issues with pacman's speed. It is pretty +fine. + +When I did some research on why I couldn't install wine in Artix linux +I found out that my packages are being maintained by people with anime +profile pictures. And I also discovered that, for some reason, they +wanted to split all the repositories in separate repositories. Not +sure why, they have like 5 repositories for everything. I can +understand separating repositories with free/non-free software. But +here they don't even do that. They're just making thing more complex +for people who just want to install packages. In BSD this didn't +happen as the main repo had all the 30k packages someone would ever +need. And this operating system lacks packages. I had to build +=cmusfm= myself. + +** Desktop +I hate to say it but Artix was less of a pain to setup as a desktop +than FreeBSD, this is because the installation was made with Calamares +installer. So I didn't had to install Xorg and configure manually, the +installer did all that for me. This wasn't the case in FreeBSD in +which I had to configure Xorg manually. And this is appreciated. The +Xfce setup just worked. And I bothered on ricing it like Windows XP +because I live in the past. Some people ask me why I riced it why XP, +the reason is because I can and I wanted. + +I have 0 reasons to complain about Linux in this case. So I just +won't. +** Conclusion +If you haven't tried a BSD operating system. Don't, you'll get hooked to +it and if you ever have to come back to Linux, you'll find yourself +prefering to get a castration than installing Linux, because when you +learn how BSD works, and its awesome features, the development +philosophy (focusing in making a great operating system instead of +focusing in a weird definition of freedom), you start to know why +linux sucks. + diff --git a/tech_posts/freebsd_as_desktop.org b/tech_posts/freebsd_as_desktop.org new file mode 100644 index 0000000..5c32441 --- /dev/null +++ b/tech_posts/freebsd_as_desktop.org @@ -0,0 +1,298 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+options: ^:{} +#+TITLE: suragu.net - Fear and loathing in FreeBSD +#+HTML_HEAD_EXTRA: + +* Fear and loathing in FreeBSD, or raoul's experiences with FreeBSD +** Introduction +Not so long ago I wrote [[../openbsd.xhtml][my experiences with OpenBSD]]. This post was +about my experiences with OpenBSD but as a server, not as +desktop. Using an operating system as a desktop is completly +different than using it as a server. + +One day I thought "damn, Linux sucks! But I have to use this because +the developer of the browser that I use is an asshole!". And had to +stick to Linux for a while. But then another day I thought "Hmm, +FreeBSD claims to run Linux binaries better than Linux, let's give it +a try". Good operating systems have to sell themselves some +way. And that claim worked for me. So I went to FreeBSD.org, clicked +the big yellow button that says "Download FreeBSD" and downloaded the +memstick image for amd64 because that's what my computer runs. + +I will be updating this site as I have more experiences with +FreeBSD. So add to bookmarks! + +Last update: 2022-06-21 + + +** Installation +The installation was pretty straight forward. I don't think people can +get lost in this. I just selected ZFS as my file system (more on that +later). And I don't remember much other things in the +installation. And as I forgot them. I don't think they are worth +mentioning. + +** Networking +I want to connect to the internet because, among other reasons, I have +a website, electronic mail and I like to talk to internet people +sometimes. +*** Wireless connection +Sadly I no longer have the router in my room so I can't use an +ethernet cable. So I have to use the dreaded wireless card. I was very +surprised when I found out that FreeBSD supports this Atheros card. +so I don't have to open the computer and put an Intel one. For the +network card to work, I only had to modify the kernel booting +process. Sounds very hard but it is just editing +=/boot/loader.conf/)=. I added the following lines to use the =ath= +driver: + +#+begin_src shell-script + if_ath_load="YES" + if_ath_pci_load="YES" +#+end_src + +Then, in =/etc/rc.conf= (we will talk about it later) + +#+begin_src shell-script + wlans_ath0="wlan0" + ifconfig_wlan0="up" + ifconfig_wlan0="WPA DHCP" +#+end_src + +That will automatically start =wpa_supplicant= and use DHCP to get an +IP address +*** DNS server +Normally for resolving domains you'd use a server like 8.8.8.8, +1.1.1.1 or 192.168.1.1. But I thought using local_unbound would be a +good idea for this, as if i'm my own DNS resolver, I can choose what +to resolve and what not to. I followed [[https://vermaden.wordpress.com/2020/11/18/unbound-dns-blacklist/][this guide]] to configure +local_unbound, with some block lists. And I also modified +/etc/dhclient.conf to use =127.0.0.1= as default DNS server. I did not +setup a fallback DNS server because if my computer is up, unbound is +up as well. So I don't really need a fallback DNS server. + +#+begin_src conf + interface "wlan0" { + append domain-name-servers 127.0.0.1; + } +#+end_src +** Making the fresh installed system a desktop. + +I'm no longer a Linux user. Now I am a BSD user. As such I must be +aware about this "X11" thing. So I had to install the =xorg= +package. FreeBSD comes with a binary package manager called =pkg=. We +will talk more about this in the packages section. I just had to run +=# pkg install xorg=. Add the user =raoul= to the =video= group and +configure my =.xinitrc= so everytime i run =startx=, =bspwm= is +started. + +I had to add i915kms_load="YES" to =/boot/loader.conf). Which is the +driver for Intel integrated graphics cards. Or something like that. + +As mentioned before. I had to modify my .xinitrc (something that as a +former Linux user I have never done because I always used lxdm as +display manager. But as FreeBSD doesn't have lxdm available I had to +get alternatives). My .xinitrc looks like this: + +#+begin_src shell-script + dunst& + xrdb .Xdefaults& + compton& + xset r rate 300 50& + feh --bg-fill ~/.wall.png + sxhkd + exec bspwm +#+end_src + +With that =.xinitrc=, running =startx= just works. + +** Package management + +FreeBSD comes with 2 options to install packages: binary-based +packages and port-based packages which installs packages compiling +them from source code. + +*** Binary package management + +I installed an operating system because I wanted to use it. And it is +impossible to use an operating system if you cannot install software +in it. Fortunately, FreeBSD comes with a package manager called =pkg=, +a very original name for a package manager. It is simple to use, +and blazing fast. I would say it is faster, or at least as fast as +=xbps=, the fastest package manager I know. Using it is utter simple, +here are some examples: + +#+begin_src shell-script + # All these commands must be run as root. + + # Install the package "emacs" + pkg install emacs + # Deinstall the package "emacs" + pkg remove emacs + # Remove all the unneeded dependencies + pkg autoremove + # List all packages that contain "edit" in its name + pkg search edit + # List all packages that contain "editor" in its comment + pkg search -S comment editor +#+end_src + +Unfortunately, =pkg= comes with insane defaults. You have to type +'y' and then 'enter' to confirm you want to install a package. As +=pkg= defaults to "No". I guess this is a security feature for some +users. But as I'm too lazy to press the 'Y' key, and I'd rather just +to press enter, I edited =/usr/local/etc/pkg.conf= and added the +following content: + +#+begin_src conf + # I don't want to press 'Y' everytime. + DEFAULT_ALWAYS_YES=yes + AUTOCLEAN=yes + IP_VERSION=4 + # I don't want to wait to upgrade a package. I'll update my system + # only when I want :) + REPO_AUTOUPDATE=no +#+end_src + +*** Source package management +Sadly I can't talk a lot about this one because I have a overheated +machine and if I compiled something in this computer we would have the +biggest destruction known to civilized man since 476 A.D. + +But I can compile small software without a lot of problem. + +First you have to get the port collection if you didn't do it in the +installer with the following command: + +=# portsnap fetch extract= + +Which will, fetch the port collection and extract them in +=/usr/ports=. These ports are just a collection of Makefiles. Which +will download and build the source code from you. These makefiles are +kinda easy to work with, and also to write. As i'm the maintainer for +some FreeBSD packages :) + +You can also configure which CFLAGS you want *by default*. Just edit +the =/etc/make.conf= file. Mine looks like this: + +#+begin_src conf + CFLAGS+= -O2 -pipe -march=native -mtune=native + DEVELOPER=yes + MAKE_JOBS_UNSAFE=yes +#+end_src + +** Linux emulation +As I mentioned before, what was keeping me at the Linux hell was the +Web Browser known as Pale Moon. I followed [[https://docs.freebsd.org/en/books/handbook/linuxemu/][the guide]] to run Linux +software in FreeBSD. Downloaded Pale Moon, and after installing a few +dependencies, yup, it worked just like if I was using it in Linux. + +Then I =rm -rf palemoon= and moved to firefox. Don't really know why. +** Multimedia +This was kind of a pain, =oss= didn't want to work for undisclosed +reasons. Too lazy to install sndio. So I went the easy way and just +installed pulseaudio. Call me what you will. But I want to listen to +Madvillain, not say "I DON'T USE PULSEAUDIO" in the internet. I use +=cmus= as my music player. The binary distribution of cmus comes with +the PulseAudio plugin disabled so I had to install it from the ports +system. + +mpv and audio in FireFox just worked. +** ZFS +After years of using UFS, it was time for a change. ZFS was +introdouced experimentally in FreeBSD 7. And in the latest version, it +is the default filesystem. This filesystem is, described by itself as +"The last word in file system" That makes sense to me. They are not +going to say it's a bad filesystem if they want people to use it. And +if i'm using a filesystem that takes most of my RAM, it should be good +at least. And, yes, ZFS is good. +*** Pools and storage +"A storage pool is the most basic building block of ZFS. A pool +consists of one or more vdevs, the underlying devices that store the +data.". I don't understand any of that. But a pool must be created to +create your filesystems (datasets) and volumes. In the default +installation, the dataset is called "zroot". + +These "file systems" are similar to partitions. It is mounted wherever +you want and has its own metadata. +*** Creating and configuring datasets +My friend Endemic has a lot of media that must be stored, he has lost +media, music from bands no one has ever heard of and soviet movies and +obscure breakcore. This kind of media has to be archived and zfs does +a great work creating that. ZFS has also a compression feature, +supporting a lot of compression algorithms. + +So to create the zpool that I want to be mounted in /storage, I ran +the following commands (as root) + +#+begin_src shell-script + # Create the pool storage in the /dev/da0 device, which is an external + # hard drive + zpool create storage /dev/da0 + # Set zstd-9 compression in the pool. + zfs set compression=zstd-9 storage +#+end_src + +And that's it. Then when you copy big files to /storage they will be +compressed. And as our CPU is fast and zstd uses a fast algorithm, you +probably won't notice that you're actually compressing and +decompressing files all the time. Which is good. You can also use +zstd-19 as compression, which redouce the filesize of everything by a +lot. But this has a drawback, quoting from the [[https://docs.freebsd.org/en/books/handbook/zfs/index.html][FreeBSD ZFS reference]]: + +#+begin_quote +ZFS offers 19 levels of Zstd compression, each offering +incrementally more space savings in exchange for slower +compression. The default level is zstd-3 and offers greater +compression than LZ4 without being much slower. Levels above 10 +require large amounts of memory to compress each block and systems +with less than 16 GB of RAM should not use them. ZFS uses a selection +of the Zstd_fast_ levels also, which get correspondingly faster but +supports lower compression ratios. ZFS supports zstd-fast-1 through +zstd-fast-10, zstd-fast-20 through zstd-fast-100 in increments of 10, +and zstd-fast-500 and zstd-fast-1000 which provide minimal +compression, but offer high performance. +#+end_quote + +And as I use a ThinkPad in which I didn't even bother on adding more +RAM. I use zstd-9. Which compresses the files somehow good. You can +see the stats with =zfs get used,compressratio,compression,logicalused +dataset=. + +#+begin_src +zroot used 64.1G - +zroot compressratio 1.15x - +zroot compression zstd-9 local +zroot logicalused 66.1G - +#+end_src + +Used is the revelant to the filesystem size. And logicalused is the +size the filesystem would have without compression. So this means I +have saved 2GBs thanks to zstd-9. I do not feel any performance difference. +*** Snapshots +We all fuck it sometime. And that is okay. What is not okay is to lose +data. ZFS contains a tool to create snapshots of a dataset. Which are +basically backups that restore your filesystem to a certain +point. These are very useful to recover lost data. You can create a +backup of your =home= partition like this: + +#+begin_src shell-script + zfs snapshot zroot/usr/home@(date +%F) +#+end_src + +After creating the snapshot and completly trusting ZFS, i ran rm -rf +~/*. Which nuked my home directory and everything in it. Then I ran +=zfs rollback zroot/usr/home@2022-06-18= and it was restored. Like +nothing ever happened. According to the FreeBSD reference, snapshots +can take a lot of disk space so you should delete them as they're no +longer needed. +*** Other features + +ZFS has features like incremental backups, encryption, RAIDS, but I +haven't tried them. +** Jails +TODO diff --git a/tech_posts/index.org b/tech_posts/index.org new file mode 100644 index 0000000..55488ad --- /dev/null +++ b/tech_posts/index.org @@ -0,0 +1,28 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil ^:nil +#+TITLE: suragu.net - Tech posts +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: index.html + +* suragu.net tech posts + +I have a [[../blog/][blog]], but I to keep it to very weird things that come to my +mind that don't require text formatting, images, or anything that is +not plain text. + +The intention of this section of my website is to make a space for all +the weird things that are related with tech. Which mostly always +require formatting like syntax highlighting, images, or monospaced +text. So I decided to create this section for the tech related posts. + +These articles are sorted from oldest to newest. + +1. [[./org_mode_as_ssg.html][org-mode as static site generator]] +2. [[./freebsd_as_desktop.html][raoul's experiences with FreeBSD as desktop.]] +3. [[./brotli_in_openbsd_http.html][brotli in OpenBSD's httpd.]] +4. [[./fear_and_loathing_in_artix.html][Fear and Loathing in Artix (or BSD user tries Linux)]] +5. [[./bsd_make.html][Using BSD make as build system]] +6. [[./modern_perl.html][Perl in CURRENT_YEAR]] diff --git a/tech_posts/modern_perl.org b/tech_posts/modern_perl.org new file mode 100644 index 0000000..7a972ee --- /dev/null +++ b/tech_posts/modern_perl.org @@ -0,0 +1,214 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil ^:nil +#+TITLE: suragu.net - Perl in CURRENT_YEAR +#+HTML_HEAD_EXTRA: +#+EXPORT_FILE_NAME: modern_perl.html + +* Perl in CURRENT_YEAR + +Perl is a programming language that will always live deep into my +heart. It was the first programming language I can say I +mastered. But it's sad that not even God uses this programming +language anymore. It's a great programming language, it has evolved in +the latest years, so much that it even looks like a modern programming +language. Some of the stupid design of perl has been fixed. + +It is known by everyone that the perl Syntax sucks. It makes 0 sense, +at least for learners. Experimented perl programmers no longer fear +anything. + +For comments or questions on this post, email me at sukamu at riseup +dot net. +** Function prototypes +Perl always lacked function signatures (prototypes), the way you +passed arguments to a function in perl was horrible, it is like +functions in bash: + +#+begin_src perl -n + sub sum() { + my ($x, $y) = @_; + return $x + $y; + } + + print sum(3, 4); # Prints 7 +#+end_src + +You define the function parameters inside the function, just like in +bash. This is, in my opinion, horrible, but since perl 5.36, you can +have function signatures, to use perl's new features, you have to +specify the version of perl you want to use, to do this just use the +=use= keyword. + +#+begin_src perl -n + use v5.36; + + sub sum($x, $y) { + return $x + $y; + } + say sum(4, 5); # prints 9, and adds a newline. +#+end_src + +The function signature feature was added in Perl v5.20, but it started +to be considered stable at v5.36. There is also this new "say" +function that is just like =print= but adds a =newline= at the end of +the line, like python's =print= or C's =puts()=. These features were +inhereted from Raku. + +** Try/Catch + +Perl added an experimental Try/Catch blocks in v5.34. These are still +considered experimental as of v5.36. But you can still use them. The +=try/catch= (also =finally= if you're using v5.36) works like any +other programming language that has try/catch blocks. As this feature +is still experimental and should not be used seriously, you have to +specify that you want to use the experimental feature ='try'=: + +#+begin_src perl -n + use v5.36; + use strict; + use warnings; + + use experimental 'try'; + + sub attempt() { + say "I'm doing something!"; + die "Goodbye cruel world"; + return 42; + } + + try { + my $x = attempt(); + } catch($e) { + say "Exception: $e"; + } finally { + say "Finished"; + } +#+end_src + + +And the thing does exactly that, the script dies inside the =try= +block, so it's passed to the =catch= block as an exception. And +finally, the =finally= block is executed. + +** the =isa= operator + +The isa operator tests whether an object has a instance of a certain +class, in non-object programming slang, it just checks the type of a +variable. The =isa= operator was introdouced as an experimental +feature in perl v5.34.0 and was no longer considered experimental in +the current v5.36.0. + +#+begin_src perl -n + #!/usr/bin/perl + + use v5.36; + use LWP::UserAgent; + my $ua = LWP::UserAgent->new; + + + if ($ua isa LWP::UserAgent ) { + say "LWP::UserAgent object instanced successfully"; + } else { + die "something that should not have happened happened."; + } +#+end_src + +Before this operator, you had to use the =ref= function and string +checker to accomplish the same thing, like this; + +#+begin_src perl -n + use LWP::UserAgent; + my $ua = LWP::UserAgent->new; + + if(ref($ua) eq "LWP::UserAgent") { + # Do stuff... + } else { + # Do stuff when failed. + } +#+end_src + +Which clearly makes a difference at the moment of reading and writing +new code. + +** The defer block + +This is a feature that others programming languages have, C++ calls it +RAII, there are plans to add it to the next version of the C +programming language, also golang has the defer block. Thing is that +in perl it works like this: + +#+begin_src perl -n + #!/usr/bin/perl + + use v5.36; + + use experimental 'defer'; + my $x = 0; + { + $x = (2^31)-1; + defer { + say "The block has finished it's execution"; + $x = 0; + }; + say "Let's pretend i'm doing stuff..."; + say "x value: $x"; + } + say "x value: $x"; +#+end_src + +Simillary to =try/catch=, this function is experimental and should not +be used in production. Or use it if you want. But don't blame the perl +devs if something breaks (which, honestly, I doubt that your system +will break because of an experimental feature. Just don't abuse it or +use it in very weird ways and you'll be fine). + +** builtin values + +=builtin= is a new core module that shipts with perl v5.36. This +package are plains function and behave like user defined +cuntions. They do not provide any special thing you have never seen in +perl before. But they're still good to have, as they help to make the +code more easy to write and read. These functions are also +experimental so be careful at the moment of using them. + +#+begin_src perl -n + use v5.36; + use experimental 'builtin'; + use builtin qw(true false is_bool trim + reftype created_as_string + created_as_number); # There are more builtin functions... + my $bool_value = true; + + if ($bool_value) { + say "The value is true"; + } else { + say "The value is false"; + } + + say is_bool($bool_value); # Will print "true"; + + my $str = "\t\n\r Hello world\t\r\n"; + $str = trim($str); # This trim() function will remove all the whitespace + #characteres defined by unicode (https://perldoc.perl.org/perlrecharclass#Whitespace) + + print $str; # Will print "Hello world", without newlines, tabs, or + # carriage returns. +#+end_src + +These new functions are not the greatest or most useful thing ever, +but they are still helpful. + +** Conclusion + +Perl's not dead. At least that's what I kept telling myself because I +don't want to see this programming language dying in my lifespan. But +it's pretty cool that they still add new features to Perl 5. Despite +everything you could say, perl is still alive, but no one uses it, but +well, no one uses Haskell either. :^) +** Sources +- 1. https://perldoc.perl.org/5.36.0/builtin +- 2. https://perldoc.perl.org/5.36.0/perldelta +- 3. https://perldoc.perl.org/5.34.0/perldelta diff --git a/tech_posts/org_mode_as_ssg.org b/tech_posts/org_mode_as_ssg.org new file mode 100644 index 0000000..75524d4 --- /dev/null +++ b/tech_posts/org_mode_as_ssg.org @@ -0,0 +1,153 @@ +#+INCLUDE: "../inc/header.html" export html +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+options: ^:{} +#+TITLE: suragu.net - Org-mode as a Static Site Generator +#+HTML_HEAD_EXTRA: +* org-mode as a Static Site Generator +Created: 2022-06-14 +Last updated: 2022-06-14 +** Introduction +There are a lot of static site generators out there, you can think of +Jekyll, Hugo, sblg. Those are good (I guess) but, as I was too lazy to +check them out, I tried to perform the same task (In this case, +generating a website from a language in a weird markup language) that +looks very much the same as it was written in pure html. And emacs' +org-mode was able to do this perfectly. Not much flaws were found in +this process. + +And yes, this article was written in =org-mode=. + +If you enjoy this article, please consider donating: +[[https://liberapay.com/raoul11][https://liberapay.com/raoul11]]. For questions or comments on this +article feel free to reach me out at teru-sama [at] riseup [dot] net. + +** The basics + +Every emacs users (I hope) knows about org-mode, it is a very powerful +markup language, in my opinion, better than markdown as it uses more +common sense, like *bold* text are written with only one asterisk and +/italic/ text is written with slashes, which makes more sense inside +my head than markdown's one asterisk for italic and two asterisks for +bold. The headers are written with an asterisk followed by the text, +and you can insert code blocks with =#+begin_src =. (and close +them with #+end_src) And +guess what! Emacs will export the source code *highlighted* to html! +The output colors will be defined by your *current Emacs theme* + +When you are finished writing your .org file, you can export it to +html with =M-x org-html-export-to-html=. This will create a =.html= file +with the same name of the =.org= file. You can open it and it won't be +so much different than a =.md= file converted to =.html= using =pandoc=. But +we can fix that using the multiple =org-mode= options! +** org-mode options +There are a lot of =org-mode=. You can check all of them [[https://orgmode.org/manual/Publishing-options.html][here]] and +[[https://orgmode.org/manual/Export-Settings.html][here]]. Check them if you need an option that is not here. Pretty sure +there's an option for whatever you want. + +So, when you make a website, you most likely want to make it somewhat +artistic, so you want to add, say, a header, and a stylesheet +file. This is possible with =org-mode= options. The following text lines +will insert a header file and a stylesheet file into the resulting +.html file: + +#+begin_src org +#+INCLUDE: "inc/header.html" export html +#+HTML_HEAD_EXTRA: +#+end_src + +This will include, before everything in the =.org= file, the content of +the file located at =inc/header.html=. And will append that HTML +tag to the section of the resulting =.html= file. So it will give +the stylesheet to the resulting html site. +n +But by default =org-mode= gives us the number of headings, preambles and +postambles, a table of contents, some html style we never asked for, +and a lot of things we never asked for. But obviously, theres an +option to take care of all of that! + +#+begin_src org +#+options: toc:nil +#+OPTIONS: html-postamble:nil +#+OPTIONS: html-style:nil +#+OPTIONS: num:nil p:nil pri:nil stat:nil tags:nil tasks:nil tex:nil timestamp:nil toc:nil title:nil +#+end_src + +That snippet inside the codeblock will disable all the things we don't +want in a personal website (but maybe we want in an academic +article?). I don't know. The thing is that you can disable or enable +them as needed. As you should know, =nil= in emacs-lisp means =false= and +=t= means =true=. So if you want to enable some option of those you give +it =t= instead of =nil=. + +So you have to add that to all the .org files you have. You can +probably setup those options as default by setting the family of +=org-export= variables to =nil= as needed. But I keep it that way because +I am too lazy to set all of those variables. + +Then, you have to do =M-x org-html-export-to-html= in each .org file and +upload them to your webroot. And everything should work when you visit +your website. If not, check if the path of the css and header is +correct (In this post i'm assuming your .html files are in =inc/= and +your css is in =css/styles.css=, which are both relative paths). +** Inserting custom HTML in Org +Something great about Markdown is that you can insert HTML by simply +adding it as normal text. You cannot do this in org-mode. You can't +just put thing and expect org-mode to compile that as html. You +have to use an =export= block. Those work just as the codeblocks we've +seen before. But instead of src, it's export, so it will +be #+begin_export html. Following there's an example +#+begin_export html +This is custom HTML (it has the style attribute) inserted into org-mode :D +#+end_export +** Exporting a whole directory with .org files to html + +For most of the time running this website using =org-mode= as static +site generator, i used to run =M-x org-html-export-to-html= as +needed. But I thought this was unnecessary and repetitive and there +wasn't really a need to do that. I wanted something like =make=. Where +you run and you get everything compiled. And if a file didn't change, +don't compile it again (as it isn't needed). So I asked about this in +the #emacs irc channel: + +#+begin_src text + Hello, is it possible to use org-html-export-to-html in a + emacs lisp program to export a file? Documentation says it only + "exports the current buffer", But i want to export all the .org files + in a directory as html + (I'm using org-mode as a ssg) + > export all the .org files in a directory as html + sukamu: it sounds like you want org-publish + (info "(org) Publishing") +#+end_src + +So I checked out that "=org-publish=" thing this IRC user was talking +about. And indeed it was exactly what I needed. I had to read the +documentation. And I came to this following emacs-lisp files which can +compile my website just well: + +#+begin_src emacs-lisp + ;; Change this + (setq org-publish-project-alist + '(("suragu.net" + :base-directory "~/repos/suragu_org/" + :publishing-directory "~/repos/suragu_org/out_html" + :section-numbers nil + :publishing-function org-html-publish-to-html + :table-of-contents nil + :recursive t + ))) + + (defun make-suragu () + (interactive) + (org-publish "suragu.net") +#+end_src + +And that's it! Everytime I want to recompile this website I just have +to run =M-x make-suragu= and org-publish will do the rest for me! +** Conclusion +=org-mode= is a great markup language that can repleace markdown in most +tags and also works well as a static site generator. What else do you +want me to say