mixt

I close the door behind me. I am once again between four walls. Alone. The loneliness drowns everything. I'm swimming in a giant jar of molasses.

But let's go back a while. To what seems like ancient history: some other four walls. Those of my student apartment in Cyprus on the first floor of an apartment building at the end of a dead end alley. I am standing by the window. It's the end of the summer, and the sun is brutal. I'm watching the white rental car with the red license plates drive away. I'm free. I'm alone. I'm a person. It's one of the most exhilarating feelings I've ever experienced.

A flashbulb memory like no other.

Here in the present, I'm chopping something up on the kitchen counter. It has become second nature by now, so I'm not thinking about the onion, or whatever it is, but my mind is racing through the past. Happy memories now almost bring tears to my eyes. Or maybe it's just the onion. I keep on chopping.

The rental car disappears at the end of the alley. A wave of anxiety crashes down on the sand of happiness and identity I was feeling: “Now what?”. The sunlight coming from the window now burns. I walk around and inspect the lifeless rooms. The apartment is furnished but it has the character of a hotel room. This is not somebody's home.

The chopped vegetables go into the frying pan and i turn on the heat. A few drops of olive juice and I'm anticipating the sizzle and the smell of hot oil and fried onions. Cooking has become my escape. Something that takes enough attention but not too much. And has a happy ending, unlike everything else in my life right now.

I am holding the apartment keys in my hand. This is now my home but it really isn't. I'm a guest here. That feeling of identity is being chomped on. I close the door behind me and take the stairs. I get out into the sun. It still burns. The streets seem empty, deserted. I start walking aimlessly, thinking.

As I mindlessly stir the pan, my mind slows down on vacation settings with my ex. We haven't been long apart. I miss her. We can't be together anymore though. These happy vacations are a thing of the past and we've tried again and again to bring them back. We're different people now.

As I walk by uninteresting buildings and lifeless neighborhoods I start thinking I want to talk with someone. But I don't know anybody. I can't define it yet. I've never before looked inside me and it's going to be almost two more decades before I manage to take that first glance at my feelings.

The smell fills the room. I have deliberately left the kitchen hood turned off. This is part of the experience. This is the experience. I realize that even a few months ago I was mostly annoyed when the phone rang. I valued my alone time and didn't want anybody to interrupt it. She was the exception. It was always soothing to hear from her. Now I'm longing for a message, any kind of communication. As I'm thinking that, my phone makes the familiar notification sound. I literally jump to the table where I left it, only to find an automated message from my bank.

The first half of my freshman year continues like that. A few awkward attempts at socializing that don't really catch on, the start of a friendship that will eventually last long but still sputters and spits due to both of us not really being our own persons yet, and long, lonely walks in deserted streets. Only cars passing by, some, complete with jerks hanging out of the windows teasing anyone walking.

The piercing smell of raw onion is slowly being replaced by the tinge of caramel as it becomes translucent. My mind leaves the happy vacations and stops at another dark period of my past. This looks awfully like the present:

I'm in a third apartment, the smallest of them all. 19 square meters. I'm sitting on a cold, inflatable double bed that touches three walls of the room. There is just enough space to get off the bed and open the closet. I have a computer on my lap and I aimlessly wander some online space. There's a girl that responds to every piece of depressing text that I publish. I stay up a little longer, even if I'm insanely tired, just waiting for some kind of interaction. Anything.

I open the drawer on the left. It still has food we purchased together. I think once again how it will be when I finally have this home for myself. When all her things are gone. I take a packet of rice out and try to pour some in a cup. I spill it, like every time. Swear words. It comes to mind that those past periods are both as dark and devoid of any creativity as this locked down present. I cannot draw, I cannot write, I can't even find the required energy to sit in front of the computer and code. Ideas fly around in my mind but even the few times I forced my hands onto the keyboard I only typed “Hello, world!” and left it at that. My mind returns to the locked down present.

I know now that this feeling is loneliness. I know what I need to do but I really don't know how to do it. Why now? It's as if I wasn't a loner all along. Why has the annoying sound of a message now transformed into a ray of hope and disappointment? The rice has become translucent. Time for the wine.

This is my favorite part. The smell of caramel is flooded with sharp alcohol and the sensation is amplified by the sizzling and steaming as the liquid fights with the heat. As my senses saturate by the sounds and smells, my mind brings these three periods into view and as they start to overlap, I can now discern a glaring similarity. A hole the size of an ocean gaping all along; but it's always harder to spot something missing than something that's there.

