upgrading PHP 7.4 to PHP 8 on FreeBSD

What, a technical post? It happens. Rarely. Usually, I’m focused on the tech that goes into a book, but sometimes the real world intervenes.

Like PHP. PHP is very much the real world. My site has been running PHP 7.4 for a while, which goes end of life on 28 November. I put this off as long as possible, but it’s time to update.

I run my e-bookstore on Woocommerce, which is built on WordPress, which is built on PHP. What started as a silly experiment has become the center of my business. I need to minimize downtime, which means I must check everything before upgrading. It’s PHP, which means it’s a maze of twisty little modules that all look alike. PHP has this annoying habit of adding, removing, splitting, and changing modules. Running PHP applications on FreeBSD is all about finding the module your application needs, so I want to identify all possible problems before changing.

First, let’s see what packages need upgrading.

# pkg info -x php
mod_php74-7.4.32_1
php74-7.4.32
php74-ctype-7.4.32
php74-curl-7.4.32
php74-dom-7.4.32
php74-exif-7.4.32
php74-fileinfo-7.4.32
php74-filter-7.4.32
php74-gd-7.4.32
php74-iconv-7.4.32
php74-intl-7.4.32
php74-json-7.4.32
php74-mbstring-7.4.32
php74-mysqli-7.4.32
php74-openssl-7.4.32
php74-pcntl-7.4.32
php74-pdo-7.4.32
php74-pdo_mysql-7.4.32
php74-pecl-imagick-im7-3.5.1_1
php74-phar-7.4.32
php74-posix-7.4.32
php74-session-7.4.32
php74-simplexml-7.4.32
php74-soap-7.4.32
php74-tokenizer-7.4.32
php74-xml-7.4.32
php74-xmlreader-7.4.32
php74-xmlrpc-7.4.32
php74-xmlwriter-7.4.32
php74-zip-7.4.32_1
php74-zlib-7.4.32

31 packages. Software like Tiny Tiny RSS and WordPress depend on PHP, but if the underlying PHP software has all the necessary libraries then they should just work. Should. But PHP modules sometimes disappear, get replaced, or get renamed. I want a list of all the modules I need before running any commands. So, what would the PHP 8.0 version of these packages be named? I have to iterate through sed a couple times to trim out excess version information and wind up with this.

# pkg info -x php | sed s/74/80/g | sed s/-7.4.32//g | sed s/_1//g

mod_php80
php80
php80-ctype
php80-curl
php80-dom
php80-exif
php80-fileinfo
php80-filter
...

Those look sensible. Now check to see if the packages exist.

I could automate this by checking the exit code of each command, but the list is short enough that I can process it by hand. I run one package search at a time, letting xargs prompt me for each one so I can eyeball the results.

# pkg info -x php | sed s/74/80/g | sed s/-7.4.32//g | sed s/_1//g | xargs -L1 -p pkg search
pkg search mod_php80?…y
mod_php80-8.0.25 PHP Scripting Language
pkg search php80?…y

This particular search will spew a couple hundred lines of output, but I’m confident the base PHP 8.0 package is in there.

...
php80-intl-8.0.25 The intl shared extension for php
pkg search php80-json?...y
pkg search php80-mbstring?...

Ooops! Pay attention here. There is no package for PHP 8.0’s JSON module! Make a note of that.

At the end, I have problems with three packages: php80-json, php80-openssl, and php80-xmlrpc. Freshports tells me that the JSON and OpenSSL modules were added into the default PHP 8.0 package, so I can cross those off my list.

The XML-RPC module is another tale. PHP 8.0 no longer has an XML module. Fortunately, that same bug lists a replacement pecl-xmlrpc. There’s a related php80-pecl-xmlrpc module.

I have a list of modules to install. For a last check, I’ll look for anything that depends on PHP 7.4.

# pkg info -dx php74
The list looks different, but contains the same modules. I’m as prepared as I can be.