The heat ultimately wins and the sharp sounds and smells rapidly subside. A fruity scent remains, combined with hints of butter and celery and I revel in the sight of the sauce as it flows, slowly filling the void created by the wooden spoon as I stir.

I look down on my plate, sprinkled with parmesan cheese and carefully decorated with a fresh stalk of mint, anticipating the result. I never taste the food while I'm cooking. It's like reading spoilers before the movie. I put a spoonful in my mouth and taste the sauce, reduced to the bare essentials, those that give me the soothing satisfaction I so much need. Like that sauce, the past in now stripped in my mind of all the extraneous details and what's missing is now as clear as the wine in my glass. It's her.

(this was written last year around this time, I just posted it now)

I'am completely empty. I wander aimlessly in my red and black apartment, the one I so meticulously decorated. I see old interests everywhere. Things that I bought that past Michalis would spend hours and hours tweaking, playing with, finding their magic.

Now they are all reminders of failure. Reminders of a past life. Of interests lost. Nostalgia and depression drown everything. Outside, the world is quiet. We are locked down. I am listening to the same music tracks on repeat, hoping to find that excitement I felt when I heard them for the first time.

I am lost. I have nobody except her, and she is there as much as she isn't. When we grow apart I feel that all I want is her. But when we get close I feel the emptiness again. I revisit old photos and I wonder who is that person and what's left of him.

I desperately need to feel something. I am smoking again. Another failure. I feel trapped, I feel alone, I feel that everybody is standing on me, piled up, expecting the world when I'm just a broken man trying to push through another day.

I don't want to care for anybody anymore. My things have become a burden, and yet I still purchase more and more in the hope that it will make me happy for a while. I feel my family has abandoned me, I have no longer a home.

Success means nothing anymore. Obsession with working out causes injuries. I am a total, absolute fucking mess.

I want to be a robot or just wither and die.

I fucked up. I'm sorry. Yet I seem unable to start over. I'm caught up in an awful groundhog day and the only thing I can do is tweak my behavior as if that will ever change anything.

Therapy only seems to help temporarily. I understand my issues better than ever. So what? I still can't do shit about them. The only thing I can do is dope myself with one little instant gratification or another. Sex, movies, workout, booze, nicotine, food, sleep, all temporary escapes. Giving me less and less satisfaction.

Game over, I desperately need the screen to flash GAME OVER and walk away from the arcade. Maybe next time I'll do better.

One must imagine Sisyphus just like me.

Πριν πολλά χρόνια αποφάσισα να σπουδάσω μηχανικός. Μου άρεσε πάντα να σκαλίζω το πως δουλεύουν τα πράγματα και να φτιάχνω δικά μου. Αυτό που δεν μου είπε κανείς είναι το πόσο ψυχρή είναι η εκπαίδευση του μηχανικού, και πόσο, όχι μόνο αγνοείται κάθε έννοια τέχνης και συναισθήματος αλλά είναι βαθιά χαραγμένο στην κουλτούρα των μηχανικών να περιφρονούν ό,τι έχει να κάνει με την τέχνη, την αισθητική και τα συναισθήματα.

Με πείραζε πάντα που κοροιδεύαμε τους αρχιτέκτονες που ήθελαν να κάνουν κάτι “ωραίο”. Από την άλλη, έβλεπα και τον παραγκωνισμό της λειτουργικότητας για χάριν του ωραίου με το ίδιο περίπου μάτι. Η αισθητική για μένα περιλαμβάνει τη λειτουργικότητα. Αισθητική έχει τόσο ένα γλυπτό ή ένας πίνακας όσο και ένα καλογραμμένο κομμάτι κώδικας. Και όσο και αν έχουν προσπαθήσει να φτιάξουν κανόνες για το τι είναι καλαίσθητος κώδικας είναι αδύνατον να τον δημιουργήσεις απλά ακολουθώντας συνταγές· το να γράφεις καλαίσθητο κώδικα είναι τέχνη.

Ο στενός κλάδος της πολιτικής μηχανικής τελικά δεν με κράτησε. Λίγο η κρίση, λίγο η στεγνή διαδικαστικότητα, λίγο η γραφειοκρατεία με έκαναν να στραφώ προς την άλλη μου αγάπη, την τεχνολογία. Από πολύ μικρός η αγαπημένη μου ασχολία με τους υπολογιστές ήταν να φτιάχνω εικόνες, κείμενα, να επεξεργάζομαι φωτογραφίες. Στο σχολείο, όταν ακόμα το να συνδεθείς στο διαδίκτυο αποτελούσε μια ιεροτελεστία με υπόκρουση τους μαγικούς ήχους του modem και κόστος την κατάληψη της τηλεφωνικής γραμμής (τι οξύμωρο, για να συνδεθείς με τον κόσμο, αποσυνέδεες όλους τους υπόλοιπους), είχαμε αναλάβει με ένα φίλο να σχεδιάσουμε την ιστοσελίδα του σχολείου μας. Πήραμε την πρώτη θέση σε τρεις κατηγορίες του διαγωνισμού σχολικής ιστοσελίδας του Δήμου Αθηναίων.

Εν τέλει, μου πήρε χρόνια να το καταλάβω αλλά αυτό που ήθελα να κάνω είναι να γράφω κώδικα που να παράγει όμορφες εικόνες. Καθώς η δουλειά του γραφείου που δούλευα μεταμορφώθηκε από κατασκευή ιστοσελίδων σε σχεδιασμό και υλοποίηση εφαρμογών ιστού, ταξίδεψα κι εγώ από το web design στο user experience και βρήκα εκεί με ενθουσιασμό έναν ακόμα πιο μεγάλο κόσμο: την αλληλεπίδραση της τεχνολογίας με την ψυχολογία του ανθρώπου.

Έχουμε πλέον την τεχνολογία συνεχώς πάνω μας. Καλλιτέχνες και ακτιβιστές ισχυρίζονται πως είμαστε ήδη cyborgs. Οι συσκευές μας επαυξάνουν τις διανοητικές μας ικανότητες και πλέον είναι δύσκολο να λειτουργήσουμε χωρίς αυτές. Δώσαμε όμως και πρόσβαση σε αυτούς που δημιουργούν τόσο τις συσκευές, όσο και το λογισμικό που επιλέγουμε να τρέξουμε σε αυτές, μια απευθείας σύνδεση στον εγκέφαλό μας. Ποιό είναι το κόστος;

Με ενδιαφέρει να εξερευνήσω ποιό είναι αυτό το κόστος και πως μπορούμε να το ελαττώσουμε. Ποιοί είναι οι τρόποι που η τεχνολογία επεμβαίνει στη σκέψη μας; Πώς μπορούμε να δημιουργούμε τεχνολογία με τρόπους ηθικούς, που δεν παραβιάζουν την ιδιωτικότητα. Από εκεί και πέρα είναι σημαντικό για μένα να ενημερώσω με την τέχνη μου για τους κινδύνους, όχι τόσο της τεχνολογίας αυτής καθ'αυτής, αλλά των τρόπων με τους οποίους τη χρησιμοποιούμε. Θέλω να αναδείξω πως γίνεται να δημιουργήσεις τεχνολογικά αντικείμενα με αισθητική, όχι απλά κρύβοντάς τα μέσα σε καλογυαλισμένες επιφάνειες αλλά εμφανίζοντας την εσωτερική τους λειτουργία. Έτσι προωθείται τόσο η αισθητική σε βάθος (θα πρέπει και τα ενδότερα να είναι σχεδιασμένα με την καλαισθησία ως παράγοντα) όσο και η ανάγνωση της λειτουργίας τους από τους χρήστες, η επισκευή, η επανάχρηση.

Η ψηφιακή τεχνολογία έδωσε τα εργαλεία στην τέχνη να αγγίξει τις αισθήσεις με περισσότερους τρόπους από ότι ήταν ποτέ δυνατόν, και τα τελευταία χρόνια έχει και το βεληνεκές να φτάσει, ίσως, στους περισσότερους ανθρώπους. Μπορεί κανείς να κάνει ψηφιακή τέχνη με ελάχιστα και οικονομικά εργαλεία και να τη δημοσιεύσει δωρεάν για όλους. Είναι ένας μαγικός κόσμος και θα ήθελα να τον εξερευνήσω περισσότερο.

What kind of person is our guy in “Cheap Smokes” after all? Maybe he is as cheap as his cigarettes, so cheap that the only thing he can do is steal the lines of those frequenting the cafe and parrot them, to hit on some girl. Maybe he is just another pickup artist who'd say anything, but still adamantly refuses being a pickup artist. “Who me?”. Maybe he is, as a friend said, the ultimate male fantasy, the guy that will so easily approach a beautiful woman, spend a magical night with her in the empty summer streets of Athens and then steal, or maybe not, a kiss.

Our guy however doesn't have too much of an opinion of himself. He doesn't say all the “right” things. He hides his failure behind generalities but they don't really make him look much better than he really is. He promises to bring a stone from the moon. He fends the organized crime debt collectors with his love for film-noire and his innocent face. Not one thing is true. Our guy is a story teller and just like the girl in the phone booth can't really get away from him, we can't get our eyes off the screen.