One last check. Make a list of the packages to install. Eyeball it to make sure it looks right.

# pkg info -x php | sed s/74/80/g | sed s/-7.4.32//g | sed s/_1//g > php8.pkg

Create a boot environment, and do a dry run. If I remove all packages with PHP in their name, what will get pulled? Using -n tells me what the command would do, but doesn’t actually change anything.

# bectl create 12.3-p7-lastbeforePHP
# pkg remove -nx php74

That list looks sensible. Now remove the packages, and install everything on our list.

# pkg remove -x php74
# cat php8.pkg | xargs -L1 -p pkg install -y

The -p argument to xargs prompts me for confirmation, so I can use -y on the pkg command. The install fails on the nonexistent JSON, OpenSSL, and XMLRPC modules, but that’s expected.

At the end, I manually install php80-pecl-xmlrpc.

Reboot.

Test, test, test. Run a test purchase. It works.

Everything looks okay? I guess I can turn it over to the Crowdsourced Monitoring System, aka “y’all,” and go make some paying words.

Talk on Rat Operated Vehicles

On Tuesday, 8 November 2022, 7PM Detroit time, I’ll be giving a talk for mug.org about Rat Operated Vehicles. If the guys are cooperative, there might be a demo.

(Narrator: It’s a live talk. They will not be cooperative.)

Compared to my last few MUG talks, on topics like TLS and SNMP and other unholiness, this will be light and fluffy.

If you missed my Rat Operated Vehicle, I have a YouTube playlist. I should probably upload some more videos before the talk, though.

“OpenBSD Mastery: Filesystems” Print/Ebook Bundle Preorder

Until 1 December, I’ll be taking preorders for print copies of OpenBSD Mastery: Filesystems. You can even buy two books if you want, because I can cram a second book into a Priority Mail envelope. Just let me know the title of the second one in an order comment.

Every purchase includes ebook versions of OMF (and any other titles you get).

I’ll be ordering your books with the sponsor copies, signing them, and shipping at the same time.

Details on the order page.

If this works out well, I’ll do it again. Disintermediation is good.

If it whirls into a bewildering mess, I won’t.

Sponsorships, Releases, New Books, and Kickstarters

A giant tangle of stuff, and it’s all related. Plus, I want your opinion on two questions.

OpenBSD Mastery: Filesystems is at the copyeditor, and due back 15 December. I should have print in stores immediately before Christmas. Barely.

Prohibition Orcs and Frozen Talons are leaking out in ebook right now. If you buy them directly from me, they come with an exclusive bonus–To Serve Orc: Enduring Recipes from the Old Country, Watered Down for America. It’s short, but you won’t find it anywhere except my site. The print books are underway, and the leather-covered Orcibus will have to wait until I can deliver print books to the cover maker. Covers should exist in early December, so I should completely fulfill everything before 2023.

Which brings me to scheduling.

People sometimes ask me if they can buy signed print books directly from me. I had intended to run a Kickstarter as an advance sale for OpenBSD Mastery: Filesystems, which would let those folks buy signed books from me. Kickstarter will not let you run a new Kickstarter while an old one has not yet been fulfilled, however. If I’m honest, I can’t run a new Kickstarter until, oh, 1 January 2023.

Which means I can’t realistically do one for OMF. I am considering running a thirty-day print sale for OMF on my web site, however. Paperbacks would be $25, hardcovers $40. Shipping would be $10 US, $15 Canada, and $40 rest of world. (Yeah, shipping is terrible.) You’d have the option to order one extra book, at the same prices, for the same shipping. I can cram two Mastery books, or a Mastery and a novel, in an USPS Priority Mail envelope. Shipments would go out with the sponsor shipments, but would NOT arrive in time for Christmas. Comment if you’d buy one. If nobody wants it, I won’t bother setting it up.