The same way our storyweaver mesmerizes Sophia, Renos is mesmerizing us, transforming familiar settings in an everyday Athens to magical places through a voice over that disconnects the protagonists from the sounds of the city, through the soundtrack that takes us to Prague and sings about carefree love. And finally, through the surreal elements that remind us that this is just someone's imagination.

At the same time, all the issues revolving around sex and relationships parade in front of us, as experienced by the Greek society at the turn of the century. The “rules of engagement”, the stereotypes, the beauty standards. It was just like that, and still is, to some degree.

He attacks society itself as well, who always liked to forgive any shady business in the name of “success”. “Success” is embodied by Manolis, but all Manolis really wanted was to live the love he didn't live in school.

Maybe that journey through Athens that night shows what our guy dreamt love should be. Maybe that night is just a bed-time story. A story playing in his mind, just like it's now playing in our minds and takes us back to 1999 Greece, when everybody would still live happily ever after.

I thought all my woes were this and that. In a sense they were. Nobody can live long enough without company. I needed someone to feel at home with. I needed an unconditional hug.


This saturday was almost all I could ask for. I woke up in her arms. Soft music in the background; outside the rain is just another instrument. We get up. We don't need to put any clothes on; a cup of hot, freshly brewed coffee is all we need to fend of the cool touch of the morning breeze. The soft light of the cloudy day makes her look as if she popped out of a movie. We touch, skin to skin and talk and eat delicious pancakes.

We spent the day together. It was as if we knew each other for years. Smooth. Content. Familiar.

The evening had me showing one of my favorite movies to my internet and afk friends, at the same time. Beer and nice talks ensued. Relationships, feelings, tech. That is what having friends means.


Maybe I didn't “solve” all my woes, but I'm en route. Yes, friends could be closer, yes she could be more sure she's here, but this is quite a ways from my situation a few short months ago. However there is still something wrong. There's still something missing. What is it? why did I burst into tears between those two encounters? Why am I writing this now?

Ποιος είναι τελικά ο ήρωάς μας στα “Φτηνά Τσιγάρα”; Ίσως είναι κι αυτός φτηνός σαν και τα τσιγάρα που καπνίζει, τόσο φτηνός που το μόνο που ξέρει να κάνει είναι να κλέβει τις ατάκες όσων έρχονται στο καφέ και να τις παπαγαλίζει για να ρίξει καμιά γκόμενα. Ίσως είναι εκείνος ο πέφτουλας που όλοι ξέρουμε, που θα πει το οτιδήποτε για να κάνει καμάκι. “Ε όχι και καμάκι!”. Ίσως είναι, όπως είπε κι ένας φίλος, η ενσάρκωση της ανδρικής φαντασίωσης που τόσο εύκολα θα πλησιάσει μια πανέμορφη γυναίκα, θα περάσει μια μαγική νύχτα στην άδεια Αθήνα, και στο τέλος, θα της κλέψει, ίσως, ένα φιλί.

Ο ηρωάς μας όμως, δεν έχει μεγάλη ιδέα για τον εαυτό του. Δεν λέει μόνο τα “σωστά” πράγματα. Κρύβει την τραγική του κατάσταση πίσω από γενικολογίες που όμως δεν τον κάνουν να φαίνεται πολύ πιο πολύς από ότι είναι. Σου υπόσχεται πως θα σου φέρει μια πέτρα από το φεγγάρι. Αποκρούει τους χρεοσυλλέκτες του οργανωμένου εγκλήματος με μια αγάπη για το φιλμ νουάρ και μια γενναιόδωρη δόση στυλ. Τίποτα από όλα αυτά δεν είναι αλήθεια. Ο ήρωάς μας είναι ένας παραμυθάς και όπως η κοπέλα στον τηλεφωνικό θάλαμο δεν μπορεί να ξεκολλήσει από πάνω του έτσι κι εμείς δεν μπορούμε να ξεκολλήσουμε τα μάτια από την οθόνη.

Όπως ο παραμυθάς μας σαγηνεύει τη Σοφία έτσι και ο Ρένος σαγηνεύει εμάς, με απλα σκηνικά σε μια Αθήνα καθημερινή, όπως την ξέρουμε, να γίνονται μαγεία και παραμύθι μέσα από τη φωνή των ηρώων μας που ακούγεται καμπάνα πάνω από τους ήχους της πόλης, χάρη στη μουσική που σε ταξιδεύει στην Πράγα και σε έναν έρωτα ανέμελο, χάρη στις μικρές σουρεαλιστικές πινελιές που σου υπενθυμίζουν πως βρίσκεσαι μέσα σε κάποιου τη φαντασία.

Ταυτόχρονα παρελαύνει δηκτικά από μπροστά μας όλος ο προβληματισμός της ελληνικής κοινωνίας σε σχέση με τον έρωτα και τις σχέσεις, όπως εκφραζόταν στην αλλαγή του αιώνα. Οι κανόνες, τα πρότυπα ομορφιάς, τα φυλετικά στερεότυπα. Έτσι ήταν, και σε ένα βαθμό έτσι είναι ακόμα.

Δεν αφήνει φυσικά αλώβητη και την Ελληνική κοινωνία η οποία φαινόταν να συγχωρεί την οποιαδήποτε υπόγεια δραστηριότητα, ταυτίζοντάς την με το πρόσωπο του Μανώλη, ενός Μανώλη που τελικά το μόνο που ήθελε ήταν να ζήσει κι'αυτός τον έρωτα που δεν έζησε μικρός.

Ίσως η βόλτα τη νύχτα εκείνη να δείχνει το όνειρο του παραμυθά μας για το πως πρέπει να είναι ο έρωτας. Ίσως και ίδια η νύχτα να είναι ένα παραμύθι. Ένα παραμύθι που παίζει στο μυαλό του, όπως τώρα παίζει και στο δικό μας μυαλό, και μας γυρίζει σε μια Ελλάδα του 2000 όταν όλα ακόμα πήγαιναν καλά.

I feel extremely lonely. I don't really know why. I was lonely my whole life. I know how to deal with it. These days, however, it overflows. I want to cry at random moments. I see people love each other in movies and I feel longing.

I have started to not care about others. I feel like I've cared enough. I have been working for a fortnight now, non-stop. Evenings, weekends, all the time. This has reduced the programme to a sludge. Yes, I can go out for a few hours in the morning, and I can stop work to get a quick nap, but it's restless and most of the days are so hectic I can't even make a break. Sometimes shit is so storming it takes me an hour from the time I say “I will get up from the computer” to the time I actually get up, frustrated, when I can't take the hunger, or the need to go to the toilet, any longer.

At least I've managed to keep my eating and cleaning habits, up to a point. The cleaning has taken a small hit, I should have mopped the floor yesterday and I didn't do it today either. I'm going to do it tomorrow, hopefully, along with some stretching. Yeah exercise is okay too. I think that keeping these up in these trying times (and I know that sounds cliché but they fucking are) is extremely important. It's what I couldn't do in the past and these hard periods became nightmares that I couldn't wake up from unless I had a long vacation. There's no long vacation in the horizon, so I need to be able to recover quickly.

But let's get back to the caring thing: I feel I've been caring about others more than anybody ever cared about me. I need my space and my time but I also need company, and friends and somebody to lean on. There wasn't anybody ever. I was always the one to be leaned upon. So much they started asking me for it when I was too weak to do it, instead of recognizing the weakness and give something back.

I don't know if I've never communicated any needs, because maybe all this metal and screws hide everything well enough unless it overflows with rage and explodes upon everything. Yeah, I can appreciate the fact that those two kept talking to me after those explosions.

And yes, at this point M. is the most solid person, the closest I have to maybe lean on. But he's oblivious to many of the things happening to me and we can't communicate in the level I need to. We never could. I remember myself complaining about that since junior high.

I don't know what is happening to me. I'm changing incredibly fast but I'm staying the same as well. I want to live things past and I was afraid that when I do live them again I will be disappointed because maybe it's the thrill that I want to live and not the experiences themselves. That I have grown and I want different things. It's not like that, because the few things I did manage to live that looked like the past were immensely exciting.

I know I'm an interesting person. I get that a lot. I am being approached and I am usually called again to do things. Yet I have this unshakable feeling that I will be forever alone. That I will have to live with my unbearable self 50 more years, until I can't take it anymore and go mad, or give up.

I also know now that I'm less inclined to get so stuck when I have feelings for someone. I actually feel good saying things I feel to other people. But then again, that unshakeable feeling.

I haven't managed to manage my sleep however, after all these years. This loneliness keeps me awake a few more minutes, wanting to write something to publish it to communicate it to strangers in the hope that someone will answer.

And then it's her: My very own Mona Sax. As another Max Payne, I want many things but most of all I want her. But she is there only as a ghost. I can't touch her. And she haunts me.

What there is between me and her is magical. It's immensely strong and yet not strong enough. And there lies it's power. I don't think it's ever going to completely go away. Yeah, 70yo me won't be the same, but I think it's going to be closer to what I am now than what I am now is to 15 years ago. And if there's an indication of something that's still there, I have some letters to show you.