Which means that my next Kickstarter will be for a fiction collection (Corrosive Devotion: Ten Tales of Love that Aren’t Love Stories), probably in January 2023.

About that time, I’ll open sponsorships for the next Mastery title, “Running Your Own Mail Server.” Because, like Kickstarter, I won’t open new sponsorships until I’ve fulfilled the old ones. Prices are rising everywhere, so I’m contemplating raising print sponsorship prices from $100 to $120. If you’re a previous print sponsor, would that stop you from sponsoring again? This will let me integrate a Kickstarter into the business plan, rather than being a late addition haphazardly nailed onto the side.

For similar reasons, the ebook of OpenBSD Mastery: Filesystems will be $12.99 rather than $10.99. This means that while the Kindle version will be available at any number of bookstores, it will not be in Amazon’s Kindle bookstore. Amazon will have the print edition. Amazon is no longer a viable e-bookstore for my new shorter nonfiction, mostly because I’m not willing to screw my readers.

That’s the reasons for the schedule.

Speaking of schedules, I have once again completed all current writing projects simultaneously and now must perform a laborious cold start. I truly must figure out how to de-synchronize my multiple projects.

“OpenBSD Mastery: Filesystems” draft done!

After far too long, I have finished a first draft of OpenBSD Mastery: Filesystems. Sponsorships are now closed.

I’m asking tech reviewers to get any comments to me by 15 October 2022. That’s four weeks. It might seem tight, but experience shows that people either get their comments to me immediately, or wait until the last possible weekend. I’m not complaining–I do exactly the same thing. Please return any comments either a) in plain text, with enough context that I can find them when page numbers change, or b) as annotations directly on the PDF.

My tech reviewers are now in their third decade of winning the prize for “most likely to use many different PDF readers.” A file that works for one won’t work for another. I work around this by distributing three PDFs of the manuscript, each identical in contact but prepared differently. Everyone should be able to find one that works for them.

If you’re interested in doing a tech review, please drop me an email (mwl at mwl dot io) saying who you are, why you would make you a good reviewer, and that you won’t share the manuscript. (Piracy is bad, but having my name on an unreviewed and thus certainly incorrect document is horrifying). I’ll ignore responses that can’t follow those instructions, because whenever I don’t I get difficult-to-decipher feedback. (I have previously received PostScript diffs, and… no. Just no.)

I’ll be turning my attention to the Prohibition Orcs copyedits next. Then it’s back to the Epic Giant Fiction Project, and another tech book, title TBA.

“OpenBSD Mastery: Filesystems” Status Report

I just finished the ‘non-native filesystems’ part of “OpenBSD Mastery: Filesystems.” I wouldn’t say I’ve finished the hard part, but I have finished the “intertwined to an unholy degree” part.

In the beginning, Berkely released Unix. This made a lot of vendors very angry and has widely been regarded as a bad move.

Why have I spent months on five chapters? Because everything in the core storage system of any Unix is intertwined to a nearly unholy degree. To understand filesystems you must understand partitioning, but to understand why Unix uses partitions as it does you need to understand filesystems. I have to meticulously disentangle facts so that I can start explanations at the bottom of the storage stack, but add in enough higher-level details exactly when you need them so you can make sense of why the bottom layers work as they do.

Otherwise, you’d look at computers and think “Wow, this whole thing is stupid.” Don’t get me wrong, the whole thing IS stupid, but it’s your job to understand the stupidity and I don’t need to be rubbing your nose in it.

Have I written on these before?

Yes, many times.

Does that make them easier to write?

BWAHAHAHAHA. No.

Can I use the earlier edition of Absolute OpenBSD to guide me?

Sure, except that the book is ten years old and every detail within is suspect and must be triple-checked against the current state of the software and oh by the way that book doesn’t even mention GPT or FUSE so burn it all down. AO2e is a checklist of things that will annoy me.