I can only push forward. Grind my teeth, harness all the emotion wrangling power I have been building all those years and put it now to work exactly where I want it. I need to push through 3 more weeks. And then the quarantine will be over and I'll take a long weekend to reflect. And barbecue in the sun, and drink however much beer I want. Fuck yeah! (yeah, I'll still be alone, but at least I'll be relaxed)

(is that worth dreaming of?)

Fuck I can't even finish with a happy note. I'm going to bed.

This is a guide on how to install #pixelfed on ubuntu 18.04 since that is a distribution most probably to find on cheap VPS's.

Preparation

In most servers this stuff is pre-installed, but when you just install ubuntu server with no extra options they are missing. There's no harm trying, worst that can happen is to get an “already installed” message.

In some cases (minimal default installation) you will need to add the add-apt-repository command. I also had to install the https transport for apt (that is a program that allows apt to download over https instead of http) because some newer repositories require it. Do this now because sometimes an installation might fail halfway through if it's not installed and that's a tough situation to get out of.

sudo apt install software-properties-common apt-transport-https

and the trash command so that you don't actually delete things permanently with rm

sudo apt install trash-cli

Then you can use trash useless-filename-here to delete stuff.

I like the micro editor because it uses the modern GUI editor conventions in the terminal (such as Ctrl+C, Ctrl+V for copy and paste).

The second command adds micro to PATH for all users because for some reason /snap/bin is not in the path for every user.

sudo snap install micro --classic
sudo sed -i 's#"$#:/snap/bin"#' /etc/environment

or if that doesn't work

curl https://getmic.ro | bash

Installation of dependencies

First add php ppa's. This step adds newer php versions to this old ubuntu because pixelfed doesn't run with older ones.

sudo add-apt-repository ppa:ondrej/php

(The ondrej apache ppa is not required but the ppa maintainer recommends adding it)

Then add mariadb (mysql-equivalent) repositories. The same goes here, pixelfed requires newer versions.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,i386,ppc64el] http://ftp.cc.uoc.gr/mirrors/mariadb/repo/10.2/ubuntu xenial main'

Refresh caches

sudo apt update

Upgrade what can be upgraded

sudo apt upgrade

Answer yes to the prompt

Install nginx

sudo apt install nginx

Install php and mysql

sudo apt install php7.3 mariadb-server

You might need to remove apache.

sudo apt remove apache2

If it says it's not installed don't worry about it, all is well.

Install other required modules

sudo apt install imagemagick composer redis-server jpegoptim optipng pngquant php7.3-xml php7.3-pdo php7.3-json php7.3-ctype php7.3-xml php7.3-mbstring php7.3-gd php7.3-tokenizer php7.3-bcmath php7.3-curl php7.3-zip unzip php7.3-pdo php7.3-mysql php7.3-intl php7.3-fpm

Install mail transport agent so that pixelfed can send confirmation emails.

sudo apt install postfix

In the dialog box that appears press Tab and then Enter to choose Ok and then choose Internet site from the list using the arrow keys on your keyboard and then press Enter to confirm. In the next page enter the name of your instance, e.g. myinstance.name.

At some point you will probably need to monitor processes and free memory so install htop before you actually need it, at which point will probably be impossible to do the installation

sudo apt install htop

Configuring nginx

I prefer to run nginx as a user I can log in to so now we will do that:

Create a new user pixelfed

sudo useradd -m pixelfed

Set his default shell to bash

sudo chsh pixelfed -s /bin/bash

Edit apache nginx config so that it runs using that user

sudo micro /etc/nginx/nginx.conf

Find and replace user nginx; with user pixelfed;. Save (Ctrl+S) and close (Ctrl+Q) the file.

Also we need to change the php-fpm user to pixelfed

sudo micro /etc/php/7.3/fpm/pool.d/www.conf

Find all occurences of www-data and change them to pixelfed (use Ctrl+F). There are two on lines 23 and 24 also two on 47 and 48

Change the web server root directory to the public directory of the pixelfed repository

sudo micro /etc/nginx/sites-available/default

Replace /var/www/html with /home/pixelfed/pixelfed/public.

Being here, you should also uncomment the php directives

        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

should become

        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
        
               # With php-fpm (or other unix sockets):
               fastcgi_pass unix:/var/run/php/php7.-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

Notice that two of the # remain and that php7.0 became php7.3

Configuring php

Change php max upload size (how large a file is allowed to be uploaded)

sudo micro /etc/php/7.3/apache2/php.ini

Search the file for upload_max_filesize and post_max_size and change to 80M and 120M respectively. You can go larger and just configure pixelfed to limit the sizes but I think 80M is a reasonable size. You can also increase the memory limit to 512M or maybe half your vps's RAM. Save and close the file.

Restart nginx and php-fpm

sudo systemctl restart nginx
sudo systemctl restart php7.3-fpm.service 

Configuring MariaDB

Log in to mysql as root

sudo mysql

Enter the mysql root password as you entered it above.

Create a pixelfed database and user and give the user permissions. On the prompt that appears

    CREATE SCHEMA pixelfed;
    CREATE USER 'pixelfed'@'localhost' IDENTIFIED BY 'supersecretpassword';
    USE pixelfed;
    GRANT ALL PRIVILEGES ON pixelfed.* TO 'pixelfed'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;

Installing Pixelfed

Log in as pixelfed

sudo su pixelfed

change to the home directory

cd

Get the code

git clone https://github.com/pixelfed/pixelfed.git
cd pixelfed

Configuration

Copy the default configuration

cp .env.example .env

Edit the configuration

micro .env

Set your instance name and domain as you wish.

    APP_NAME="PixelFed Test"
    APP_URL=http://myinstance.name
    ADMIN_DOMAIN="myinstance.name"
    APP_DOMAIN="myinstance.name"
    SESSION_DOMAIN="myinstance.name"

Set the username and password of MariaDB as you have configured them above. Find the following lines and complete the values after the =

    DB_DATABASE=pixelfed
    DB_USERNAME=pixelfed
    DB_PASSWORD=supersecretpassword

Set the mail server configuration. Replace myinstance.name with the name of your instance.

    MAIL_DRIVER=sendmail
    MAIL_HOST=localhost
    MAIL_PORT=2525
    MAIL_USERNAME=null
    MAIL_PASSWORD=null
    MAIL_ENCRYPTION=null
    MAIL_FROM_ADDRESS="pixelfed@myinstance.name"
    MAIL_FROM_NAME="myinstance.name"

Set the federation flags to true if you want

    ACTIVITY_PUB=false
    REMOTE_FOLLOW=false

Save and close the file.

Deploying

Run the post deployment commands as outlined here

cd /home/pixelfed/pixelfed # Or wherever pixelfed is installed
composer install --no-ansi --no-interaction --no-progress --no-scripts --optimize-autoloader
php artisan key:generate
php artisan config:cache
php artisan route:cache
php artisan migrate --force
php artisan horizon:purge

Link the storage directory

php artisan storage:link

Now we need to make sure horizon is always running.

Systemd setup

Exit the user shell

exit

now create a new systemd service

sudo micro /etc/systemd/system/pixelfed.service

with the following contents

[Unit]
Description=Pixelfed task queueing via Laravel Horizon
After=network.target
Requires=mariadb
Requires=php-fpm
Requires=redis
Requires=nginx
[Service]
Type=simple
ExecStart=/usr/bin/php /home/pixelfed/artisan horizon
User=pixelfed
Restart=on-failure
[Install]
WantedBy=multi-user.target

enable the service so that it starts automatically on each boot

sudo systemctl enable pixelfed

and start it

sudo systemctl start pixelfed

Launch!

restart nginx

sudo systemctl restart nginx

Let's encrypt and https

Go to certbot website and follow the instructions there. I copied them here for easy access:

sudo apt-get install certbot python-certbot-nginx
sudo certbot --nginx

Follow the instructions from there.

Certbot comes with a cronjob automating renewal so in theory you shouldn't need to do anything more at this time. Enjoy your pixelfed installation.

Creating your first user and setting as adminstrator