The good news is, the sections that remain are fairly tidy. They’re not standalone, but they are less incestuously intertwined with other topics.

  • NFS
  • iSCSI
  • softraid
  • encrypted storage

    The first two are mostly standalone, and are thus easier to write. Also, as an author I am highly grateful that OpenBSD does not support NFSv4.

    I’m going to push hard to get this done in the next few weeks. Which brings me to:

    Once that happens, sponsorships will close. If you want your name in the book, act now.

  • I Eat Salmon Ice Cream

    There’s about sixty hours to go on the Prohibition Orcs kickstarter. I haven’t done the math yet, because the campaign is not over yet and I don’t have money in hand, but it appears that I’ll net about as much on this Kickstarter as I would selling the books to a midsized publisher.

    The Kickstarter is undoubtedly a huge amount of work. But it’s less mental labor than selling the books to a publisher, negotiating a contract, and interfacing with that publisher’s staff to shepherd them into print.

    I’m calling this a win. Plus, a sane normal publisher won’t give me fancy leather covers.

    Yes, this post is here to remind followers that the campaign is about to end and you should back now if you’re going to. I also wanted to mention my live reading of the PO tale Woolen Torment.

    And finally, the subject of this post.

    One of the Kickstarter stretch goals was recipes. A “friend” of mine saw that and decided he would contribute, by making orcish ice cream. Four different kinds. I tried them. On camera. Live. For your amusement. Content warnings for phrases like “punt it into the Sun” and “lick the bottom of the rat cage.”

    https://www.kickstarter.com/projects/mwlucas/prohibition-orcs/posts/3571090

    I feel compelled to share this. After all, many of my readers love to watch me suffer.

    Leather Book Covers?

    Over in OpenBSD Mastery: Filesystems land, I spent yesterday writing about dumpfs and how modern UFS respects disk geometry. (It doesn’t, except when it does.)

    Over in Kickstarter land, I got a sample over the Orcibus’ leather cover.

    It’s magnificent. Fortunately, because it’s $200.

    I’m contemplating offering a leather cover when I do the OMF Kickstarter.

    Gut reaction, of course, is that this would be stupid. Nobody wants a fancy tech book. But I thought nobody would want a hardcover tech book, yet folks buy them. Must ponder.

    No matter what, though, I needed to show this off.

    Halfway Through the Orc Kickstarter

    I hoped that the Prohibition Orcs Kickstarter would break $5k in thirty days. That would give me the complete custom covers, and let me publish my Dream Orc Books.

    Instead, it’s over $8k in less than half that time. This is the most I have ever been paid for a work of fiction, and it’s not even out yet. (Lifetime sales on some novels are higher, I’m sure, but I don’t have the accounting software to figure that out. Nobody does.)

    It’s also following the same trend as the Badgers kickstarter: busy for ten days, pretty flat for ten, and a last minute surge over the final ten days. I might make the next one only twenty days, to see if I can cut out the sagging middle. Pretty sure it won’t actually work that way, but this is all an experiment and nobody knows anything, so why not?

    I’m especially surprised that so many folks are buying the leather-covered Orcibus.

    As part of the Kickstarter, I also recorded me reading Woolen Torment, in its entirety. Yes, yes, I have a face for radio and a voice for print, but it’s a thing.

    I’ll say it now: my guess for the finish is about $10k.

    If the Kickstarter hits the $25k stretch goal, however, I will get my first ever tattoo. A few of my readers who are especially interested in me experiencing pain and scarring would like me to have a tattoo. I figure this goal is low enough to encourage those folks to shill the campaign to others–after all, it’s nearly realistic!–while being high enough to keep my hide intact. But they’ll enjoy threatening my pasty complexion with color, so it’s all good. Here’s the black and white art that will be engraved on the orc-hide Orcibus, and maaaaybe on my hide.

    Yes, Mha the orcess is crazy romantic.

    Sixteen days left if you want any of the exclusive rewards. Or, just wait until it goes in my bookstore. Whatever.