Go to the website (http://myinstance.name) and register a new account Go back to your vps and log on to mysql again

mysql -u pixelfed -p

Give the supersecretpassword In the prompt that appears make yourself adminstrator

use pixelfed;
update users set is_admin=1 where id=1;

If you have trouble seeing the activation email you can activate yourself too

update users set email_verified_at="2019-02-12 10:25:32" where id=1;

Final steps

Now go to the website again and log in. You should be able to administer the instance.

Happy posting!

This is a #pherephone “Announce” activity from a writefreely post. It works on mastodon but not on pleroma. I cannot understand why this is. Can any helpful #pleroma or #ActivityPub experts give a hint?

boosts appreciated

POST request to https://pleroma.site/users/qwazix/inbox succeeded (200): 200 OK 
Response: "ok" 
Request: {
        "@context": [
                "https://www.w3.org/ns/activitystreams"
        ],
        "actor": "https://floorb.qwazix.com/myAwesomeList5",
        "cc": [
                "https://pleroma.site/users/qwazix",
                "https://cybre.space/users/qwazix",
                "https://fosstodon.org/users/qwazix"
        ],
        "id": "https://floorb.qwazix.com/myAwesomeList5/item/ULeVhJOsBTqWN22v",
        "object": "https://mixt.qwazix.com/api/posts/mncqqz3y7u",
        "published": "2019-10-14T12:13:43+03:00",
        "to": "https://www.w3.org/ns/activitystreams#Public",
        "type": "Announce"
} 
Headers: 
    Accept: application/activity+json; charset=utf-8
    Accept-Charset: utf-8
    Content-Type: application/activity+json; charset=utf-8
    Date: Mon, 14 Oct 2019 09:13:44 GMT
    Digest: SHA-256=Cl3iznjWvGXEFev5OP6ChwvVtY/Xtaw43ahnhXh4d4A=
    Host: pleroma.site
    Signature: keyId="https://floorb.qwazix.com/myAwesomeList5#main-key",algorithm="rsa-sha256",headers="(request-target) date host digest",signature="fnPHBAqWCIr3EpbwllBwFxhKJ03c23+evwPfX+Bcf/CEenQ/ZgTCViK5Gs0fW8qjzGuSCkYpFKFt7rmEiuXg7T4RkUy2LWq+kfTq8t/jWeS2LUCxNXRAgyJfhH2kioYefKqx6gl414js0qdFk6I0WWvtXpGuKIuiF/WK9FPx7WpJFJfN1WZ2kEdi87F0gRIAjllaGST15ZMx0mFkLVks2Vdff6saPR+V83muGClfzh78AN2XR4fnYve9m5Wm4/U6Q8n503CE/yfBb5bZSmfJZXZSlErT6L224b8LWKC7Q+IHe17k+aFibl/dNAknjmQwm/xFOdNzVHwGWXyhSrchGw=="
    User-Agent: pherephone 0.99

EDIT: I also tried after reversing the cc and to fields just as pleroma does.

/home/qwazix/go/src/github.com/writeas/activityserve/actor.go:502: POST request to https://iscute.moe/users/qwazix/inbox succeeded (200): 200 OK 
Response: "ok" 
Request: {
        "@context": [
                "https://www.w3.org/ns/activitystreams"
        ],
        "actor": "https://floorb.qwazix.com/myAwesomeList5",
        "cc": "https://www.w3.org/ns/activitystreams#Public",
        "id": "https://floorb.qwazix.com/myAwesomeList5/item/EUyTQEnz1gJK3qu3",
        "object": "https://fosstodon.org/users/qwazix/statuses/102966679309503735",
        "published": "2019-10-15T16:40:40+03:00",
        "to": [
                "https://floorb.qwazix.com/myAwesomeList5/followers",
                "https://cybre.space/users/qwazix",
                "https://fosstodon.org/users/qwazix",
                "https://iscute.moe/users/qwazix",
                "https://pleroma.site/users/qwazix"
        ],
        "type": "Announce"
} 
Headers: Accept: application/activity+json; charset=utf-8
Accept-Charset: utf-8
Content-Type: application/activity+json; charset=utf-8
Date: Tue, 15 Oct 2019 13:40:41 GMT
Digest: SHA-256=U30KWCsixidktfC/JToZSCX9HXoysMNrTqLPPzf62LI=
Host: iscute.moe
Signature: keyId="https://floorb.qwazix.com/myAwesomeList5#main-key",algorithm="rsa-sha256",headers="(request-target) date host digest",signature="DONBUM3O3s/YU/B4F9pWPWgFx1P7ZruJbuTrDVYIdY6m2EpVI7yihy157o3aUoC37acKuoo9F+F0sbOHyt3B3lwe+3eWHq0WbVDfoeIdOIFGVo2s9BxK748RHSSVU0lnLsIOQ/A3B3rRkkLlJ1zc3kdfHzfaNzQPUQJ9SL72x55sgzIthIY+vSAbS/IHbup5XomenkHynsj33F9RCYPqXajPRMUXPx0ljFcfRyQGX7/opipDQ4V2ANzjLHwosnHvKss+DQK9e2ZBbq3PaKYUwmKWdwDCQfzEok+hz6xTGzCnw8K7yICu2c1YNU0PD+q5rCATWhNuA3vPeme1iTcZ5A=="
User-Agent: pherephone 0.99

The thing that bothers me the most is that I get an “ok” response and a 200 but the post never appears in the interface.

testing #pherephone