BSD Now

BSD Now

Download on the App Store

BSD Now episodes

  • Episode 274: Language: Assembly | BSD Now 274

    Assembly language on OpenBSD, using bhyve for FreeBSD development, FreeBSD Gaming, FreeBSD for Thanksgiving, no space left on Dragonfly’s hammer2, and more.

    ##Headlines

    ###Assembly language on OpenBSD amd64+arm64

    This is a short introduction to assembly language programming on OpenBSD/amd64+arm64. Because of security features in the kernel, I have had to rethink a series of tutorials covering Aarch64 assembly language on OpenBSD, and therefore this will serve as a placeholder-cum-reminder.

    OpenBSD, like many UNIX and unix-like operating systems, now uses the Executable and Linkable Format (ELF) for its binary libraries and executables. Although the structure of this format is beyond the scope of this short introduction, it is necessary for me to explain part of one of the headers.

    Within the program header there are sections known as PT_NOTE that OpenBSD and other systems use to distinguish their ELF executables - OpenBSD looks for this section to check if it should attempt to execute the program or not.

    • Our first program: in C!
    • It’s often a good idea to prototype your assembly programs in a high level language such as C - it can then double up as both a set of notes and a working program that you can debug and compile into assembly language to compare with your own asm code.

      • See the article for the rest on:
      • Our first program: in x86-64 Asm (AT&T/GAS syntax)
      • Our first program: in inline x86-64 assembly
      • Our first program: in x86-64 asm (NASM syntax)
      • Our first program: in ARMv8 AArch64 assembly
      • ###Using bhyve for FreeBSD Development

        • The Hypervisor
        • The bhyve hypervisor requires a 64-bit x86 processor with hardware support for virtualization. This requirement allows for a simple, clean hypervisor implementation, but it does require a fairly recent

          processor. The current hypervisor requires an Intel processor, but there is an active development branch with support for AMD processors.
          The hypervisor itself contains both user and kernel components. The kernel driver is contained in the vmm.ko module and can be loaded either at boot from the boot loader or at runtime. It must
          be loaded before any guests can be created. When a guest is created, the kernel driver creates a device file in /dev/vmm which is used by the user programs to interact with the guest.
          The primary user component is the bhyve(8) program. It constructs the emulated device tree in the guest and provides the implementation for most of the emulated devices. It also calls the kernel driver to execute the guest. Note that the guest always executes inside the driver itself, so guest execution time in the host is counted as system time in the bhyve process.
          Currently, bhyve does not provide a system firmware interface to the guest (neither BIOS nor UEFI). Instead, a user program running on the host is used to perform boot time operations including loading the guest operating system kernel into the guest’s memory and setting the initial guest state so that the guest begins execution at the kernel’s entry point. For FreeBSD guests, the bhyveload(8) program can be used to load the kernel and prepare the guest for execution. Support for some other operating systems is available via the grub2-bhyve program which is available via the sysutils/grub2-bhyve port or as a prebuilt package.
          The bhyveload(8) program in FreeBSD 10.0 only supports 64-bit guests. Support for 32-bit guests will be included in FreeBSD 10.1.

          • See the article for the very technical breakdown of the following:

          • Network Setup

          • Bridged Configuration

          • Private Network with NAT

          • Using dnsmasq with a Private Network

          • Running Guests via vmrun.sh

          • Configuring Guests

          • Using a bhyve Guest as a Target

          • Conclusion

            The bhyve hypervisor is a nice addition to a FreeBSD developer’s toolbox. Guests can be used both to develop new features and to test merges to stable branches. The hypervisor has a wide variety of uses beyond developing FreeBSD as well.

            ##News Roundup

            ###Games on FreeBSD

            What do all programmers like to do after work? Ok, what do most programers like to do after work? The answer is simple: play a good game! Recently at the Polish BSD User Group meetup mulander was telling us how you can play games on OpenBSD. Today let’s discuss how this looks in the FreeBSD world using the “server only” operating system.

            • XNA based games
            • One of the ways of playing natively is to play indie games which use XNA. XNA is a framework from Microsoft which uses .NET, for creating games. Fortunately, in the BSD world we have Mono, an open source implementation of Microsoft’s .NET Framework which you can use to run games. There is also FNA framework which is a reimplementation of XNA which allows you to run the games under Linux. Thomas Frohwein, from OpenBSD, prepared a script, fnaify. Fnaify translate all dependencies used by an FNA game to OpenBSD dependencies.

              I decided to port the script to FreeBSD. The script is using /bin/sh which in the case of OpenBSD is a Korn Shell.

              I didn’t test it with many games, but I don’t see any reason why it shouldn’t work with all the games tested by the OpenBSD guys. For example, with:

              • Cryptark

              • Rouge Legacy

              • Apotheon

              • Escape Goat

              • Bastion

              • CrossCode

              • Atom Zombie Smasher

              • Open-Source games

                In FreeBSD and OpenBSD we also will find popular games which were open sourced. For example, I spend a lot of time playing in Quake 3 Arena on my FreeBSD machine. You can very simply install it using pkg: # pkg install ioquake3

                Then move the files for the skins and maps to the .ioquake3 directory from your copy of Quake. In the past I also played UrbanTerror which is a fully open source shooter based on the Quake 3 Arena engine. It’s is also very easy to install it from ports: # pkg install iourbanterror

                In the ports tree in the games directory you can find over 1000 directories, many of them with fully implemented games. I didn’t test many games in this category, but you can find some interesting titles like:

                • openxcom (Open-source re-implementation of the original X-Com)
                • openjazz (Free re-implementation of the Jazz Jackrabbit™ game engine)
                • corsixth (Open source re-implementation of Theme Hospital)
                • quake2
                • openra (Red Alert)
                • openrct2 (Open source re-implementation of RollerCoaster Tycoon 2)
                • openmw (Open source engine reimplementation of the game Morrowind)
                • All those titles are simply installed through the packages. In that case I don’t think FreeBSD has any difference from OpenBSD.

                  • Wine
                  • One of the big advantages of FreeBSD over OpenBSD is that FreeBSD supports wine. Wine allows you to run Windows applications under other operating systems (including mac). If you are a FreeBSD 11 user, you can simply fetch wine from packages: # pkg install i386-wine

                    To run Windows games, you need to have a 32-bit wine because most of the games on Windows are built on 32-bits (maybe this has changed – I don’t play so much these days). In my case, because I run FreeBSD-CURRENT I needed to build wine from ports. It wasn’t nice, but it also wasn’t unpleasant. The whole step-by-step building process of a wine from ports can be found here.

                    • Summary
                    • As you can see there are many titles available for *BSDs. Thanks to the FNA and fnaify, OpenBSD and FreeBSD can work with indie games which use the XNA framework. There are many interesting games implemented using this framework. Open source is not only for big server machines, and there are many re-implementations of popular games like Theme Hospital or RollerCoaster Tycoon 2. The biggest market is still enabled through wine, although its creates a lot of problems to run the games. Also, if you are an OpenBSD user only this option is not available for you. Please also note that we didn’t discuss any other emulators besides wine. In OpenBSD and FreeBSD there are many of them for GameBoy, SNES, NeoGeo and other games consoles.

                      ###FreeBSD For Thanksgiving

                      I’ve been working on FreeBSD for Intel for almost 6 months now. In the world of programmers, I am considered an old dog, and these 6 months have been all about learning new tricks. Luckily, I’ve found myself in a remarkably inclusive and receptive community whose patience seems plentiful. As I get ready to take some time off for the holidays, and move into that retrospective time of year, I thought I’d beat the rush a bit and update on the progress

                      Earlier this year, I decided to move from architect of the Linux graphics driver into a more nebulous role of FreeBSD enabling. I was excited, but also uncertain if I was making the right decision.
                      Earlier this half, I decided some general work in power management was highly important and began working there. I attended BSDCam (handsome guy on the right), and led a session on Power Management. I was honored to be able to lead this kind of effort.
                      Earlier this quarter, I put the first round of my patches up for review, implementing suspend-to-idle. I have some rougher patches to handle s0ix support when suspending-to-idle. I gave a talk MeetBSD about our team’s work.
                      Earlier this month, I noticed that FreeBSD doesn’t have an implementation for Intel Speed Shift (HWPstates), and I started working on that.
                      Earlier this week, I was promoted from a lowly mentee committer to a full src committer.
                      Earlier today, I decided to relegate my Linux laptop to the role of my backup machine, and I am writing this from my Dell XPS13 running FreeBSD

                      vandamme 13.0-CURRENT FreeBSD 13.0-CURRENT #45 881fee072ff(hwp)-dirty: Mon Nov 19 16:19:32 PST 2018 bwidawsk@vandamme:/usr/home/bwidawsk/usr/obj/usr/home/bwidawsk/usr/src/amd64.amd64/sys/DEVMACHINE amd64

                      6 months later, I feel a lot less uncertain about making the right decision. In fact, I think both opportunities would be great, and I’m thankful this Thanksgiving that this is my life and career. I have more plans and things I want to get done. I’m looking forward to being thankful again next year.

                      ###hammer2: no space left on device on Dragonfly BSD

                      • The Issue
                      • hammer2 does not actually delete a file when you rm or unlink it. Since recovery of the file is possible (this is the design of hammer2), there will still be an entry taking up data. It’s similar to how git works.

                        Even with 75% usage listed here, the filesystem could still have filled up. If you are using it as your root filesystem, then attempts to clean up data may fail. If the kernel panics over this, you will see something like this.

                        • The Fix
                        • If you have a recent enough version of the rescue ramdisk installed, on bootup you can press ‘r’ and access the rescue ramdisk. Your provider will have to offer some sort of remote interface for interacting with the operating system before it boots, like VNC or IPMI. You can then mount your filesystem using:

                          [root@ ~]# mkdir /tmp/fs

                          [root@ ~]# mount_hammer2 -o local /dev/vbd0s1a /tmp/fs

                          If you receive an error that /sbin/hammer2 is not found, then your rescue ramdisk is not up to date enough. In that scenario, download the latest 5.2 iso from dragonflybsd.org and boot from the cd-rom on your virtual machine or physical device. Just login as root instead of installer.

                          If the mount does succeed, then all you have to do is run the following twice:

                          [root@ ~]# /sbin/hammer2 bulkfree /tmp/fs

                          If you do not have enough memory on your machine, you may need to mount swap. Add your swap partition to the /etc/fstab and then do:

                          [root@ ~]# swapon -a

                          Once you have ran the bulkfree command twice, the usage reported by df -h will be correct. However, there is a chance on reboot that a core dump will be placed in /var/crash/ so be prepared to have plenty of space free in case that happens. You should also delete any files you can and run the bulkfree operation twice afterwards to clear up additional space.

                          ##Beastie Bits

                          • BSD Pizza Night - Portland
                          • bsd@35c3: …the place for you…*NIX!
                          • Project Trident PreRelease Image now available
                          • Play Stardew Valley on OpenBSD
                          • GUI Wrapper for OpenBSD mixerctl
                          • qtv - QuickTextViewer
                          • ##Feedback/Questions

                            • Ron - Ideas for feedback section
                            • Paulo - SDIO Firmware
                            • Dan - Some fun ZFS questions about labels
                              • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                              • 1 hr 5 min
                              • Episode 273: A Thoughtful Episode | BSD Now 273

                                Thoughts on NetBSD 8.0, Monitoring love for a GigaBit OpenBSD firewall, cat’s source history, X.org root permission bug, thoughts on OpenBSD as a desktop, and NomadBSD review.

                                ##Headlines

                                ###Some thoughts on NetBSD 8.0

                                NetBSD is a highly portable operating system which can be run on dozens of different hardware architectures. The operating system’s clean and minimal design allow it to be run in all sorts of environments, ranging from embedded devices, to servers, to workstations. While the base operating system is minimal, NetBSD users have access to a large repository of binary packages and a ports tree which I will touch upon later.

                                I last tried NetBSD 7.0 about three years ago and decided it was time to test drive the operating system again. In the past three years NetBSD has introduced a few new features, many of them security enhancements. For example, NetBSD now supports write exclusive-or execute (W^X) protection and address space layout randomization (ASLR) to protect programs against common attacks. NetBSD 8.0 also includes USB3 support and the ability to work with ZFS storage volumes.

                                • Early impressions
                                • Since I had set up NetBSD with a Full install and enabled xdm during the setup process, the operating system booted to a graphical login screen. From here we can sign into our account. The login screen does not provide options to shut down or restart the computer. Logging into our account brings up the twm window manager and provides a virtual terminal, courtesy of xterm. There is a panel that provides a method for logging out of the window manager. The twm environment is sparse, fast and devoid of distractions.

                                  • Software management
                                  • NetBSD ships with a fairly standard collection of command line tools and manual pages, but otherwise it is a fairly minimal platform. If we want to run network services, have access to a web browser, or use a word processor we are going to need to install more software. There are two main approaches to installing new packages. The first, and easier approach, is to use the pkgin package manager. The pkgin utility works much the same way APT or DNF work in the Linux world, or as pkg works on FreeBSD. We can search for software by name, install or remove items. I found pkgin worked well, though its output can be terse. My only complaint with pkgin is that it does not handle “close enough” package names. For example, if I tried to run “pkgin install vlc” or “pkgin install firefox” I would quickly be told these items did not exist. But a more forgiving package manager will realize items like vlc2 or firefox45 are available and offer to install those.

                                    The pkgin tool installs new programs in the /usr/pkg/bin directory. Depending on your configuration and shell, this location may not be in your user’s path, and it will be helpful to adjust your PATH variable accordingly.
                                    The other common approach to acquiring new software is to use the pkgsrc framework. I have talked about using pkgsrc before and I will skip the details. Basically, we can download a collection of recipes for building popular open source software and run a command to download and install these items from their source code. Using pkgsrc basically gives us the same software as using pkgin would, but with some added flexibility on the options we use.
                                    Once new software has been installed, it may need to be enabled and activated, particularly if it uses (or is) a background service. New items can be enabled in the /etc/rc.conf file and started or stopped using the service command. This works about the same as the service command on FreeBSD and most non-systemd Linux distributions.

                                    • Hardware
                                    • I found that, when logged into the twm environment, NetBSD used about 130MB of RAM. This included kernel memory and all active memory. A fresh, Full install used up 1.5GB of disk space. I generally found NetBSD ran well in both VirtualBox and on my desktop computer. The system was quick and stable. I did have trouble getting a higher screen resolution in both environments. NetBSD does not offer VirtualBox add-on modules. There are NetBSD patches for VirtualBox out there, but there is some manual work involved in getting them working. When running on my desktop computer I think the resolution issue was one of finding and dealing with the correct video driver. Screen resolution aside, NetBSD performed well and detected all my hardware.

                                      • Personal projects
                                      • Since NetBSD provides users with a small, core operating system without many utilities if we want to use NetBSD for something we need to have a project in mind. I had four mini projects in mind I wanted to try this week: install a desktop environment, enable file sharing for computers on the local network, test multimedia (video, audio and YouTube capabilities), and set up a ZFS volume for storage.

                                        I began with the desktop. Specifically, I followed the same tutorial I used three years ago to try to set up the Xfce desktop. While Xfce and its supporting services installed, I was unable to get a working desktop out of the experience. I could get the Xfce window manager working, but not the entire session. This tutorial worked beautifully with NetBSD 7.0, but not with version 8.0. Undeterred, I switched gears and installed Fluxbox instead. This gave me a slightly more powerful graphical environment than what I had before with twm while maintaining performance. Fluxbox ran without any problems, though its application menu was automatically populated with many programs which were not actually installed.
                                        Next, I tried installing a few multimedia applications to play audio and video files. Here I ran into a couple of interesting problems. I found the music players I installed would play audio files, but the audio was quite slow. It always sounded like a cassette tape dragging. When I tried to play a video, the entire graphical session would crash, taking me back to the login screen. When I installed Firefox, I found I could play YouTube videos, and the video played smoothly, but again the audio was unusually slow.
                                        I set up two methods of sharing files on the local network: OpenSSH and FTP. NetBSD basically gives us OpenSSH for free at install time and I added an FTP server through the pkgin package manager which worked beautifully with its default configuration.
                                        I experimented with ZFS support a little, just enough to confirm I could create and access ZFS volumes. ZFS seems to work on NetBSD just as well, and with the same basic features, as it does on FreeBSD and mainstream Linux distributions. I think this is a good feature for the portable operating system to have since it means we can stick NetBSD on nearly any networked computer and use it as a NAS.

                                        • Conclusions
                                        • NetBSD, like its close cousins (FreeBSD and OpenBSD) does not do a lot of hand holding or automation. It offers a foundation that will run on most CPUs and we can choose to build on that foundation. I mention this because, on its own, NetBSD does not do much. If we want to get something out of it, we need to be willing to build on its foundation - we need a project. This is important to keep in mind as I think going into NetBSD and thinking, “Oh I’ll just explore around and expand on this as I go,” will likely lead to disappointment. I recommend figuring out what you want to do before installing NetBSD and making sure the required tools are available in the operating system’s repositories.

                                          Some of the projects I embarked on this week (using ZFS and setting up file sharing) worked well. Others, like getting multimedia support and a full-featured desktop, did not. Given more time, I’m sure I could find a suitable desktop to install (along with the required documentation to get it and its services running), or customize one based on one of the available window managers. However, any full featured desktop is going to require some manual work. Media support was not great. The right players and codecs were there, but I was not able to get audio to play smoothly.
                                          My main complaint with NetBSD relates to my struggle to get some features working to my satisfaction: the documentation is scattered. There are four different sections of the project’s website for documentation (FAQs, The Guide, manual pages and the wiki). Whatever we are looking for is likely to be in one of those, but which one? Or, just as likely, the tutorial we want is not there, but is on a forum or blog somewhere. I found that the documentation provided was often thin, more of a quick reference to remind people how something works rather than a full explanation.
                                          As an example, I found a couple of documents relating to setting up a firewall. One dealt with networking NetBSD on a LAN, another explored IPv6 support, but neither gave an overview on syntax or a basic guide to blocking all but one or two ports. It seemed like that information should already be known, or picked up elsewhere.
                                          Newcomers are likely to be a bit confused by software management guides for the same reason. Some pages refer to using a tool called pkg_add, others use pkgsrc and its make utility, others mention pkgin. Ultimately, these tools each give approximately the same result, but work differently and yet are mentioned almost interchangeably. I have used NetBSD before a few times and could stumble through these guides, but new users are likely to come away confused.
                                          One quirk of NetBSD, which may be a security feature or an inconvenience, depending on one’s point of view, is super user programs are not included in regular users’ paths. This means we need to change our path if we want to be able to run programs typically used by root. For example, shutdown and mount are not in regular users’ paths by default. This made checking some things tricky for me.
                                          Ultimately though, NetBSD is not famous for its convenience or features so much as its flexibility. The operating system will run on virtually any processor and should work almost identically across multiple platforms. That gives NetBSD users a good deal of consistency across a range of hardware and the chance to experiment with a member of the Unix family on hardware that might not be compatible with Linux or the other BSDs.

                                          ###Showing a Gigabit OpenBSD Firewall Some Monitoring Love

                                          I have a pretty long history of running my home servers or firewalls on “exotic” hardware. At first, it was Sun Microsystem hardware, then it moved to the excellent Soekris line, with some cool single board computers thrown in the mix. Recently I’ve been running OpenBSD Octeon on the Ubiquiti Edge Router Lite, an amazing little piece of kit at an amazing price point.

                                          • Upgrade Time!
                                          • This setup has served me for some time and I’ve been extremely happy with it. But, in the #firstworldproblems category, I recently upgraded the household to the amazing Gigabit fibre offering from Sonic. A great problem to have, but also too much of a problem for the little Edge Router Lite (ERL).

                                            The way the OpenBSD PF firewall works, it’s only able to process packets on a single core. Not a problem for the dual-core 500 MHz ERL when you’re pushing under ~200 Mbps, but more of a problem when you’re trying to push 1000 Mbps.
                                            I needed something that was faster on a per core basis but still satisfied my usual firewall requirements. Loosely:

                                            • small form factor
                                            • fan-less
                                            • multiple Intel Ethernet ports (good driver support)
                                            • low power consumption
                                            • not your regular off-the-shelf kit
                                            • relatively inexpensive
                                            • After evaluating a LOT of different options I settled on the Protectli Vault FW2B. With the specs required for the firewall (2 GB RAM and 8 GB drive) it comes in at a mere $239 USD! Installation of OpenBSD 6.4 was pretty straight forward, with the only problem I had was Etcher did not want to recognize the ‘.fs’ extension on the install image as bootable image. I quickly fixed this with good old Unix dd(1) on the Mac. Everything else was incredibly smooth.

                                              After loading the same rulesets on my new install, the results were fantastic!

                                              • Monitoring
                                              • Now that the machine was up and running (and fast!), I wanted to know what it was doing. Over the years, I’ve always relied on the venerable pfstat software to give me an overview of my traffic, blocked packets, etc. It looks like this:

                                                As you can see it’s based on RRDtool, which was simply incredible in its time. Having worked on monitoring almost continuously for almost the past decade, I wanted to see if we could re-implement the same functionality using more modern tools as RRDtool and pfstat definitely have their limitations. This might be an opportunity to learn some new things as well.
                                                I came across pf-graphite which seemed to be a great start! He had everything I needed and I added a few more stats from the detailed interface statistics and the ability for the code to exit for running from cron(8), which is a bit more OpenBSD style. I added code for sending to some SaaS metrics platforms but ultimately stuck with straight Graphite. One important thing to note was to use the Graphite pickle port (2004) instead of the default plaintext port for submission. Also you will need to set a loginterface in your ‘pf.conf’.
                                                A bit of tweaking with Graphite and Grafana, and I had a pretty darn good recreation of my original PF stats dashboard!
                                                As you can see it’s based on RRDtool, which was simply incredible in its time. Having worked on monitoring almost continuously for almost the past decade, I wanted to see if we could re-implement the same functionality using more modern tools as RRDtool and pfstat definitely have their limitations. This might be an opportunity to learn some new things as well.
                                                I came across pf-graphite which seemed to be a great start! He had everything I needed and I added a few more stats from the detailed interface statistics and the ability for the code to exit for running from cron(8), which is a bit more OpenBSD style. I added code for sending to some SaaS metrics platforms but ultimately stuck with straight Graphite. One important thing to note was to use the Graphite pickle port (2004) instead of the default plaintext port for submission. Also you will need to set a loginterface in your ‘pf.conf’.
                                                A bit of tweaking with Graphite and Grafana, and I had a pretty darn good recreation of my original PF stats dashboard!

                                                ###The Source History of Cat

                                                I once had a debate with members of my extended family about whether a computer science degree is a degree worth pursuing. I was in college at the time and trying to decide whether I should major in computer science. My aunt and a cousin of mine believed that I shouldn’t. They conceded that knowing how to program is of course a useful and lucrative thing, but they argued that the field of computer science advances so quickly that everything I learned would almost immediately be outdated. Better to pick up programming on the side and instead major in a field like economics or physics where the basic principles would be applicable throughout my lifetime.

                                                I knew that my aunt and cousin were wrong and decided to major in computer science. (Sorry, aunt and cousin!) It is easy to see why the average person might believe that a field like computer science, or a profession like software engineering, completely reinvents itself every few years. We had personal computers, then the web, then phones, then machine learning… technology is always changing, so surely all the underlying principles and techniques change too. Of course, the amazing thing is how little actually changes. Most people, I’m sure, would be stunned to know just how old some of the important software on their computer really is. I’m not talking about flashy application software, admittedly—my copy of Firefox, the program I probably use the most on my computer, is not even two weeks old. But, if you pull up the manual page for something like grep, you will see that it has not been updated since 2010 (at least on MacOS). And the original version of grep was written in 1974, which in the computing world was back when dinosaurs roamed Silicon Valley. People (and programs) still depend on grep every day.
                                                My aunt and cousin thought of computer technology as a series of increasingly elaborate sand castles supplanting one another after each high tide clears the beach. The reality, at least in many areas, is that we steadily accumulate programs that have solved problems. We might have to occasionally modify these programs to avoid software rot, but otherwise they can be left alone. grep is a simple program that solves a still-relevant problem, so it survives. Most application programming is done at a very high level, atop a pyramid of much older code solving much older problems. The ideas and concepts of 30 or 40 years ago, far from being obsolete today, have in many cases been embodied in software that you can still find installed on your laptop.
                                                I thought it would be interesting to take a look at one such old program and see how much it had changed since it was first written. cat is maybe the simplest of all the Unix utilities, so I’m going to use it as my example. Ken Thompson wrote the original implementation of cat in 1969. If I were to tell somebody that I have a program on my computer from 1969, would that be accurate? How much has cat really evolved over the decades? How old is the software on our computers?
                                                Thanks to repositories like this one, we can see exactly how cat has evolved since 1969. I’m going to focus on implementations of cat that are ancestors of the implementation I have on my Macbook. You will see, as we trace cat from the first versions of Unix down to the cat in MacOS today, that the program has been rewritten more times than you might expect—but it ultimately works more or less the same way it did fifty years ago.

                                                • Research Unix
                                                • Ken Thompson and Dennis Ritchie began writing Unix on a PDP 7. This was in 1969, before C, so all of the early Unix software was written in PDP 7 assembly. The exact flavor of assembly they used was unique to Unix, since Ken Thompson wrote his own assembler that added some features on top of the assembler provided by DEC, the PDP 7’s manufacturer. Thompson’s changes are all documented in the original Unix Programmer’s Manual under the entry for as, the assembler.

                                                  The first implementation of cat is thus in PDP 7 assembly. I’ve added comments that try to explain what each instruction is doing, but the program is still difficult to follow unless you understand some of the extensions Thompson made while writing his assembler. There are two important ones. First, the ; character can be used to separate multiple statements on the same line. It appears that this was used most often to put system call arguments on the same line as the sys instruction. Second, Thompson added support for “temporary labels” using the digits 0 through 9. These are labels that can be reused throughout a program, thus being, according to the Unix Programmer’s Manual, “less taxing both on the imagination of the programmer and on the symbol space of the assembler.” From any given instruction, you can refer to the next or most recent temporary label n using nf and nb respectively. For example, if you have some code in a block labeled 1:, you can jump back to that block from further down by using the instruction jmp 1b. (But you cannot jump forward to that block from above without using jmp 1f instead.)
                                                  The most interesting thing about this first version of cat is that it contains two names we should recognize. There is a block of instructions labeled getc and a block of instructions labeled putc, demonstrating that these names are older than the C standard library. The first version of cat actually contained implementations of both functions. The implementations buffered input so that reads and writes were not done a character at a time.
                                                  The first version of cat did not last long. Ken Thompson and Dennis Ritchie were able to persuade Bell Labs to buy them a PDP 11 so that they could continue to expand and improve Unix. The PDP 11 had a different instruction set, so cat had to be rewritten. I’ve marked up this second version of cat with comments as well. It uses new assembler mnemonics for the new instruction set and takes advantage of the PDP 11’s various addressing modes. (If you are confused by the parentheses and dollar signs in the source code, those are used to indicate different addressing modes.) But it also leverages the ; character and temporary labels just like the first version of cat, meaning that these features must have been retained when as was adapted for the PDP 11.
                                                  The second version of cat is significantly simpler than the first. It is also more “Unix-y” in that it doesn’t just expect a list of filename arguments—it will, when given no arguments, read from stdin, which is what cat still does today. You can also give this version of cat an argument of - to indicate that it should read from stdin.
                                                  In 1973, in preparation for the release of the Fourth Edition of Unix, much of Unix was rewritten in C. But cat does not seem to have been rewritten in C until a while after that. The first C implementation of cat only shows up in the Seventh Edition of Unix. This implementation is really fun to look through because it is so simple. Of all the implementations to follow, this one most resembles the idealized cat used as a pedagogic demonstration in K&R C. The heart of the program is the classic two-liner:

                                                  while ((c = getc(fi)) != EOF)

                                                  putchar(c);

                                                  There is of course quite a bit more code than that, but the extra code is mostly there to ensure that you aren’t reading and writing to the same file. The other interesting thing to note is that this implementation of cat only recognized one flag, -u. The -u flag could be used to avoid buffering input and output, which cat would otherwise do in blocks of 512 bytes.

                                                  • BSD
                                                  • After the Seventh Edition, Unix spawned all sorts of derivatives and offshoots. MacOS is built on top of Darwin, which in turn is derived from the Berkeley Software Distribution (BSD), so BSD is the Unix offshoot we are most interested in. BSD was originally just a collection of useful programs and add-ons for Unix, but it eventually became a complete operating system. BSD seems to have relied on the original cat implementation up until the fourth BSD release, known as 4BSD, when support was added for a whole slew of new flags. The 4BSD implementation of cat is clearly derived from the original implementation, though it adds a new function to implement the behavior triggered by the new flags. The naming conventions already used in the file were adhered to—the fflg variable, used to mark whether input was being read from stdin or a file, was joined by nflg, bflg, vflg, sflg, eflg, and tflg, all there to record whether or not each new flag was supplied in the invocation of the program. These were the last command-line flags added to cat; the man page for cat today lists these flags and no others, at least on Mac OS. 4BSD was released in 1980, so this set of flags is 38 years old.

                                                    cat would be entirely rewritten a final time for BSD Net/2, which was, among other things, an attempt to avoid licensing issues by replacing all AT&T Unix-derived code with new code. BSD Net/2 was released in 1991. This final rewrite of cat was done by Kevin Fall, who graduated from Berkeley in 1988 and spent the next year working as a staff member at the Computer Systems Research Group (CSRG). Fall told me that a list of Unix utilities still implemented using AT&T code was put up on a wall at CSRG and staff were told to pick the utilities they wanted to reimplement. Fall picked cat and mknod. The cat implementation bundled with MacOS today is built from a source file that still bears his name at the very top. His version of cat, even though it is a relatively trivial program, is today used by millions.
                                                    Fall’s original implementation of cat is much longer than anything we have seen so far. Other than support for a -? help flag, it adds nothing in the way of new functionality. Conceptually, it is very similar to the 4BSD implementation. It is only longer because Fall separates the implementation into a “raw” mode and a “cooked” mode. The “raw” mode is cat classic; it prints a file character for character. The “cooked” mode is cat with all the 4BSD command-line options. The distinction makes sense but it also pads out the implementation so that it seems more complex at first glance than it actually is. There is also a fancy error handling function at the end of the file that further adds to its length.

                                                    • MacOS
                                                    • The very first release of Mac OS X thus includes an implementation of cat pulled from the NetBSD project. So the first Mac OS X implementation of cat is Kevin Fall’s cat. The only thing that had changed over the intervening decade was that Fall’s error-handling function err() was removed and the err() function made available by err.h was used in its place. err.h is a BSD extension to the C standard library.

                                                      The NetBSD implementation of cat was later swapped out for FreeBSD’s implementation of cat. According to Wikipedia, Apple began using FreeBSD instead of NetBSD in Mac OS X 10.3 (Panther). But the Mac OS X implementation of cat, according to Apple’s own open source releases, was not replaced until Mac OS X 10.5 (Leopard) was released in 2007. The FreeBSD implementation that Apple swapped in for the Leopard release is the same implementation on Apple computers today. As of 2018, the implementation has not been updated or changed at all since 2007.
                                                      So the Mac OS cat is old. As it happens, it is actually two years older than its 2007 appearance in MacOS X would suggest. This 2005 change, which is visible in FreeBSD’s Github mirror, was the last change made to FreeBSD’s cat before Apple pulled it into Mac OS X. So the Mac OS X cat implementation, which has not been kept in sync with FreeBSD’s cat implementation, is officially 13 years old. There’s a larger debate to be had about how much software can change before it really counts as the same software; in this case, the source file has not changed at all since 2005.
                                                      The cat implementation used by Mac OS today is not that different from the implementation that Fall wrote for the 1991 BSD Net/2 release. The biggest difference is that a whole new function was added to provide Unix domain socket support. At some point, a FreeBSD developer also seems to have decided that Fall’s raw_args() function and cook_args() should be combined into a single function called scanfiles(). Otherwise, the heart of the program is still Fall’s code.
                                                      I asked Fall how he felt about having written the cat implementation now used by millions of Apple users, either directly or indirectly through some program that relies on cat being present. Fall, who is now a consultant and a co-author of the most recent editions of TCP/IP Illustrated, says that he is surprised when people get such a thrill out of learning about his work on cat. Fall has had a long career in computing and has worked on many high-profile projects, but it seems that many people still get most excited about the six months of work he put into rewriting cat in 1989.

                                                      • The Hundred-Year-Old Program
                                                      • In the grand scheme of things, computers are not an old invention. We’re used to hundred-year-old photographs or even hundred-year-old camera footage. But computer programs are in a different category—they’re high-tech and new. At least, they are now. As the computing industry matures, will we someday find ourselves using programs that approach the hundred-year-old mark?

                                                        Computer hardware will presumably change enough that we won’t be able to take an executable compiled today and run it on hardware a century from now. Perhaps advances in programming language design will also mean that nobody will understand C in the future and cat will have long since been rewritten in another language. (Though C has already been around for fifty years, and it doesn’t look like it is about to be replaced any time soon.) But barring all that, why not just keep using the cat we have forever?
                                                        I think the history of cat shows that some ideas in computer science are in fact very durable. Indeed, with cat, both the idea and the program itself are old. It may not be accurate to say that the cat on my computer is from 1969. But I could make a case for saying that the cat on my computer is from 1989, when Fall wrote his implementation of cat. Lots of other software is just as ancient. So maybe we shouldn’t think of computer science and software development primarily as fields that disrupt the status quo and invent new things. Our computer systems are built out of historical artifacts. At some point, we may all spend more time trying to understand and maintain those historical artifacts than we spend writing new code.

                                                        ##News Roundup

                                                        ###Trivial Bug in X.Org Gives Root Permission on Linux and BSD Systems

                                                        A vulnerability that is trivial to exploit allows privilege escalation to root level on Linux and BSD distributions using X.Org server, the open source implementation of the X Window System that offers the graphical environment.

                                                        The flaw is now identified as CVE-2018-14665 (credited to security researcher Narendra Shinde). It has been present in xorg-server for two years, since version 1.19.0 and is exploitable by a limited user as long as the X server runs with elevated permissions.

                                                        • Privilege escalation and arbitrary file overwrite
                                                        • An advisory on Thursday describes the problem as an “incorrect command-line parameter validation” that also allows an attacker to overwrite arbitrary files.

                                                          Privilege escalation can be accomplished via the -modulepath argument by setting an insecure path to modules loaded by the X.org server. Arbitrary file overwrite is possible through the -logfile argument, because of improper verification when parsing the option.

                                                          • Bug could have been avoided in OpenBSD 6.4
                                                          • OpenBSD, the free and open-source operating system with a strong focus on security, uses xorg. On October 18, the project released version 6.4 of the OS, affected by CVE-2018-14665. This could have been avoided, though.

                                                            Theo de Raadt, founder and leader of the OpenBSD project, says that X maintainer knew about the problem since at least October 11. For some reason, the OpenBSD developers received the message one hour before the public announcement this Thursday, a week after their new OS release.
                                                            “As yet we don’t have answers about why our X maintainer (on the X security team) and his team provided information to other projects (some who don’t even ship with this new X server) but chose to not give us a heads-up which could have saved all the new 6.4 users a lot of grief,” Raadt says.
                                                            Had OpenBSD developers known about the bug before the release, they could have taken steps to mitigate the problem or delay the launch for a week or two.
                                                            To remedy the problem, the OpenBSD project provides a source code patch, which requires compiling and rebuilding the X server.
                                                            As a temporary solution, users can disable the Xorg binary by running the following command:

                                                            chmod u-s /usr/X11R6/bin/Xorg

                                                            • Trivial exploitation
                                                            • CVE-2018-14665 does not help compromise systems, but it is useful in the following stages of an attack.

                                                              Leveraging it after gaining access to a vulnerable machine is fairly easy. Matthew Hickey, co-founder, and head of Hacker House security outfit created and published an exploit, saying that it can be triggered from a remote SSH session.
                                                              Three hours after the public announcement of the security gap, Daemon Security CEO Michael Shirk replied with one line that overwrote shadow files on the system. Hickey did one better and fit the entire local privilege escalation exploit in one line.
                                                              Apart from OpenBSD, other operating systems affected by the bug include Debian and Ubuntu, Fedora and its downstream distro Red Hat Enterprise Linux along with its community-supported counterpart CentOS.

                                                              ###OpenBSD on the Desktop: some thoughts

                                                              I’ve been using OpenBSD on my ThinkPad X230 for some weeks now, and the experience has been peculiar in some ways.

                                                              The OS itself in my opinion is not ready for widespread desktop usage, and the development team is not trying to push it in the throat of anybody who wants a Windows or macOS alternative.
                                                              You need to understand a little bit of how *NIX systems work, because you’ll use CLI more than UI.
                                                              That’s not necessarily bad, and I’m sure I learned a trick or two that could translate easily to Linux or macOS.
                                                              Their development process is purely based on developers that love to contribute and hack around, just because it’s fun.
                                                              Even the mailing list is a cool place to hang on!
                                                              Code correctness and security are a must, nothing gets committed if it doesn’t get reviewed thoroughly first - nowadays the first two properties should be enforced in every major operating system.
                                                              I like the idea of a platform that continually evolves.
                                                              pledge(2) and unveil(2) are the proof that with a little effort, you can secure existing software better than ever.
                                                              I like the “sensible defaults” approach, having an OS ready to be used - UI included if you selected it during the setup process - is great.
                                                              Just install a browser and you’re ready to go.
                                                              Manual pages on OpenBSD are real manuals, not an extension of the “–help” command found in most CLI softwares.
                                                              They help you understand inner workings of the operating system, no internet connection needed.
                                                              There are some trade-offs, too.
                                                              Performance is not first-class, mostly because of all the security mitigations and checks done at runtime3.
                                                              I write Go code in neovim, and sometimes you can feel a slight slowdown when you’re compiling and editing multiple files at the same time, but usually I can’t notice any meaningful difference.
                                                              Browsers are a different matter though, you can definitely feel something differs from the experience you can have on mainstream operating systems.
                                                              But again, trade-offs.
                                                              To use OpenBSD on the desktop you must be ready to sacrifice some of the goodies of mainstream OSes, but if you’re searching for a zen place to do your computing stuff, it’s the best you can get right now.

                                                              ###Review: NomadBSD 1.1

                                                              One of the most recent additions to the DistroWatch database is NomadBSD. According to the NomadBSD website: “NomadBSD is a 64-bit live system for USB flash drives, based on FreeBSD. Together with automatic hardware detection and setup, it is configured to be used as a desktop system that works out of the box, but can also be used for data recovery.”

                                                              The latest release of NomadBSD (or simply “Nomad”, as I will refer to the project in this review) is version 1.1. It is based on FreeBSD 11.2 and is offered in two builds, one for generic personal computers and one for Macbooks. The release announcement mentions version 1.1 offers improved video driver support for Intel and AMD cards. The operating system ships with Octopkg for graphical package management and the system should automatically detect, and work with, VirtualBox environments.
                                                              Nomad 1.1 is available as a 2GB download, which we then decompress to produce a 4GB file which can be written to a USB thumb drive. There is no optical media build of Nomad as it is designed to be run entirely from the USB drive, and write data persistently to the drive, rather than simply being installed from the USB media.

                                                              • Initial setup
                                                              • Booting from the USB drive brings up a series of text-based menus which ask us to configure key parts of the operating system. We are asked to select our time zone, keyboard layout, keyboard model, keyboard mapping and our preferred language. While we can select options from a list, the options tend to be short and cryptic. Rather than “English (US)”, for example, we might be given “en_US”. We are also asked to create a password for the root user account and another one for a regular user which is called “nomad”. We can then select which shell nomad will use. The default is zsh, but there are plenty of other options, including csh and bash. We have the option of encrypting our user’s home directory.

                                                                I feel it is important to point out that these settings, and nomad’s home directory, are stored on the USB drive. The options and settings we select will not be saved to our local hard drive and our configuration choices will not affect other operating systems already installed on our computer. At the end, the configuration wizard asks if we want to run the BSDstats service. This option is not explained at all, but it contacts BSDstats to provide some basic statistics on BSD users.
                                                                The system then takes a few minutes to apply its changes to the USB drive and automatically reboots the computer. While running the initial setup wizard, I had nearly identical experiences when running Nomad on a physical computer and running the operating system in a VirtualBox virtual machine. However, after the initial setup process was over, I had quite different experiences depending on the environment so I want to divide my experiences into two different sections.

                                                                • Physical desktop computer
                                                                • At first, Nomad failed to boot on my desktop computer. From the operating system’s boot loader, I enabled Safe Mode which allowed Nomad to boot. At that point, Nomad was able to start up, but would only display a text console. The desktop environment failed to start when running in Safe Mode.

                                                                  Networking was also disabled by default and I had to enable a network interface and DHCP address assignment to connect to the Internet. Instructions for enabling networking can be found in FreeBSD’s Handbook. Once we are on-line we can use the pkg command line package manager to install and update software. Had the desktop environment worked then the Octopkg graphical package manager would also be available to make browsing and installing software a point-n-click experience.
                                                                  Had I been able to run the desktop for prolonged amounts of time I could have made use of such pre-installed items as the Firefox web browser, the VLC media player, LibreOffice and Thunderbird. Nomad offers a fairly small collection of desktop applications, but what is there is mostly popular, capable software.
                                                                  When running the operating system I noted that, with one user logged in, Nomad only runs 15 processes with the default configuration. These processes require less than 100MB of RAM, and the whole system fits comfortably on a 4GB USB drive.

                                                                  • Conclusions
                                                                  • Ultimately using Nomad was not a practical option for me. The operating system did not work well with my hardware, or the virtual environment. In the virtual machine, Nomad crashed consistently after just a few minutes of uptime. On the desktop computer, I could not get a desktop environment to run. The command line tools worked well, and the system performed tasks very quickly, but a command line only environment is not well suited to my workflow.

                                                                    I like the idea of what NomadBSD is offering. There are not many live desktop flavours of FreeBSD, apart from GhostBSD. It was nice to see developers trying to make a FreeBSD-based, plug-and-go operating system that would offer a desktop and persistent storage. I suspect the system would work and perform its stated functions on different hardware, but in my case my experiment was necessarily short lived.

                                                                    ##Beastie Bits

                                                                    • FreeBSD lockless algorithm - seq
                                                                    • Happy Bob’s Libtls tutorial
                                                                    • Locking OpenBSD when it’s sleeping
                                                                    • iio - The OpenBSD Way
                                                                    • Installing Hugo and Hosting Website on OpenBSD Server
                                                                    • Fosdem 2019 reminder: BSD devroom CfP
                                                                    • OpenBGPD, gotta go fast! - Claudio Jeker
                                                                    • Project Trident RC3 available
                                                                    • FreeBSD 10.4 EOL
                                                                    • Play “Crazy Train” through your APU2 speaker
                                                                    • ##Feedback/Questions

                                                                      • Tobias - Satisfying my storage hunger and wallet pains
                                                                      • Lasse - Question regarding FreeBSD backups
                                                                        • https://twitter.com/dlangille
                                                                        • https://dan.langille.org/


                                                                          • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                          • 1 hr 15 min
                                                                          • Episode 272: Detain the bhyve | BSD Now 272

                                                                            Byproducts of reading OpenBSD’s netcat code, learnings from porting your own projects to FreeBSD, OpenBSD’s unveil(), NetBSD’s Virtual Machine Monitor, what 'dependency' means in Unix init systems, jailing bhyve, and more.

                                                                            ##Headlines
                                                                            ###The byproducts of reading OpenBSD netcat code

                                                                            When I took part in a training last year, I heard about netcat for the first time. During that class, the tutor showed some hacks and tricks of using netcat which appealed to me and motivated me to learn the guts of it. Fortunately, in the past 2 months, I was not so busy that I can spend my spare time to dive into OpenBSD‘s netcat source code, and got abundant byproducts during this process.
                                                                            (1) Brush up socket programming. I wrote my first network application more than 10 years ago, and always think the socket APIs are marvelous. Just ~10 functions (socket, bind, listen, accept…) with some IO multiplexing buddies (select, poll, epoll…) connect the whole world, wonderful! From that time, I developed a habit that is when touching a new programming language, network programming is an essential exercise. Even though I don’t write socket related code now, reading netcat socket code indeed refresh my knowledge and teach me new stuff.
                                                                            (2) Write a tutorial about netcat. I am mediocre programmer and will forget things when I don’t use it for a long time. So I just take notes of what I think is useful. IMHO, this “tutorial” doesn’t really mean teach others something, but just a journal which I can refer when I need in the future.
                                                                            (3) Submit patches to netcat. During reading code, I also found bugs and some enhancements. Though trivial contributions to OpenBSD, I am still happy and enjoy it.
                                                                            (4) Implement a C++ encapsulation of libtls. OpenBSD‘s netcat supports tls/ssl connection, but it needs you take full care of resource management (memory, socket, etc), otherwise a small mistake can lead to resource leak which is fatal for long-live applications (In fact, the two bugs I reported to OpenBSD are all related resource leak). Therefore I develop a simple C++ library which wraps the libtls and hope it can free developer from this troublesome problem and put more energy in application logic part.
                                                                            Long story to short, reading classical source code is a rewarding process, and you can consider to try it yourself.

                                                                            ###What I learned from porting my projects to FreeBSD

                                                                            • Introduction

                                                                            I set up a local FreeBSD VirtualBox VM to test something, and it seems to work very well. Due to the novelty factor, I decided to get my software projects to build and pass the tests there.

                                                                            • The Projects

                                                                            • https://github.com/shlomif/shlomif-computer-settings/ (my dotfiles).

                                                                            • https://web-cpan.shlomifish.org/latemp/

                                                                            • https://fc-solve.shlomifish.org/

                                                                            • https://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/

                                                                            • https://better-scm.shlomifish.org/source/

                                                                            • http://perl-begin.org/source/

                                                                            • https://www.shlomifish.org/meta/site-source/

                                                                            • Written using a mix of C, Perl 5, Python, Ruby, GNU Bash, XML, CMake, XSLT, XHTML5, XHTML1.1, Website META Language, JavaScript and more.

                                                                            • Work fine on several Linux distributions and have https://en.wikipedia.org/wiki/Travis_CI using Ubuntu 14.04 hosts

                                                                            • Some pass builds and tests on AppVeyor/Win64

                                                                            • What I Learned:

                                                                            • FreeBSD on VBox has become very reliable

                                                                            • Some executables on FreeBSD are in /usr/local/bin instead of /usr/bin

                                                                            • make on FreeBSD is not GNU make

                                                                            • m4 on FreeBSD is not compatible with GNU m4

                                                                            • Some CPAN Modules fail to install using local-lib there

                                                                            • DocBook/XSL Does Not Live Under /usr/share/sgml

                                                                            • FreeBSD’s grep does not have a “-P” flag by default

                                                                            • FreeBSD has no “nproc” command

                                                                            • Conclusion:

                                                                            • It is easier to port a shell than a shell script. — Larry Wall

                                                                            • I ran into some cases where my scriptology was lacking and suboptimal, even for my own personal use, and fixed them.

                                                                            ##News Roundup
                                                                            ###OpenBSD’s unveil()

                                                                            One of the key aspects of hardening the user-space side of an operating system is to provide mechanisms for restricting which parts of the filesystem hierarchy a given process can access. Linux has a number of mechanisms of varying capability and complexity for this purpose, but other kernels have taken a different approach. Over the last few months, OpenBSD has inaugurated a new system call named unveil() for this type of hardening that differs significantly from the mechanisms found in Linux.
                                                                            The value of restricting access to the filesystem, from a security point of view, is fairly obvious. A compromised process cannot exfiltrate data that it cannot read, and it cannot corrupt files that it cannot write. Preventing unwanted access is, of course, the purpose of the permissions bits attached to every file, but permissions fall short in an important way: just because a particular user has access to a given file does not necessarily imply that every program run by that user should also have access to that file. There is no reason why your PDF viewer should be able to read your SSH keys, for example. Relying on just the permission bits makes it easy for a compromised process to access files that have nothing to do with that process’s actual job.
                                                                            In a Linux system, there are many ways of trying to restrict that access; that is one of the purposes behind the Linux security module (LSM) architecture, for example. The SELinux LSM uses a complex matrix of labels and roles to make access-control decisions. The AppArmor LSM, instead, uses a relatively simple table of permissible pathnames associated with each application; that approach was highly controversial when AppArmor was first merged, and is still looked down upon by some security developers. Mount namespaces can be used to create a special view of the filesystem hierarchy for a set of processes, rendering much of that hierarchy invisible and, thus, inaccessible. The seccomp mechanism can be used to make decisions on attempts by a process to access files, but that approach is complex and error-prone. Yet another approach can be seen in the Qubes OS distribution, which runs applications in virtual machines to strictly control what they can access.
                                                                            Compared to many of the options found in Linux, unveil() is an exercise in simplicity. This system call, introduced in July, has this prototype:

                                                                            int unveil(const char *path, const char *permissions);

                                                                            A process that has never called unveil() has full access to the filesystem hierarchy, modulo the usual file permissions and any restrictions that may have been applied by calling pledge(). Calling unveil() for the first time will “drop a veil” across the entire filesystem, rendering the whole thing invisible to the process, with one exception: the file or directory hierarchy starting at path will be accessible with the given permissions. The permissions string can contain any of “r” for read access, “w” for write, “x” for execute, and “c” for the ability to create or remove the path.
                                                                            Subsequent calls to unveil() will make other parts of the filesystem hierarchy accessible; the unveil() system call itself still has access to the entire hierarchy, so there is no problem with unveiling distinct subtrees that are, until the call is made, invisible to the process. If one unveil() call applies to a subtree of a hierarchy unveiled by another call, the permissions associated with the more specific call apply.
                                                                            Calling unveil() with both arguments as null will block any further calls, setting the current view of the filesystem in stone. Calls to unveil() can also be blocked using pledge(). Either way, once the view of the filesystem has been set up appropriately, it is possible to lock it so that the process cannot expand its access in the future should it be taken over and turn hostile.
                                                                            unveil() thus looks a bit like AppArmor, in that it is a path-based mechanism for restricting access to files. In either case, one must first study the program in question to gain a solid understanding of which files it needs to access before closing things down, or the program is likely to break. One significant difference (beyond the other sorts of behavior that AppArmor can control) is that AppArmor’s permissions are stored in an external policy file, while unveil() calls are made by the application itself. That approach keeps the access rules tightly tied to the application and easy for the developers to modify, but it also makes it harder for system administrators to change them without having to rebuild the application from source.
                                                                            One can certainly aim a number of criticisms at unveil() — all of the complaints that have been leveled at path-based access control and more. But the simplicity of unveil() brings a certain kind of utility, as can be seen in the large number of OpenBSD applications that are being modified to use it. OpenBSD is gaining a base level of protection against unintended program behavior; while it is arguably possible to protect a Linux system to a much greater extent, the complexity of the mechanisms involved keeps that from happening in a lot of real-world deployments. There is a certain kind of virtue to simplicity in security mechanisms.

                                                                            ###NetBSD Virtual Machine Monitor (NVVM)

                                                                            • NetBSD Virtual Machine Monitor

                                                                            The NVMM driver provides hardware-accelerated virtualization support on NetBSD. It is made of an ~MI frontend, to which MD backends can be plugged. A virtualization API is provided in libnvmm, that allows to easily create and manage virtual machines via NVMM. Two additional components are shipped as demonstrators, toyvirt and smallkern: the former is a toy virtualizer, that executes in a VM the 64bit ELF binary given as argument, the latter is an example of such binary.

                                                                            • Download

                                                                            The source code of NVMM, plus the associated tools, can be downloaded here.

                                                                            • Technical details

                                                                            NVMM can support up to 128 virtual machines, each having a maximum of 256 VCPUs and 4GB of RAM.
                                                                            Each virtual machine is granted access to most of the CPU registers: the GPRs (obviously), the Segment Registers, the Control Registers, the Debug Registers, the FPU (x87 and SSE), and several MSRs.
                                                                            Events can be injected in the virtual machines, to emulate device interrupts. A delay mechanism is used, and allows VMM software to schedule the interrupt right when the VCPU can receive it. NMIs can be injected as well, and use a similar mechanism.
                                                                            The host must always be x86_64, but the guest has no constraint on the mode, so it can be x86_32, PAE, real mode, and so on.
                                                                            The TSC of each VCPU is always re-based on the host CPU it is executing on, and is therefore guaranteed to increase regardless of the host CPU. However, it may not increase monotonically, because it is not possible to fully hide the host effects on the guest during #VMEXITs.
                                                                            When there are more VCPUs than the host TLB can deal with, NVMM uses a shared ASID, and flushes the shared-ASID VCPUs on each VM switch.
                                                                            The different intercepts are configured in such a way that they cover everything that needs to be emulated. In particular, the LAPIC can be emulated by VMM software, by intercepting reads/writes to the LAPIC page in memory, and monitoring changes to CR8 in the exit state.

                                                                            ###What ‘dependency’ means in Unix init systems is underspecified (utoronto.ca)

                                                                            I was reading Davin McCall’s On the vagaries of init systems (via) when I ran across the following, about the relationship between various daemons (services, etc):
                                                                            I do not see any compelling reason for having ordering relationships without actual dependency, as both Nosh and Systemd provide for. In comparison, Dinit’s dependencies also imply an ordering, which obviates the need to list a dependency twice in the service description.
                                                                            Well, this may be an easy one but it depends on what an init system means by ‘dependency’. Let’s consider ®syslog and the SSH daemon. I want the syslog daemon to be started before the SSH daemon is started, so that the SSH daemon can log things to it from the beginning. However, I very much do not want the SSH daemon to not be started (or to be shut down) if the syslog daemon fails to start or later fails. If syslog fails, I still want the SSH daemon to be there so that I can perhaps SSH in to the machine and fix the problem.
                                                                            This is generally true of almost all daemons; I want them to start after syslog, so that they can syslog things, but I almost never want them to not be running if syslog failed. (And if for some reason syslog is not configured to start, I want enabling and starting, say, SSH, to also enable and start the syslog daemon.)
                                                                            In general, there are three different relationships between services that I tend to encounter:

                                                                            • a hard requirement, where service B is useless or dangerous without service A. For instance, many NFS v2 and NFS v3 daemons basically don’t function without the RPC portmapper alive and active. On any number of systems, firewall rules being in place are a hard requirement to start most network services; you would rather your network services not start at all than that they start without your defenses in place.

                                                                            • a want, where service B wants service A to be running before B starts up, and service A should be started even if it wouldn’t otherwise be, but the failure of A still leaves B functional. Many daemons want the syslog daemon to be started before they start but will run without it, and often you want them to do so so that at least some of the system works even if there is, say, a corrupt syslog configuration file that causes the daemon to error out on start. (But some environments want to hard-fail if they can’t collect security related logging information, so they might make rsyslogd a requirement instead of a want.)

                                                                            • an ordering, where if service A is going to be started, B wants to start after it (or before it), but B isn’t otherwise calling for A to be started. We have some of these in our systems, where we need NFS mounts done before cron starts and runs people’s @reboot jobs but neither cron nor NFS mounts exactly or explicitly want each other. (The system as a whole wants both, but that’s a different thing.)

                                                                            Given these different relationships and the implications for what the init system should do in different situations, talking about ‘dependency’ in it systems is kind of underspecified. What sort of dependency? What happens if one service doesn’t start or fails later?
                                                                            My impression is that generally people pick a want relationship as the default meaning for init system ‘dependency’. Usually this is fine; most services aren’t actively dangerous if one of their declared dependencies fails to start, and it’s generally harmless on any particular system to force a want instead of an ordering relationship because you’re going to be starting everything anyway.

                                                                            • (In my example, you might as well say that cron on the systems in question wants NFS mounts. There is no difference in practice; we already always want to do NFS mounts and start cron.)

                                                                            ###Jailing The bhyve Hypervisor

                                                                            As FreeBSD nears the final 12.0-RELEASE release engineering cycles, I’d like to take a moment to document a cool new feature coming in 12: jailed bhyve.
                                                                            You may notice that I use HardenedBSD instead of FreeBSD in this article. There is no functional difference in bhyve on HardenedBSD versus bhyve on FreeBSD. The only difference between HardenedBSD and FreeBSD is the aditional security offered by HardenedBSD.
                                                                            The steps I outline here work for both FreeBSD and HardenedBSD. These are the bare minimum steps, no extra work needed for either FreeBSD or HardenedBSD.

                                                                            • A Gentle History Lesson

                                                                            At work in my spare time, I’m helping develop a malware lab. Due to the nature of the beast, we would like to use bhyve on HardenedBSD. Starting with HardenedBSD 12, non-Cross-DSO CFI, SafeStack, Capsicum, ASLR, and strict WX are all applied to bhyve, making it an extremely hardened hypervisor.
                                                                            So, the work to support jailed bhyve is sponsored by both HardenedBSD and my employer. We’ve also jointly worked on other bhyve hardening features, like protecting the VM’s address space using guard pages (mmap(…, MAP_GUARD, …)). Further work is being done in a project called “malhyve.” Only those modifications to bhyve/malhyve that make sense to upstream will be upstreamed.

                                                                            • Initial Setup

                                                                            We will not go through the process of creating the jail’s filesystem. That process is documented in the FreeBSD Handbook. For UEFI guests, you will need to install the uefi-edk2-bhyve package inside the jail.
                                                                            I network these jails with traditional jail networking. I have tested vnet jails with this setup, and that works fine, too. However, there is no real need to hook the jail up to any network so long as bhyve can access the tap device. In some cases, the VM might not need networking, in which case you can use a network-less VM in a network-less jail.
                                                                            By default, access to the kernel side of bhyve is disabled within jails. We need to set allow.vmm in our jail.conf entry for the bhyve jail.

                                                                            • We will use the following in our jail, so we will need to set up devfs(8) rules for them:

                                                                            • A ZFS volume

                                                                            • A null-modem device (nmdm(4))

                                                                            • UEFI GOP (no devfs rule, but IP assigned to the jail)

                                                                            • A tap device

                                                                            • Conclusion

                                                                            The bhyve hypervisor works great within a jail. When combined with HardenedBSD, bhyve is extremely hardened:

                                                                            • PaX ASLR is fully applied due to compilation as a Position-Independent Executable (HardenedBSD enhancement)
                                                                            • PaX NOEXEC is fully applied (strict WX) (HardenedBSD enhancement)
                                                                            • Non-Cross-DSO CFI is fully applied (HardenedBSD enhancement)
                                                                            • Full RELRO (RELRO + BIND_NOW) is fully applied (HardenedBSD enhancement)
                                                                            • SafeStack is applied to the application (HardenedBSD enhancement)
                                                                            • Jailed (FreeBSD feature written by HardenedBSD)
                                                                            • Virtual memory protected with guard pages (FreeBSD feature written by HardenedBSD)
                                                                            • Capsicum is fully applied (FreeBSD feature)

                                                                            Bad guys are going to have a hard time breaking out of the userland components of bhyve on HardenedBSD. :)

                                                                            ##Beastie Bits

                                                                            • GhostBSD 18.10 has been released
                                                                            • Project Trident RC3 has been released
                                                                            • The OpenBSD Foundation receives the first Silver contribution from a single individual
                                                                            • Monitoring pf logs gource
                                                                            • NetBSD on the RISC-V is alive
                                                                            • The X hole
                                                                            • Announcing the pkgsrc-2018Q3 release (2018-10-05)
                                                                            • NAT performance on EdgeRouter X and Lite with EdgeOS, OpenBSD, and OpenWRT
                                                                            • UNIX (as we know it) might not have existed without Mrs. Thompson
                                                                            • Free Pizza for your dev events
                                                                            • Portland BSD Pizza Night: Nov 29th 7pm

                                                                            ##Feedback/Questions

                                                                            • Dennis - Core developers leaving illumOS?
                                                                            • Ben - Jumping from snapshot to snapshot
                                                                            • Ias - Question about ZFS snapshots
                                                                            • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                            1 hr 9 min
                                                                          • Episode 271: Automatic Drive Tests | BSD Now 271

                                                                            MidnightBSD 1.0 released, MeetBSD review, EuroBSDcon trip reports, DNS over TLS in FreeBSD 12, Upgrading OpenBSD with Ansible, how to use smartd to run tests on your drives automatically, and more.

                                                                            ##Headlines

                                                                            ###MidnightBSD 1.0 now available

                                                                            I’m happy to announce the availability of MidnightBSD 1.0 for amd64 and i386. Over the years, many ambitious goals were set for our 1.0 release. As it approached, it was clear we wouldn’t be able to accomplish all of them. This release is more of a natural progression rather than a groundbreaking event. It includes many updates to the base system, improvements to the package manager, an updated compiler, and tools.

                                                                            Of particular note, you can now boot off of ZFS and use NVME SSDs and some AMD Radeon graphics cards support acceleration. AMD Ryzen support has greatly improved in this release. We also have added bhyve from FreeBSD.
                                                                            The 1.0 release is finally available. Still building packages for i386 and plan to do an amd64 package build later in the week. The single largest issue with the release process has been the web server performance. The CPU is overloaded and has been at solid 100% for several days. The server has a core i7 7700 in it. I’m trying to figure out what to buy as an upgrade so that we don’t continue to have this issue going forward. As it’s actually blocked in multiple processes, a 6 or 8 core chip might be an improvement for the workload…

                                                                            • Download links: https://www.midnightbsd.org/download/
                                                                            • https://www.youtube.com/watch?time_continue=33&v=-rlk2wFsjJ4
                                                                            • ###MeetBSD Review

                                                                              MeetBSD 2018 took place at the sprawling Intel Santa Clara campus. The venue itself felt more like an olive branch than a simple friendly gesture by Intel. In truth it felt like a bit of an apology. You get the subtle sense they feel bad about how the BSD’s were treated with the Meltdown and Specter flaws. In fact, you may be right to think they felt a bit sorry towards the entire open source community.

                                                                              • MeetBSD 2018
                                                                              • At most massive venues the parking is the first concern, not so here - in fact that was rather straightforward. No, the real challenge is navigating the buildings. Luckily I had help from navigator extraordinaire, Hadea, who located the correct building, SC12 quickly. Finding the entrance took a moment or two though. The lobby itself was converted by iXsystems efficiently into the MeetBSD expo hall, clean, efficient and roomy with registration, some seating, and an extra conference room for on-on-one sessions. On day two sponsor booths were also setup. All who showed up on day one were warmly greeted with badges, lanyards and goodies by Denise and her friendly team.

                                                                                Like every great BSD event, plenty of food was made available. And as always they make it look effortless. These events showcase iXsystem’s inherent generosity toward its community; with breakfast items in the back of the main auditorium room in the morning, boxed lunches, fruit and cookies at lunch time, and snacks for the rest of the day. But just in case your still hungry, there is a pizza meetup in another Intel room after day one and two.
                                                                                MeetBSD leverages it’s realistically small crowd size on day one. The morning starts off with introductions of the entire group, the mic is passed around the room.
                                                                                The group is a good mix of pros in the industry (such as Juniper, Intel, Ebay, Groupon, Cisco, etc), iX staff, and a few enthusiast. Lots of people with a focus or passion for networking. And, of course, some friendly Linux bashing went down for good measure, always followed by a good natured chuckle.

                                                                                • MeetBSD Gives me The Feels
                                                                                • I find that I am subtly unnerved at this venue, and at lunch I saw it clearly. I have always had a strong geek radar, allowing me to navigate a new area (like Berkeley for MeetBSD of 2016, or even SCALE earlier this year in Pasadena), and in a glance I can see who is from my conference and who isn’t. This means it is easy, nearly effortless to know who to greet with a smile and a wave. These are MY people. Here at the Intel campus though it is different. The drive in alone reveals behemoth complexes all with well known tech names prominently displayed. This is Silicon Valley, and all of these people look like MY people. So much for knowing who’s from my conference. Thank goodness for those infamous BSD horns. None-the-less I am struck by how massive these tech giants are. And Intel is one of the largest of those giants, and see the physical reminders of this fact brought home the significance that they had opened their doors, wifi, and bathrooms to the BSD community.

                                                                                  ###[EuroBSDcon 2018 Trip Reports]

                                                                                  https://www.freebsdfoundation.org/blog/eurobsd-2018-trip-report-joseph-mingrone/
                                                                                  https://www.freebsdfoundation.org/blog/eurobsd-2018-trip-report-vinicius-zavam/
                                                                                  https://www.freebsdfoundation.org/blog/eurobsd-2018-trip-report-emmanuel-vadot/

                                                                                  ##News Roundup

                                                                                  ###DNS over TLS in FreeBSD 12

                                                                                  With the arrival of OpenSSL 1.1.1, an upgraded Unbound, and some changes to the setup and init scripts, FreeBSD 12.0, currently in beta, now supports DNS over TLS out of the box.

                                                                                  DNS over TLS is just what it sounds like: DNS over TCP, but wrapped in a TLS session. It encrypts your requests and the server’s replies, and optionally allows you to verify the identity of the server. The advantages are protection against eavesdropping and manipulation of your DNS traffic; the drawbacks are a slight performance degradation and potential firewall traversal issues, as it runs over a non-standard port (TCP port 853) which may be blocked on some networks. Let’s take a look at how to set it up.

                                                                                  • Conclusion
                                                                                  • We’ve seen how to set up Unbound—specifically, the local_unbound service in FreeBSD 12.0—to use DNS over TLS instead of plain UDP or TCP, using Cloudflare’s public DNS service as an example. We’ve looked at the performance impact, and at how to ensure (and verify) that Unbound validates the server certificate to prevent man-in-the-middle attacks.

                                                                                    The question that remains is whether it is all worth it. There is undeniably a performance hit, though this may improve with TLS 1.3. More importantly, there are currently very few DNS-over-TLS providers—only one, really, since Quad9 filter their responses—and you have to weigh the advantage of encrypting your DNS traffic against the disadvantage of sending it all to a single organization. I can’t answer that question for you, but I can tell you that the parameters are evolving quickly, and if your answer is negative today, it may not remain so for long. More providers will appear. Performance will improve with TLS 1.3 and QUIC. Within a year or two, running DNS over TLS may very well become the rule rather than the experimental exception.

                                                                                    ###Upgrading OpenBSD with Ansible

                                                                                    • My router runs OpenBSD -current
                                                                                    • A few months ago, I needed software that had just hit the ports tree. I didn’t want to wait for the next release, so I upgraded my router to use -current. Since then, I’ve continued running -current, which means upgrading to a newer snapshot every so often. Running -current is great, but the process of updating to a newer snapshot was cumbersome. Initially, I had to plug in a serial cable and then reboot into bsd.rd, hit enter ten times, then reboot, run sysmerge and update packages.

                                                                                      I eventually switched to upobsd to be able to upgrade without the need for a serial connection. The process was better, but still tiresome. Usually, I would prepare the special version of bsd.rd, boot on bsd.rd, and do something like wash the dishes in the meantime. After about ten minutes, I would dry my hands and then go back to my workstation to see whether the bsd.rd part had finished so I could run sysmerge and pkg_add, and then return to the dishes while it upgraded packages.
                                                                                      Out of laziness, I thought: “I should automate this,” but what happened instead is that I simply didn’t upgrade that machine very often. (Yes, laziness). With my router out of commission, life is very dull, because it is my gateway to the Internet. Even services hosted at my place (like my Mastodon instance) are not reachable when the router is down because I use multiple VLANs (so I need the router to jump across VLANs).

                                                                                      • Ansible Reboot Module
                                                                                      • I recently got a new job, and one of my first tasks was auditing the Ansible roles written by my predecessors. In one role, the machine rebooted and they used the wait_for_connection module to wait for it to come back up. That sounded quite hackish to me, so out of curiosity, I tried to determine whether there was a better way. I also thought I might be able to use something similar to further automate my OpenBSD upgrades, and wanted to assess the cleanliness of this method. ;-)

                                                                                        I learned that with the then-upcoming 2.7 Ansible release, a proper reboot module would be included. I went to the docs, which stated that for a certain parameter:
                                                                                        I took this to mean that there was no support for OpenBSD. I looked at the code and, indeed, there was not. However, I believed that it wouldn’t be too hard to add it. I added the missing pieces for OpenBSD, tested it on my poor Pine64 and then submitted it upstream. After a quick back and forth, the module’s author merged it into devel (having a friend working at Red Hat helped the process, merci Cyril !) A couple days later, the release engineer merged it into stable-2.7.
                                                                                        I proceeded to actually write the playbook, and then I hit a bug. The parameter reboot_timeout was not recognized by Ansible. This feature would definitely be useful on a slow machine (such as the Pine64 and its dying SD card). Again, my fix was merged into master by the module’s author and then merged into stable-2.7. 2.7.1 will be the first release to feature these fixes, but if you use OpenBSD -current, you already have access to them. I backported the patches when I updated ansible.
                                                                                        Fun fact about Ansible and reboots: “The win_reboot module was […] included with Ansible 2.1,” while for unix systems it wasn’t added until 2.7. :D For more details, you can read the module’s author blog article.

                                                                                        • The explanations
                                                                                        • Ansible runs my script on the remote host to fetch the sets. It creates an answer file from the template and then gives it to upobsd. Once upobsd has created the kernel, Ansible copies it in place of /bsd on the host. The router reboots and boots on /bsd, which is upobsd’s bsd.rd. The installer runs in auto_update mode. Once it comes back from bsd.rd land, it archives the kernel and finishes by upgrading all the packages.

                                                                                          It also supports upgrading without fetching the sets ahead of time. For instance, I upgrade this way on my Pine64 because if I cared about speed, I wouldn’t use this weak computer with its dying SD card. For this case, I just comment out the path_sets variable and Ansible instead creates an answer file that will instruct the installer to fetch the sets from the designated mirror.
                                                                                          I’ve been archiving my kernels for a few years. It’s a nice way to fill up / keep a history of my upgrades. If I spot a regression, I can try a previous kernel … which may not work with the then-desynchronized userland, but that’s another story.
                                                                                          sysmerge already runs with rc.sysmerge in batch mode and sends the result by email. I don’t think there’s merit to running it again in the playbook. The only perk would be discovering in the terminal whether any files need to be manually merged, rather than reading exactly the same output in the email.
                                                                                          Initially, I used the openbsd_pkg module, but it doesn’t work on -current just before a release because pkg_add automatically looks for pub/OpenBSD/${release}/packages/${arch} (which is empty). I wrote and tested this playbook while 6.4 was around the corner, so I switched to command to be able to pass the -Dsnap parameter.

                                                                                          • The result
                                                                                          • I’m very happy with the playbook! It performs the upgrade with as little intervention as possible and minimal downtime. \o/

                                                                                            ###Using smartd to automatically run tests on your drives

                                                                                            Those programs can “control and monitor storage systems using the Self-Monitoring, Analysis and Reporting Technology System (SMART) built into most modern ATA/SATA, SCSI/SAS and NVMe disks. In many cases, these utilities will provide advanced warning of disk degradation and failure.” See the smartmontools website for more information.

                                                                                            NOTE: “Due to OS-specific issues and also depending on the different state of smartmontools development on the platforms, device support is not the same for all OS platforms.” – use the documentation for your OS.

                                                                                            I first started using smartd in March 2010 (according to that blog post, that’s when I still writing on both The FreeBSD Diary and this blog). Back then, and until recently, all I did was start smartd. As far as I can tell, all it did was send daily status messages via the FreeBSD periodic tools. I would set my drive devices via daily_status_smart_devices in /etc/periodic.conf and the daily status reports would include drive health information.

                                                                                            • Two types of tests
                                                                                            • My original abandoned attempt
                                                                                            • How do you prove it works?
                                                                                            • Looking at the test results
                                                                                            • Failed drive to the rescue
                                                                                            • smartd.conf I am using
                                                                                            • supernews
                                                                                            • ##Beastie Bits

                                                                                              • Decent Pics of “Relayd & Httpd Mastery” signature
                                                                                              • A Unix Shell poster from 1983
                                                                                              • Cambridge UNIX historians (Cambridge, United Kingdom)
                                                                                              • Goals for FreeBSD 13
                                                                                              • September/October 2018 Issue of the FreeBSD Journal Now Available
                                                                                              • Using acme.sh for Let’s Encrypt certificates on pkgsrc.org servers
                                                                                              • Deploying Anycast DNS Using OpenBSD and BGP
                                                                                              • How to check your data integrity?
                                                                                              • ##Feedback/Questions

                                                                                                • Raymond - MeetBSD California
                                                                                                  • Dev Summit Videos: https://www.youtube.com/playlist?list=PLb87fdKUIo8TNG6f94xo9_W-XXrEbqgWI
                                                                                                  • Conference Videos: https://www.youtube.com/playlist?list=PLb87fdKUIo8Q41aoPE6vssP-uF4dxk86b
                                                                                                  • Conference videos are still being processed, the rest should appear over the next few weeks.

                                                                                                  • Greg - Stable vs Release

                                                                                                  • Mjrodriguez - Open/FreeBSD support for Single Board computers


                                                                                                    • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                                                    • 1 hr 9 min
                                                                                                    • Episode 270: Ghostly Releases | BSD Now 270

                                                                                                      OpenBSD 6.4 released, GhostBSD RC2 released, MeetBSD - the ultimate hallway track, DragonflyBSD desktop on a Thinkpad, Porting keybase to NetBSD, OpenSSH 7.9, and draft-ietf-6man-ipv6only-flag in FreeBSD.

                                                                                                      ##Headlines

                                                                                                      ###OpenBSD 6.4 released

                                                                                                      • See a detailed log of changes between the 6.3 and 6.4 releases.
                                                                                                      • See the information on the FTP page for a list of mirror machines.
                                                                                                      • Have a look at the 6.4 errata page for a list of bugs and workarounds.
                                                                                                      • signify(1) pubkeys for this release:
                                                                                                      • base: RWQq6XmS4eDAcQW4KsT5Ka0KwTQp2JMOP9V/DR4HTVOL5Bc0D7LeuPwA
                                                                                                      • fw: RWRoBbjnosJ/39llpve1XaNIrrQND4knG+jSBeIUYU8x4WNkxz6a2K97
                                                                                                      • pkg: RWRF5TTY+LoN/51QD5kM2hKDtMTzycQBBPmPYhyQEb1+4pff/H6fh/kA
                                                                                                      • ###GhostBSD 18.10 RC2 Announced

                                                                                                        This second release candidate of GhostBSD 18.10 is the second official release of GhostBSD with TrueOS under the hood. The official desktop of GhostBSD is MATE. However, in the future, there might be an XFCE community release, but for now, there is no community release yet.

                                                                                                        • What has changed since RC1

                                                                                                        • Removed drm-stable-kmod and we will let users installed the propper drm-*-kmod

                                                                                                        • Douglas Joachin added libva-intel-driver libva-vdpau-driver to supports accelerated some video driver for Intel

                                                                                                        • Issues that got fixed

                                                                                                        • Bug #70 Cannot run Octopi, missing libgksu error.

                                                                                                        • Bug #71 LibreOffice doesn’t start because of missing libcurl.so.4

                                                                                                        • Bug #72 libarchive is a missing dependency

                                                                                                          Again thanks to iXsystems, TrueOS, Joe Maloney, Kris Moore, Ken Moore, Martin Wilke, Neville Goddard, Vester “Vic” Thacker, Douglas Joachim, Alex Lyakhov, Yetkin Degirmenci and many more who helped to make the transition from FreeBSD to TrueOS smoother.

                                                                                                          • Updating from RC1 to RC2:

                                                                                                          • sudo pkg update -f

                                                                                                          • sudo pkg install -f libarchive curl libgksu

                                                                                                          • sudo pkg upgrade

                                                                                                          • Where to download:

                                                                                                          • All images checksum, hybrid ISO(DVD, USB) and torrent are available here: https://www.ghostbsd.org/download

                                                                                                          • [ScreenShots]

                                                                                                          • https://www.ghostbsd.org/sites/default/files/Screenshot_at_2018-10-20_13-22-41.png

                                                                                                          • https://www.ghostbsd.org/sites/default/files/Screenshot_at_2018-10-20_13-27-26.png

                                                                                                            ###OpenSSH 7.9 has been released and it has support for OpenSSL 1.1

                                                                                                            Changes since OpenSSH 7.8
                                                                                                            =========================
                                                                                                            This is primarily a bugfix release.
                                                                                                            New Features
                                                                                                            ------------
                                                                                                            * ssh(1), sshd(8): allow most port numbers to be specified using
                                                                                                            service names from getservbyname(3) (typically /etc/services).
                                                                                                            * ssh(1): allow the IdentityAgent configuration directive to accept
                                                                                                            environment variable names. This supports the use of multiple
                                                                                                            agent sockets without needing to use fixed paths.
                                                                                                            * sshd(8): support signalling sessions via the SSH protocol.
                                                                                                            A limited subset of signals is supported and only for login or
                                                                                                            command sessions (i.e. not subsystems) that were not subject to
                                                                                                            a forced command via authorized_keys or sshd_config. bz#1424
                                                                                                            * ssh(1): support "ssh -Q sig" to list supported signature options.
                                                                                                            Also "ssh -Q help" to show the full set of supported queries.
                                                                                                            * ssh(1), sshd(8): add a CASignatureAlgorithms option for the
                                                                                                            client and server configs to allow control over which signature
                                                                                                            formats are allowed for CAs to sign certificates. For example,
                                                                                                            this allows banning CAs that sign certificates using the RSA-SHA1
                                                                                                            signature algorithm.
                                                                                                            * sshd(8), ssh-keygen(1): allow key revocation lists (KRLs) to
                                                                                                            revoke keys specified by SHA256 hash.
                                                                                                            * ssh-keygen(1): allow creation of key revocation lists directly
                                                                                                            from base64-encoded SHA256 fingerprints. This supports revoking
                                                                                                            keys using only the information contained in sshd(8)
                                                                                                            authentication log messages.
                                                                                                            Bugfixes
                                                                                                            --------
                                                                                                            * ssh(1), ssh-keygen(1): avoid spurious "invalid format" errors when
                                                                                                            attempting to load PEM private keys while using an incorrect
                                                                                                            passphrase. bz#2901
                                                                                                            * sshd(8): when a channel closed message is received from a client,
                                                                                                            close the stderr file descriptor at the same time stdout is
                                                                                                            closed. This avoids stuck processes if they were waiting for
                                                                                                            stderr to close and were insensitive to stdin/out closing. bz#2863
                                                                                                            * ssh(1): allow ForwardX11Timeout=0 to disable the untrusted X11
                                                                                                            forwarding timeout and support X11 forwarding indefinitely.
                                                                                                            Previously the behaviour of ForwardX11Timeout=0 was undefined.
                                                                                                            * sshd(8): when compiled with GSSAPI support, cache supported method
                                                                                                            OIDs regardless of whether GSSAPI authentication is enabled in the
                                                                                                            main section of sshd_config. This avoids sandbox violations if
                                                                                                            GSSAPI authentication was later enabled in a Match block. bz#2107
                                                                                                            * sshd(8): do not fail closed when configured with a text key
                                                                                                            revocation list that contains a too-short key. bz#2897
                                                                                                            * ssh(1): treat connections with ProxyJump specified the same as
                                                                                                            ones with a ProxyCommand set with regards to hostname
                                                                                                            canonicalisation (i.e. don't try to canonicalise the hostname
                                                                                                            unless CanonicalizeHostname is set to 'always'). bz#2896
                                                                                                            * ssh(1): fix regression in OpenSSH 7.8 that could prevent public-
                                                                                                            key authentication using certificates hosted in a ssh-agent(1)
                                                                                                            or against sshd(8) from OpenSSH <7.8.
                                                                                                            Portability
                                                                                                            -----------
                                                                                                            * All: support building against the openssl-1.1 API (releases 1.1.0g
                                                                                                            and later). The openssl-1.0 API will remain supported at least
                                                                                                            until OpenSSL terminates security patch support for that API version.
                                                                                                            * sshd(8): allow the futex(2) syscall in the Linux seccomp sandbox;
                                                                                                            apparently required by some glibc/OpenSSL combinations.
                                                                                                            * sshd(8): handle getgrouplist(3) returning more than
                                                                                                            _SC_NGROUPS_MAX groups. Some platforms consider this limit more
                                                                                                            as a guideline.

                                                                                                            ##News Roundup

                                                                                                            ###MeetBSD 2018: The Ultimate Hallway Track

                                                                                                            Founded in Poland in 2007 and first hosted in California in 2008, MeetBSD combines formal talks with UnConference activities to provide a level of interactivity not found at any other BSD conference. The character of each MeetBSD is determined largely by its venue, ranging from Hacker Dojo in 2010 to Intel’s Santa Clara headquarters this year. The Intel SC12 building provided a beautiful auditorium and sponsors’ room, plus a cafeteria for the Friday night social event and the Saturday night FreeBSD 25th Anniversary Celebration. The formal nature of the auditorium motivated the formation of MeetBSD’s first independent Program Committee and public Call for Participation. Together these resulted in a backbone of talks presented by speakers from the USA, Canada, and Poland, combined with UnConference activities tailored to the space.

                                                                                                            • MeetBSD Day 0
                                                                                                            • Day Zero of MeetBSD was a FreeBSD Developer/Vendor Summit hosted in the same auditorium where the talks would take place. Like the conference itself, this event featured a mix of scheduled talks and interactive sessions. The scheduled talks were LWPMFS: LightWeight Persistent Memory Filesystem by Ravi Pokala, Evaluating GIT for FreeBSD by Ed Maste, and NUMA by Mark Johnston. Ed’s overview of the advantages and disadvantages of using Git for FreeBSD development was of the most interest to users and developers, and the discussion continued into the following two days.

                                                                                                              • MeetBSD Day 1
                                                                                                              • The first official day of MeetBSD 2018 was kicked off with introductions led by emcee JT Pennington and a keynote, “Using TrueOS to boot-strap your FreeBSD-based project” by Kris Moore. Kris described a new JSON-based release infrastructure that he has exercised with FreeBSD, TrueOS, and FreeNAS. Kris’ talk was followed by “Intel & FreeBSD: Better Together” by Ben Widawsky, the FreeBSD program lead at Intel, who gave an overview of Intel’s past and current efforts supporting FreeBSD. Next came lunch, followed by Kamil Rytarowski’s “Bug detecting software in the NetBSD userland: MKSANITIZER”. This was followed by 5-Minute Lightning Talks, Andrew Fengler’s “FreeBSD: What to (Not) Monitor”, and an OpenZFS Panel Discussion featuring OpenZFS experts Michael W. Lucas, Allan Jude, Alexander Motin, Pawel Dawidek, and Dan Langille. Day one concluded with a social event at the Intel cafeteria where the discussions continued into the night.

                                                                                                                • MeetBSD Day 2
                                                                                                                • Day Two of MeetBSD 2018 kicked off with a keynote by Michael W. Lucas entitled “Why BSD?”, where Michael detailed what makes the BSD community different and why it attracts us all. This was followed by Dr. Kirk McKusick’s “The Early Days of BSD” talk, which was followed by “DTrace/dwatch in Production” by Devin Teske. After lunch, we enjoyed “A Curmudgeon’s Language Selection Criteria: Why I Don’t Write Everything in Go, Rust, Elixir, etc” by G. Clifford Williams and, “Best practices of sandboxing applications with Capsicum” by Mariusz Zaborski. I then hosted a Virtualization Panel Discussion that featured eight developers from FreeBSD, OpenBSD, and NetBSD. We then split up for Breakout Sessions and the one on Bloomberg’s controversial article on backdoored Supermicro systems was fascinating given the experts present, all of whom were skeptical of the feasibility of the attack. The day wrapped up with a final talk, “Tales of a Daemontown Performance Peddler: Why ‘it depends’ and what you can do about it” by Nick Principe, followed by the FreeBSD 25th Anniversary Celebration.

                                                                                                                  • Putting the “meet” in MeetBSD
                                                                                                                  • I confess the other organizers and I were nervous about how well one large auditorium would suit a BSD event but the flexible personal space it gave everyone allowed for countless meetings and heated hacking that often brought about immediate results. I watched people take ideas through several iterations with the help and input of obvious and unexpected experts, all of whom were within reach. Not having to pick up and leave for a talk in another room organically resulted in essentially a series of mini hackathons that none of us anticipated but were delighted to witness, taking the “hallway track” to a whole new level. The mix of formal and UnConference activities at MeetBSD is certain to evolve. Thank you to everyone who participated with questions, Lightning Talks, and Panel participation. A huge thanks to our sponsors, including Intel for both hosting and sponsoring MeetBSD California 2018, Western Digital, Supermicro, Verisign, Jupiter Broadcasting, the FreeBSD Foundation, Bank of America Merrill Lynch, the NetBSD Foundation, and the team at iXsystems.

                                                                                                                    See you at MeetBSD 2020!

                                                                                                                    ###Setup DragonflyBSD with a desktop on real hardware ThinkPad T410

                                                                                                                    +Video Demo

                                                                                                                    Linux has become too mainstream and standard BSD is a common thing now? How about DragonflyBSD which was created as a fork of FreeBSD 4.8 in conflict over system internals. This tutorial will show how to install it and set up a user-oriented desktop. It should work with DragonflyBSD, FreeBSD and probably all BSDs.

                                                                                                                    Some background: BSD was is ultimately derived from UNIX back in the days. It is not Linux even though it is similar in many ways because Linux was designed to follow UNIX principles. Seeing is believing, so check out the video of the install!
                                                                                                                    I did try two BSD distros before called GhostBSD and TrueOS and you can check out my short reviews. DragonflyBSD comes like FreeBSD bare bones and requires some work to get a desktop running.

                                                                                                                    • Download image file and burn to USB drive or DVD

                                                                                                                    • First installation

                                                                                                                    • Setting up the system and installing a desktop

                                                                                                                    • Inside the desktop

                                                                                                                    • Install some more programs

                                                                                                                    • How to enable sound?

                                                                                                                    • Let’s play some free games

                                                                                                                    • Setup WiFi

                                                                                                                    • Power mode settings

                                                                                                                    • More to do?

                                                                                                                      You can check out this blog post if you want a much more detailed tutorial. If you don’t mind standard BSD, get the GhostBSD distro instead which comes with a ready-made desktop xcfe or mate and many functional presets.

                                                                                                                      • A small summary of what we got on the upside:

                                                                                                                        • Free and open source operating system with a long history
                                                                                                                        • Drivers worked fine including Ethernet, WiFi, video 2D & 3D, audio, etc
                                                                                                                        • Hammer2 advanced file system
                                                                                                                        • You are very unique if you use this OS fork

                                                                                                                        • Some downsides:


                                                                                                                        • Less driver and direct app support than Linux


                                                                                                                        • Installer and desktop have some traps and quirks and require work



                                                                                                                          ###Porting Keybase to NetBSD

                                                                                                                          Keybase significantly simplifies the whole keypair/PGP thing and makes what is usually a confusing, difficult experience actually rather pleasant. At its heart is an open-source command line utility that does all of the heavy cryptographic lifting. But it’s also hooked up to the network of all other Keybase users, so you don’t have to work very hard to maintain big keychains. Pretty cool!

                                                                                                                          So, this evening, I tried to get it to all work on NetBSD.
                                                                                                                          The Keybase client code base is, in my opinion, not very well architected… there exist many different Keybase clients (command line apps, desktop apps, mobile apps) and for some reason the code for all of them are seemingly in this single repository, without even using Git submodules. Not sure what that’s about.
                                                                                                                          Anyway, “go build”-ing the command line program (it’s written in Go) failed immediately because there’s some platform-specific code that just does not seem to recognize that NetBSD exists (but they do for FreeBSD and OpenBSD). Looks like the Keybase developers maintain a Golang wrapper around struct proc, which of course is different from OS to OS. So I literally just copypasted the OpenBSD wrapper, renamed it to “NetBSD”, and the build basically succeeded from there! This is of course super janky and untrustworthy, but it seems to Mostly Just Work…
                                                                                                                          I forked the GitHub repo, you can see the diff on top of keybase 2.7.3 here: bccaaf3096a
                                                                                                                          Eventually I ended up with a ~/go/bin/keybase which launches just fine. Meaning, I can main() okay. But the moment you try to do anything interesting, it looks super scary:

                                                                                                                          charlotte@sakuracity:~/go/bin ./keybase login
                                                                                                                          ▶ WARNING Running in devel mode
                                                                                                                          ▶ INFO Forking background server with pid=12932
                                                                                                                          ▶ ERROR unexpected error in Login: API network error: doRetry failed,
                                                                                                                          attempts: 1, timeout 5s, last err: Get
                                                                                                                          http://localhost:3000/_/api/1.0/merkle/path.json?last=3784314&load_deleted=1&load_reset_chain=1&poll=10&sig_hints_low=3&uid=38ae1dfa49cd6831ea2fdade5c5d0519:
                                                                                                                          dial tcp [::1]:3000: connect: connection refused

                                                                                                                          There’s a few things about this error message that stuck out to me:

                                                                                                                          • Forking a background server? What?
                                                                                                                          • It’s trying to connect to localhost? That must be the server that doesn’t work …
                                                                                                                          • Unfortunately, this nonfunctional “background server” sticks around even when a command as simple as ‘login’ command just failed:

                                                                                                                            charlotte@sakuracity:~/go/bin ps 12932
                                                                                                                            PID TTY STAT TIME COMMAND
                                                                                                                            12932 ? Ssl 0:00.21 ./keybase --debug --log-file
                                                                                                                            /home/charlotte/.cache/keybase.devel/keybase.service.log service --chdir
                                                                                                                            /home/charlotte/.config/keybase.devel --auto-forked

                                                                                                                            I’m not exactly sure what the intended purpose of the “background server” even is, but fortunately we can kill it and even tell the keybase command to not even spawn one:

                                                                                                                            charlotte@sakuracity:~/go/bin ./keybase help advanced | grep -- --standalone
                                                                                                                            --standalone Use the client without any daemon support.

                                                                                                                            And then we can fix wanting to connect to localhost by specifying an expected Keybase API server – how about the one hosted at https://keybase.io?

                                                                                                                            charlotte@sakuracity:~/go/bin ./keybase help advanced | grep -- --server
                                                                                                                            --server, -s Specify server API.

                                                                                                                            Basically, what I’m trying to say is that if you specify both of these options, the keybase command does what I expect on NetBSD:

                                                                                                                            charlotte@sakuracity:~/go/bin ./keybase --standalone -s https://keybase.io login
                                                                                                                            ▶ WARNING Running in devel mode
                                                                                                                            Please enter the Keybase passphrase for dressupgeekout (6+ characters):
                                                                                                                            charlotte@sakuracity:~/go/bin ./keybase --standalone -s https://keybase.io id dressupgeekout
                                                                                                                            ▶ WARNING Running in devel mode
                                                                                                                            ▶ INFO Identifying dressupgeekout
                                                                                                                            ✔ public key fingerprint: 7873 DA50 A786 9A3F 1662 3A17 20BD 8739 E82C 7F2F
                                                                                                                            ✔ "dressupgeekout" on github:
                                                                                                                            https://gist.github.com/0471c7918d254425835bf5e1b4bcda00 [cached 2018-10-11
                                                                                                                            20:55:21 PDT]
                                                                                                                            ✔ "dressupgeekout" on reddit:
                                                                                                                            https://www.reddit.com/r/KeybaseProofs/comments/9ng5qm/my_keybase_proof_redditdressupgeekout/
                                                                                                                            [cached 2018-10-11 20:55:21 PDT]

                                                                                                                            ###Initial implementation of draft-ietf-6man-ipv6only-flag

                                                                                                                            This change defines the RA "6" (IPv6-Only) flag which routers
                                                                                                                            may advertise, kernel logic to check if all routers on a link
                                                                                                                            have the flag set and accordingly update a per-interface flag.
                                                                                                                            If all routers agree that it is an IPv6-only link, ether_output_frame(),
                                                                                                                            based on the interface flag, will filter out all ETHERTYPE_IP/ARP
                                                                                                                            frames, drop them, and return EAFNOSUPPORT to upper layers.
                                                                                                                            The change also updates ndp to show the "6" flag, ifconfig to
                                                                                                                            display the IPV6_ONLY nd6 flag if set, and rtadvd to allow
                                                                                                                            announcing the flag.
                                                                                                                            Further changes to tcpdump (contrib code) are availble and will
                                                                                                                            be upstreamed.
                                                                                                                            Tested the code (slightly earlier version) with 2 FreeBSD
                                                                                                                            IPv6 routers, a FreeBSD laptop on ethernet as well as wifi,
                                                                                                                            and with Win10 and OSX clients (which did not fall over with
                                                                                                                            the "6" flag set but not understood).
                                                                                                                            We may also want to (a) implement and RX filter, and (b) over
                                                                                                                            time enahnce user space to, say, stop dhclient from running
                                                                                                                            when the interface flag is set. Also we might want to start
                                                                                                                            IPv6 before IPv4 in the future.
                                                                                                                            All the code is hidden under the EXPERIMENTAL option and not
                                                                                                                            compiled by default as the draft is a work-in-progress and
                                                                                                                            we cannot rely on the fact that IANA will assign the bits
                                                                                                                            as requested by the draft and hence they may change.
                                                                                                                            Dear 6man, you have running code.
                                                                                                                            Discussed with: Bob Hinden, Brian E Carpenter

                                                                                                                            ##Beastie Bits

                                                                                                                            • Running FreeBSD on macOS via xhyve
                                                                                                                            • Auction Winners
                                                                                                                            • OpenSSH Principals
                                                                                                                            • OpenBSD Foundation gets a second Iridium donation from Handshake
                                                                                                                            • NetBSD machines at Open Source Conference 2018 Kagawa
                                                                                                                            • Absolute FreeBSD now shipping!
                                                                                                                            • NextCloud on OpenBSD
                                                                                                                            • FreeBSD 12.0-BETA2 Available
                                                                                                                            • DTrace on Windows ported from FreeBSD
                                                                                                                            • HELBUG fall 2018 meeting scheduled - Thursday the 15th of November
                                                                                                                            • 35C3 pre-sale has started
                                                                                                                            • Stockholm BSD User Meeting: Tuesday Nov 13, 18:00 - 21:30
                                                                                                                            • Polish BSD User Group: Thursday Nov 15, 18:30 - 21:00
                                                                                                                            • ##Feedback/Questions

                                                                                                                              • Greg - Interview suggestion for the show
                                                                                                                              • Nelson - Ghostscript vulnerabilities
                                                                                                                              • Allison - Ports and GCC
                                                                                                                                • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                                                                                • 1 hr 10 min
                                                                                                                                • Episode 269: Tiny Daemon Lib | BSD Now 269

                                                                                                                                  FreeBSD Foundation September Update, tiny C lib for programming Unix daemons, EuroBSDcon trip reports, GhostBSD tested on real hardware, and a BSD auth module for duress.

                                                                                                                                  ##Headlines

                                                                                                                                  ###FreeBSD Foundation Update, September 2018

                                                                                                                                  • MESSAGE FROM THE EXECUTIVE DIRECTOR
                                                                                                                                  • Dear FreeBSD Community Member, It is hard to believe that September is over. The Foundation team had a busy month promoting FreeBSD all over the globe, bug fixing in preparation for 12.0, and setting plans in motion to kick off our 4th quarter fundraising and advocacy efforts. Take a minute to see what we’ve been up to and please consider making a donation to help us continue our efforts supporting FreeBSD!

                                                                                                                                    • September 2018 Development Projects Update
                                                                                                                                    • In preparation for the release of FreeBSD 12.0, I have been working on investigating and fixing a backlog of kernel bug reports. Of course, this kind of work is never finished, and we will continue to make progress after the release. In the past couple of months I have fixed a combination of long-standing issues and recent regressions. Of note are a pair of UNIX domain socket bugs which had been affecting various applications for years. In particular, Chromium tabs would frequently hang unless a workaround was manually applied to the system, and the bug had started affecting recent versions of Firefox as well. Fixing these issues gave me an opportunity to revisit and extend our regression testing for UNIX sockets, which, in turn, resulted in some related bugs being identified and fixed.

                                                                                                                                      Of late I have also been investigating reports of issues with ZFS, particularly, those reported on FreeBSD 11.2. A number of regressions, including a kernel memory leak and issues with ARC reclamation, have already been fixed for 12.0; investigation of other reports is ongoing. Those who closely follow FreeBSD-CURRENT know that some exciting work to improve memory usage on NUMA systems is now enabled by default. As is usually the case when new code is deployed in a diverse array of systems and workloads, a number of problems since have been identified. We are working on resolving them as soon as possible to ensure the quality of the release.
                                                                                                                                      I’m passionate about maintaining FreeBSD’s stability and dependability as it continues to expand and grow new features, and I’m grateful to the FreeBSD Foundation for sponsoring this work. We depend on users to report problems to the mailing lists and via the bug tracker, so please try running the 12.0 candidate builds and help us make 12.0 a great release.

                                                                                                                                      • Fundraising Update: Supporting the Project
                                                                                                                                      • It’s officially Fall here at Foundation headquarters and we’re heading full-steam into our final fundraising campaign of the year. We couldn’t even have begun to reach our funding goal of $1.25 million dollars without the support from the companies who have partnered with us this year. Thank you to Verisign for becoming a Silver Partner. They now join a growing list of companies like Xiplink, NetApp, Microsoft, Tarsnap, VMware, and NeoSmart Technologies that are stepping up and showing their commitment to FreeBSD!

                                                                                                                                        Funding from commercial users like these and individual users like yourself, help us continue our efforts of supporting critical areas of FreeBSD such as:

                                                                                                                                        • Operating System Improvements: Providing staff to immediately respond to urgent problems and implement new features and functionality allowing for the innovation and stability you’ve come to rely on.
                                                                                                                                        • Security: Providing engineering resources to bolster the capacity and responsiveness of the Security team providing your users with piece of mind when security issues arise.
                                                                                                                                        • Release Engineering: Continue providing a full-time release engineer, resulting in timely and reliable releases you can plan around.
                                                                                                                                        • Quality Assurance: Improving and increasing test coverage, continuous integration, and automated testing with a full-time software engineer to ensure you receive the highest quality, secure, and reliable operating system.
                                                                                                                                        • New User Experience: Improving the process and documentation for getting new people involved with FreeBSD, and supporting those people as they become integrated into the FreeBSD Community providing the resources you may need to get new folks up to speed.
                                                                                                                                        • Training: Supporting more FreeBSD training for undergraduates, graduates, and postgraduates. Growing the community means reaching people and catching their interest in systems software as early as possible and providing you with a bigger pool of candidates with the FreeBSD skills you’re looking for.
                                                                                                                                        • Face-to-Face Opportunities: Facilitating collaboration among members of the community, and building connections throughout the industry to support a healthy and growing ecosystem and make it easier for you to find resources when questions emerge .
                                                                                                                                        • We can continue the above work, if we meet our goal this year!

                                                                                                                                          If your company uses FreeBSD, please consider joining our growing list of 2018 partners. If you haven’t made your donation yet, please consider donating today. We are indebted to the individual donors, and companies listed above who have already shown their commitment to open source.
                                                                                                                                          Thank you for supporting FreeBSD and the Foundation!

                                                                                                                                          • September 2018 Release Engineering Update
                                                                                                                                          • The FreeBSD Release Engineering team continued working on the upcoming 12.0 RELEASE. At present, the 12.0 schedule had been adjusted by one week to allow for necessary works-in-progress to be completed.

                                                                                                                                            Of note, one of the works-in-progress includes updating OpenSSL from 1.0.2 to 1.1.1, in order to avoid breaking the application binary interface (ABI) on an established stable branch.
                                                                                                                                            Due to the level of non-trivial intrusiveness that had already been discovered and addressed in a project branch of the repository, it is possible (but not yet definite) that the schedule will need to be adjusted by another week to allow more time for larger and related updates for this particular update.
                                                                                                                                            Should the 12.0-RELEASE schedule need to be adjusted at any time during the release cycle, the schedule on the FreeBSD project website will be updated accordingly. The current schedule is available at:
                                                                                                                                            https://www.freebsd.org/releases/12.0R/schedule.html

                                                                                                                                            • BSDCam 2018 Trip Report: Marie Helene Kvello-Aune
                                                                                                                                            • I’d like to start by thanking the FreeBSD Foundation for sponsoring my trip to BSDCam(bridge) 2018. I wouldn’t have managed to attend otherwise. I’ve used FreeBSD in both personal and professional deployments since the year 2000, and over the last few years I have become more involved with development and documentation.

                                                                                                                                              I arrived in Gatwick, London at midnight. On Monday, August 13, I took the train to Cambridge, and decided to do some touristy activities as I walked from the train station to Churchill College. I ran into Allan outside the hotel right before the sky decided it was time for a heavy rainfall. Monday was mostly spent settling in, recouping after travel, and hanging out with Allan, Brad, Will and Andy later in the afternoon/evening. Read more…

                                                                                                                                              • Continuous Integration Update
                                                                                                                                              • The FreeBSD Foundation has sponsored the development of the Project’s continuous integration system, available at https://ci.FreeBSD.org, since June. Over the summer, we improved both the software and hardware infrastructure, and also added some new jobs for extending test coverage of the -CURRENT and -STABLE branches. Following are some highlights.

                                                                                                                                                • New Hardware
                                                                                                                                                • The Foundation purchased 4 new build machines for scaling up the computation power for the various test jobs. These newer, faster machines substantially speed up the time it takes to test amd64 builds, so that failing changes can be identified more quickly. Also, in August, we received a donation of 2 PINE A64-LTS boards from PINE64.org, which will be put in the hardware test lab as one part of the continuous tests.

                                                                                                                                                  • CI Staging Environment
                                                                                                                                                  • We used hardware from a previous generation CI system to build a staging environment for the CI infrastructure, which is available at

                                                                                                                                                    https://ci-dev.freebsd.org. It executes the configurations and scripts from the “staging” branch of the FreeBSD-CI repository, and the development feature branches. We also use it to experiment with the new version of the jenkins server and plugins. Having a staging environment avoids affecting the production CI environment, reducing downtime.

                                                                                                                                                    • Mail Notification
                                                                                                                                                    • In July, we turned on failure notification for all the kernel and world build jobs. Committers will receive email containing the build information and failure log to inform them of possible problems with their modification on certain architectures. For amd64 of the -CURRENT branch, we also enabled the notification on failing regression test cases. Currently mail is sent only to the individual committers, but with help from postmaster team, we have created a dev-ci mailing list and will soon be also sending notifications there.

                                                                                                                                                      • New Test Job
                                                                                                                                                      • In August, we updated the embedded script of the virtual machine image. Originally it only executed pre-defined tests, but now this behavior can be modified by the data on the attached disk. This mechanism is used for adding new ZFS tests jobs. We are also working on analyzing and fixing the failing and skipped test cases.

                                                                                                                                                        • Work in Progress
                                                                                                                                                        • In August and September, we had two developer summits, one in Cambridge, UK and one in Bucharest, Romania. In these meetings, we discussed running special tests, such as ztest, which need a longer run time. We also planned the network testing for TCP/IP stack

                                                                                                                                                          ###Daemonize - a Tiny C Library for Programming the UNIX Daemons

                                                                                                                                                          Whatever they say, writing System-V style UNIX daemons is hard. One has to follow many rules to make a daemon process behave correctly on diverse UNIX flavours. Moreover, debugging such a code might be somewhat tricky. On the other hand, the process of daemon initialisation is rigid and well defined so the corresponding code has to be written and debugged once and later can be reused countless number of times.

                                                                                                                                                          Developers of BSD UNIX were very aware of this, as there a C library function daemon() was available starting from version 4.4. The function, although non-standard, is present on many UNIXes. Unfortunately, it does not follow all the required steps to reliably run a process in the background on systems which follow System-V semantics (e.g. Linux). The details are available at the corresponding Linux man page. The main problem here, as I understand it, is that daemon() does not use the double-forking technique to avoid the situation when zombie processes appear.
                                                                                                                                                          Whenever I encounter a problem like this one, I know it is time to write a tiny C library which solves it. This is exactly how ‘daemonize’ was born (GitHub mirror). The library consists of only two files which are meant to be integrated into the source tree of your project. Recently I have updated the library and realised that it would be good to describe how to use it on this site.
                                                                                                                                                          If for some reason you want to make a Windows service, I have a battle tested template code for you as well.

                                                                                                                                                          • System-V Daemon Initialisation Procedure
                                                                                                                                                          • To make discussion clear we shall quote the steps which have to be performed during a daemon initialisation (according to daemon(7) manual page on Linux). I do it to demonstrate that this task is more tricky than one might expect.

                                                                                                                                                            • So, here we go:

                                                                                                                                                            • Close all open file descriptors except standard input, output, and error (i.e. the first three file descriptors 0, 1, 2). This ensures that no accidentally passed file descriptor stays around in the daemon process. On Linux, this is best implemented by iterating through /proc/self/fd, with a fallback of iterating from file descriptor 3 to the value returned by getrlimit() for RLIMIT_NOFILE.

                                                                                                                                                            • Reset all signal handlers to their default. This is best done by iterating through the available signals up to the limit of _NSIG and resetting them to SIG_DFL.

                                                                                                                                                            • Reset the signal mask using sigprocmask().

                                                                                                                                                            • Sanitize the environment block, removing or resetting environment variables that might negatively impact daemon runtime.

                                                                                                                                                            • Call fork(), to create a background process.

                                                                                                                                                            • In the child, call setsid() to detach from any terminal and create an independent session.

                                                                                                                                                            • In the child, call fork() again, to ensure that the daemon can never re-acquire a terminal again.

                                                                                                                                                            • Call exit() in the first child, so that only the second child (the actual daemon process) stays around. This ensures that the daemon process is re-parented to init/PID 1, as all daemons should be.

                                                                                                                                                            • In the daemon process, connect /dev/null to standard input, output, and error.

                                                                                                                                                            • In the daemon process, reset the umask to 0, so that the file modes passed to open(), mkdir() and suchlike directly control the access mode of the created files and directories.

                                                                                                                                                            • In the daemon process, change the current directory to the root directory (/), in order to avoid that the daemon involuntarily blocks mount points from being unmounted.

                                                                                                                                                            • In the daemon process, write the daemon PID (as returned by getpid()) to a PID file, for example /run/foobar.pid (for a hypothetical daemon “foobar”) to ensure that the daemon cannot be started more than once. This must be implemented in race-free fashion so that the PID file is only updated when it is verified at the same time that the PID previously stored in the PID file no longer exists or belongs to a foreign process.

                                                                                                                                                            • In the daemon process, drop privileges, if possible and applicable.

                                                                                                                                                            • From the daemon process, notify the original process started that initialization is complete. This can be implemented via an unnamed pipe or similar communication channel that is created before the first fork() and hence available in both the original and the daemon process.

                                                                                                                                                            • Call exit() in the original process. The process that invoked the daemon must be able to rely on that this exit() happens after initialization is complete and all external communication channels are established and accessible.

                                                                                                                                                              The discussed library does most of the above-mentioned initialisation steps as it becomes immediately evident that implementation details for some of them heavily dependent on the internal logic of an application itself, so it is not possible to implement them in a universal library. I believe it is not a flaw, though, as the missed parts are safe to implement in an application code.

                                                                                                                                                              • The Library’s Application Programming Interface
                                                                                                                                                              • The generic programming interface was loosely modelled after above-mentioned BSD’s daemon() function. The library provides two user available functions (one is, in fact, implemented on top of the other) as well as a set of flags to control a daemon creation behaviour.

                                                                                                                                                                • Conclusion
                                                                                                                                                                • The objective of the library is to hide all the trickery of programming a daemon so you could concentrate on the more creative parts of your application. I hope it does this well.

                                                                                                                                                                  If you are not only interested in writing a daemon, but also want to make yourself familiar with the techniques which are used to accomplish that, the source code is available. Moreover, I would advise anyone, who starts developing for a UNIX environment to do that, as it shows many intricacies of programming for these platforms.

                                                                                                                                                                  ##News Roundup

                                                                                                                                                                  ###EuroBSDCon 2018 travel report and obligatory pics

                                                                                                                                                                  This was my first big BSD conference. We also planned - planned might be a big word - thought about doing a devsummit on Friday. Since the people who were in charge of that had a change of plans, I was sure it’d go horribly wrong.

                                                                                                                                                                  The day before the devsummit and still in the wrong country, I mentioned the hours and venue on the wiki, and booked a reservation for a restaurant.
                                                                                                                                                                  It turns out that everything was totally fine, and since the devsummit was at the conference venue (that was having tutorials that day), they even had signs pointing at the room we were given. Thanks EuroBSDCon conference organizers!
                                                                                                                                                                  At the devsummit, we spent some time hacking. A few people came with “travel laptops” without access to anything, like Riastradh, so I gave him access to my own laptop. This didn’t hold very long and I kinda forgot about it, but for a few moments he had access to a NetBSD source tree and an 8 thread, 16GB RAM machine with which to build things.
                                                                                                                                                                  We had a short introduction and I suggested we take some pictures, so here’s the ones we got. A few people were concerned about privacy, so they’re not pictured. We had small team to hold the camera :-)
                                                                                                                                                                  At the actual conference days, I stayed at the speaker hotel with the other speakers. I’ve attempted to make conversation with some visibly FreeBSD/OpenBSD people, but didn’t have plans to talk about anything, so there was a lot of just following people silently.
                                                                                                                                                                  Perhaps for the next conference I’ll prepare a list of questions to random BSD people and then very obviously grab a piece of paper and ask, “what was…”, read a bit from it, and say, “your latest kernel panic?”, I’m sure it’ll be a great conversation starter.
                                                                                                                                                                  At the conference itself, was pretty cool to have folks like Kirk McKusick give first person accounts of some past events (Kirk gave a talk about governance at FreeBSD), or the second keynote by Ron Broersma.
                                                                                                                                                                  My own talk was hastily prepared, it was difficult to bring the topic together into a coherent talk. Nevertheless, I managed to talk about stuff for a while 40 minutes, though usually I skip over so many details that I have trouble putting together a sufficiently long talk.
                                                                                                                                                                  I mentioned some of my coolest bugs to solve (I should probably make a separate article about some!). A few people asked for the slides after the talk, so I guess it wasn’t totally incoherent.
                                                                                                                                                                  It was really fun to meet some of my favourite NetBSD people. I got to show off my now fairly well working laptop (it took a lot of work by all of us!).
                                                                                                                                                                  After the conference I came back with a conference cold, and it took a few days to recover from it. Hopefully I didn’t infect too many people on the way back.

                                                                                                                                                                  ###GhostBSD tested on real hardware T410 – better than TrueOS?

                                                                                                                                                                  You might have heard about FreeBSD which is ultimately derived from UNIX back in the days. It is not Linux even though it is similar in many ways because Linux was designed to follow UNIX principles. Seeing is believing, so check out the video of the install and some apps as well!

                                                                                                                                                                  Nowadays if you want some of that BSD on your personal desktop how to go about? Well there is a full package or distro called GhostBSD which is based on FreeBSD current with a Mate or XFCE desktop preconfigured. I did try another package called TrueOS before and you can check out my blog post as well.

                                                                                                                                                                  Let’s give it a try on my Lenovo ThinkPad T410. You can download the latest version from ghostbsd.org. Creating a bootable USB drive was surprisingly difficult as rufus did not work and created a corrupted drive. You have to follow this procedure under Windows: download the 2.5GB .iso file and rename the extension to .img. Download Win32 Disk imager and burn the img file to an USB drive and boot from it. You will be able to start a live session and use the onboard setup to install GhostBSD unto a disk.

                                                                                                                                                                  I did encounter some bugs or quirks along the way. The installer failed the first time for some unknown reason but worked on the second attempt. The first boot stopped upon initialization of the USB3 ports (the T410 does not have USB3) but I could use some ‘exit’ command line magic to continue. The second boot worked fine. Audio was only available through headphones, not speakers but that could partially be fixed using the command line again. Lot’s of installed apps did not show up in the start menu and on goes the quirks list.

                                                                                                                                                                  Overall it is still better than TrueOS for me because drivers did work very well and I could address most of the existing bugs.

                                                                                                                                                                  • On the upside:

                                                                                                                                                                  • Free and open source FreeBSD package ready to go

                                                                                                                                                                  • Mate or XFCE desktop (Mate is the only option for daily builds)

                                                                                                                                                                  • Drivers work fine including LAN, WiFi, video 2D & 3D, audio, etc

                                                                                                                                                                  • UFS or ZFS advanced file systems available

                                                                                                                                                                  • Some downsides:

                                                                                                                                                                  • Less driver and direct app support than Linux

                                                                                                                                                                  • Installer and desktop have some quirks and bugs

                                                                                                                                                                  • App-store is cumbersome, inferior to TrueOS

                                                                                                                                                                    ##Beastie Bits

                                                                                                                                                                    • EuroBSDCon 2018 and NetBSD sanitizers
                                                                                                                                                                    • New mandoc feature: -T html -O toc
                                                                                                                                                                    • EuroBSDcon 2018
                                                                                                                                                                    • Polish BSD User Group
                                                                                                                                                                    • garbage[43]: What year is it?
                                                                                                                                                                    • The Demo @ 50
                                                                                                                                                                    • Microsoft ports DTrace from FreeBSD to Windows 10
                                                                                                                                                                    • OpenBSD joins Twitter
                                                                                                                                                                    • NetBSD curses ripoffline improvements
                                                                                                                                                                    • FCP-0101: Deprecating most 10/100 Ethernet drivers
                                                                                                                                                                    • Announcing the pkgsrc-2018Q3 release
                                                                                                                                                                    • Debian on OpenBSD vmd (without qemu or another debian system)
                                                                                                                                                                    • A BSD authentication module for duress passwords (Joshua Stein)
                                                                                                                                                                    • Disk Price/Performance Analysis
                                                                                                                                                                    • ##Feedback/Questions

                                                                                                                                                                      • DJ - Zombie ZFS
                                                                                                                                                                      • Josua - arm tier 1? how to approach it
                                                                                                                                                                      • -Gamah - 5ghz
                                                                                                                                                                        • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                                                                                                                        • 1 hr 29 min
                                                                                                                                                                        • Episode 268: Netcat Demystified | BSD Now 268

                                                                                                                                                                          6 metrics for zpool performance, 2FA with ssh on OpenBSD, ZFS maintaining file type information in dirs, everything old is new again, netcat demystified, and more.

                                                                                                                                                                          ##Headlines

                                                                                                                                                                          ###Six Metrics for Measuring ZFS Pool Performance Part 1

                                                                                                                                                                          The layout of a ZFS storage pool has a significant impact on system performance under various workloads. Given the importance of picking the right configuration for your workload and the fact that making changes to an in-use ZFS pool is far from trivial, it is important for an administrator to understand the mechanics of pool performance when designing a storage system.

                                                                                                                                                                          • To quantify pool performance, we will consider six primary metrics:
                                                                                                                                                                          • Read I/O operations per second (IOPS)
                                                                                                                                                                          • Write IOPS
                                                                                                                                                                          • Streaming read speed
                                                                                                                                                                          • Streaming write speed
                                                                                                                                                                          • Storage space efficiency (usable capacity after parity versus total raw capacity)
                                                                                                                                                                          • Fault tolerance (maximum number of drives that can fail before data loss)
                                                                                                                                                                          • For the sake of comparison, we’ll use an example system with 12 drives, each one sized at 6TB, and say that each drive does 100MB/s streaming reads and writes and can do 250 read and write IOPS. We will visualize how the data is spread across the drives by writing 12 multi-colored blocks, shown below. The blocks are written to the pool starting with the brown block on the left (number one), and working our way to the pink block on the right (number 12).
                                                                                                                                                                          • Note that when we calculate data rates and IOPS values for the example system, they are only approximations. Many other factors can impact pool access speeds for better (compression, caching) or worse (poor CPU performance, not enough memory).

                                                                                                                                                                            There is no single configuration that maximizes all six metrics. Like so many things in life, our objective is to find an appropriate balance of the metrics to match a target workload. For example, a cold-storage backup system will likely want a pool configuration that emphasizes usable storage space and fault tolerance over the other data-rate focused metrics.
                                                                                                                                                                            Let’s start with a quick review of ZFS storage pools before diving into specific configuration options. ZFS storage pools are comprised of one or more virtual devices, or vdevs. Each vdev is comprised of one or more storage providers, typically physical hard disks. All disk-level redundancy is configured at the vdev level. That is, the RAID layout is set on each vdev as opposed to on the storage pool. Data written to the storage pool is then striped across all the vdevs. Because pool data is striped across the vdevs, the loss of any one vdev means total pool failure. This is perhaps the single most important fact to keep in mind when designing a ZFS storage system. We will circle back to this point in the next post, but keep it in mind as we go through the vdev configuration options.
                                                                                                                                                                            Because storage pools are made up of one or more vdevs with the pool data striped over the top, we’ll take a look at pool configuration in terms of various vdev configurations. There are three basic vdev configurations: striping, mirroring, and RAIDZ (which itself has three different varieties). The first section will cover striped and mirrored vdevs in this post; the second post will cover RAIDZ and some example scenarios.
                                                                                                                                                                            A striped vdev is the simplest configuration. Each vdev consists of a single disk with no redundancy. When several of these single-disk, striped vdevs are combined into a single storage pool, the total usable storage space would be the sum of all the drives. When you write data to a pool made of striped vdevs, the data is broken into small chunks called “blocks” and distributed across all the disks in the pool. The blocks are written in “round-robin” sequence, meaning after all the disks receive one row of blocks, called a stripe, it loops back around and writes another stripe under the first. A striped pool has excellent performance and storage space efficiency, but absolutely zero fault tolerance. If even a single drive in the pool fails, the entire pool will fail and all data stored on that pool will be lost.
                                                                                                                                                                            The excellent performance of a striped pool comes from the fact that all of the disks can work independently for all read and write operations. If you have a bunch of small read or write operations (IOPS), each disk can work independently to fetch the next block. For streaming reads and writes, each disk can fetch the next block in line synchronized with its neighbors. For example, if a given disk is fetching block n, its neighbor to the left can be fetching block n-1, and its neighbor to the right can be fetching block n+1. Therefore, the speed of all read and write operations as well as the quantity of read and write operations (IOPS) on a striped pool will scale with the number of vdevs. Note here that I said the speeds and IOPS scale with the number of vdevs rather than the number of drives; there’s a reason for this and we’ll cover it in the next post when we discuss RAID-Z.
                                                                                                                                                                            Here’s a summary of the total pool performance (where N is the number of disks in the pool):

                                                                                                                                                                            • N-wide striped:
                                                                                                                                                                            • Read IOPS: N * Read IOPS of a single drive
                                                                                                                                                                            • Write IOPS: N * Write IOPS of a single drive
                                                                                                                                                                            • Streaming read speed: N * Streaming read speed of a single drive
                                                                                                                                                                            • Streaming write speed: N * Streaming write speed of a single drive
                                                                                                                                                                            • Storage space efficiency: 100%
                                                                                                                                                                            • Fault tolerance: None!
                                                                                                                                                                            • Let’s apply this to our example system, configured with a 12-wide striped pool:

                                                                                                                                                                              • 12-wide striped:
                                                                                                                                                                              • Read IOPS: 3000
                                                                                                                                                                              • Write IOPS: 3000
                                                                                                                                                                              • Streaming read speed: 1200 MB/s
                                                                                                                                                                              • Streaming write speed: 1200 MB/s
                                                                                                                                                                              • Storage space efficiency: 72 TB
                                                                                                                                                                              • Fault tolerance: None!
                                                                                                                                                                              • Below is a visual depiction of our 12 rainbow blocks written to this pool configuration:
                                                                                                                                                                              • The blocks are simply striped across the 12 disks in the pool. The LBA column on the left stands for “Logical Block Address”. If we treat each disk as a column in an array, each LBA would be a row. It’s also easy to see that if any single disk fails, we would be missing a color in the rainbow and our data would be incomplete. While this configuration has fantastic read and write speeds and can handle a ton of IOPS, the data stored on the pool is very vulnerable. This configuration is not recommended unless you’re comfortable losing all of your pool’s data whenever any single drive fails.

                                                                                                                                                                                A mirrored vdev consists of two or more disks. A mirrored vdev stores an exact copy of all the data written to it on each one of its drives. Traditional RAID-1 mirrors usually only support two drive mirrors, but ZFS allows for more drives per mirror to increase redundancy and fault tolerance. All disks in a mirrored vdev have to fail for the vdev, and thus the whole pool, to fail. Total storage space will be equal to the size of a single drive in the vdev. If you’re using mismatched drive sizes in your mirrors, the total size will be that of the smallest drive in the mirror.
                                                                                                                                                                                Streaming read speeds and read IOPS on a mirrored vdev will be faster than write speeds and IOPS. When reading from a mirrored vdev, the drives can “divide and conquer” the operations, similar to what we saw above in the striped pool. This is because each drive in the mirror has an identical copy of the data. For write operations, all of the drives need to write a copy of the data, so the mirrored vdev will be limited to the streaming write speed and IOPS of a single disk.

                                                                                                                                                                                Here’s a summary:

                                                                                                                                                                                • N-way mirror:

                                                                                                                                                                                • Read IOPS: N * Read IOPS of a single drive

                                                                                                                                                                                • Write IOPS: Write IOPS of a single drive

                                                                                                                                                                                • Streaming read speed: N * Streaming read speed of a single drive

                                                                                                                                                                                • Streaming write speed: Streaming write speed of a single drive

                                                                                                                                                                                • Storage space efficiency: 50% for 2-way, 33% for 3-way, 25% for 4-way, etc. [(N-1)/N]

                                                                                                                                                                                • Fault tolerance: 1 disk per vdev for 2-way, 2 for 3-way, 3 for 4-way, etc. [N-1]

                                                                                                                                                                                • For our first example configuration, let’s do something ridiculous and create a 12-way mirror. ZFS supports this kind of thing, but your management probably will not.

                                                                                                                                                                                • 1x 12-way mirror:

                                                                                                                                                                                • Read IOPS: 3000

                                                                                                                                                                                • Write IOPS: 250

                                                                                                                                                                                • Streaming read speed: 1200 MB/s

                                                                                                                                                                                • Streaming write speed: 100 MB/s

                                                                                                                                                                                • Storage space efficiency: 8.3% (6 TB)

                                                                                                                                                                                • Fault tolerance: 11

                                                                                                                                                                                  As we can clearly see from the diagram, every single disk in the vdev gets a full copy of our rainbow data. The chainlink icons between the disk labels in the column headers indicate the disks are part of a single vdev. We can lose up to 11 disks in this vdev and still have a complete rainbow. Of course, the data takes up far too much room on the pool, occupying a full 12 LBAs in the data array.

                                                                                                                                                                                  Obviously, this is far from the best use of 12 drives. Let’s do something a little more practical and configure the pool with the ZFS equivalent of RAID-10. We’ll configure six 2-way mirror vdevs. ZFS will stripe the data across all 6 of the vdevs. We can use the work we did in the striped vdev section to determine how the pool as a whole will behave. Let’s first calculate the performance per vdev, then we can work on the full pool:

                                                                                                                                                                                  • 1x 2-way mirror:

                                                                                                                                                                                  • Read IOPS: 500

                                                                                                                                                                                  • Write IOPS: 250

                                                                                                                                                                                  • Streaming read speed: 200 MB/s

                                                                                                                                                                                  • Streaming write speed: 100 MB/s

                                                                                                                                                                                  • Storage space efficiency: 50% (6 TB)

                                                                                                                                                                                  • Fault tolerance: 1

                                                                                                                                                                                  • Now we can pretend we have 6 drives with the performance statistics listed above and run them through our striped vdev performance calculator to get the total pool’s performance:

                                                                                                                                                                                  • 6x 2-way mirror:

                                                                                                                                                                                  • Read IOPS: 3000

                                                                                                                                                                                  • Write IOPS: 1500

                                                                                                                                                                                  • Streaming read speed: 3000 MB/s

                                                                                                                                                                                  • Streaming write speed: 1500 MB/s

                                                                                                                                                                                  • Storage space efficiency: 50% (36 TB)

                                                                                                                                                                                  • Fault tolerance: 1 per vdev, 6 total

                                                                                                                                                                                  • Again, we will examine the configuration from a visual perspective:

                                                                                                                                                                                    Each vdev gets a block of data and ZFS writes that data to all of (or in this case, both of) the disks in the mirror. As long as we have at least one functional disk in each vdev, we can retrieve our rainbow. As before, the chain link icons denote the disks are part of a single vdev. This configuration emphasizes performance over raw capacity but doesn’t totally disregard fault tolerance as our striped pool did. It’s a very popular configuration for systems that need a lot of fast I/O. Let’s look at one more example configuration using four 3-way mirrors. We’ll skip the individual vdev performance calculation and go straight to the full pool:

                                                                                                                                                                                    • 4x 3-way mirror:
                                                                                                                                                                                    • Read IOPS: 3000
                                                                                                                                                                                    • Write IOPS: 1000
                                                                                                                                                                                    • Streaming read speed: 3000 MB/s
                                                                                                                                                                                    • Streaming write speed: 400 MB/s
                                                                                                                                                                                    • Storage space efficiency: 33% (24 TB)
                                                                                                                                                                                    • Fault tolerance: 2 per vdev, 8 total
                                                                                                                                                                                    • While we have sacrificed some write performance and capacity, the pool is now extremely fault tolerant. This configuration is probably not practical for most applications and it would make more sense to use lower fault tolerance and set up an offsite backup system.

                                                                                                                                                                                      Striped and mirrored vdevs are fantastic for access speed performance, but they either leave you with no redundancy whatsoever or impose at least a 50% penalty on the total usable space of your pool. In the next post, we will cover RAIDZ, which lets you keep data redundancy without sacrificing as much storage space efficiency. We’ll also look at some example workload scenarios and decide which layout would be the best fit for each.

                                                                                                                                                                                      ###2FA with ssh on OpenBSD

                                                                                                                                                                                      Five years ago I wrote about using a yubikey on OpenBSD. The only problem with doing this is that there’s no validation server available on OpenBSD, so you need to use a different OTP slot for each machine. (You don’t want to risk a replay attack if someone succeeds in capturing an OTP on one machine, right?) Yubikey has two OTP slots per device, so you would need a yubikey for every two machines with which you’d like to use it. You could use a bastion—and use only one yubikey—but I don’t like the SPOF aspect of a bastion. YMMV.

                                                                                                                                                                                      After I played with TOTP, I wanted to use them as a 2FA for ssh. At the time of writing, we can’t do that using only the tools in base. This article focuses on OpenBSD; if you use another operating system, here are two handy links.

                                                                                                                                                                                      • SEED CONFIGURATION
                                                                                                                                                                                      • The first thing we need to do is to install the software which will be used to verify the OTPs we submit.

                                                                                                                                                                                        # pkg_add login_oath

                                                                                                                                                                                        We need to create a secret - aka, the seed - that will be used to calculate the Time-based One-Time Passwords. We should make sure no one can read or change it.

                                                                                                                                                                                        $ openssl rand -hex 20 > ~/.totp-key

                                                                                                                                                                                        $ chmod 400 ~/.totp-key

                                                                                                                                                                                        Now we have a hexadecimal key, but apps usually want a base32 secret. I initially wrote a small script to do the conversion.

                                                                                                                                                                                        While writing this article, I took the opportunity to improve it. When I initially wrote this utility for my use, python-qrcode hadn’t yet been imported to the OpenBSD ports/packages system. It’s easy to install now, so let’s use it.
                                                                                                                                                                                        Here’s the improved version. It will ask for the hex key and output the secret as a base32-encoded string, both with and without spacing so you can copy-paste it into your password manager or easily retype it. It will then ask for the information needed to generate a QR code. Adding our new OTP secret to any mobile app using the QR code will be super easy!

                                                                                                                                                                                        • SYSTEM CONFIGURATION
                                                                                                                                                                                        • We can now move to the configuration of the system to put our new TOTP to use. As you might guess, it’s going to be quite close to what we did with the yubikey.

                                                                                                                                                                                          We need to tweak login.conf. Be careful and keep a root shell open at all times. The few times I broke my OpenBSD were because I messed with login.conf without showing enough care.

                                                                                                                                                                                          • SSHD CONFIGURATION
                                                                                                                                                                                          • Again, keeping a root shell around decreases the risk of losing access to the system and being locked outside.

                                                                                                                                                                                            A good standard is to use PasswordAuthentication no and to use public key only. Except… have a guess what the P stands for in TOTP. Yes, congrats, you guessed it!
                                                                                                                                                                                            We need to switch to PasswordAuthentication yes. However, if we made this change alone, sshd would then accept a public key OR a password (which are TOTP because of our login.conf). 2FA uses both at the same time.
                                                                                                                                                                                            To inform sshd we intend to use both, we need to set AuthenticationMethods publickey,password. This way, the user trying to login will first need to perform the traditional publickey authentication. Once that’s done, ssh will prompt for a password and the user will need to submit a valid TOTP for the system.
                                                                                                                                                                                            We could do this the other way around, but I think bots could try passwords, wasting resources. Evaluated in this order, failing to provide a public key leads to sshd immediately declining your attempt.

                                                                                                                                                                                            • IMPROVING SECURITY WITHOUT IMPACTING UX
                                                                                                                                                                                            • My phone has a long enough password that most of the time, I fail to type it correctly on the first try. Of course, if I had to unlock my phone, launch my TOTP app and use my keyboard to enter what I see on my phone’s screen, I would quickly disable 2FA.

                                                                                                                                                                                              To find a balance, I have whitelisted certain IP addresses and users. If I connect from a particular IP address or as a specific user, I don’t want to go through 2FA. For some users, I might not even enable 2FA.
                                                                                                                                                                                              To sum up, we covered how to create a seed, how to perform a hexadecimal to base32 conversion and how to create a QR code for mobile applications. We configured the login system with login.conf so that ssh authentication uses the TOTP login system, and we told sshd to ask for both the public key and the Time-based One-Time Password. Now you should be all set to use two-factor ssh authentication on OpenBSD!

                                                                                                                                                                                              ##News Roundup

                                                                                                                                                                                              ###How ZFS maintains file type information in directories

                                                                                                                                                                                              As an aside in yesterday’s history of file type information being available in Unix directories, I mentioned that it was possible for a filesystem to support this even though its Unix didn’t. By supporting it, I mean that the filesystem maintains this information in its on disk format for directories, even though the rest of the kernel will never ask for it. This is what ZFS does.

                                                                                                                                                                                              The easiest way to see that ZFS does this is to use zdb to dump a directory. I’m going to do this on an OmniOS machine, to make it more convincing, and it turns out that this has some interesting results. Since this is OmniOS, we don’t have the convenience of just naming a directory in zdb, so let’s find the root directory of a filesystem, starting from dnode 1 (as seen before).

                                                                                                                                                                                              # zdb -dddd fs3-corestaff-01/h/281 1

                                                                                                                                                                                              Dataset [....]
                                                                                                                                                                                              [...]
                                                                                                                                                                                              microzap: 512 bytes, 4 entries
                                                                                                                                                                                              [...]
                                                                                                                                                                                              ROOT = 3

                                                                                                                                                                                              # zdb -dddd fs3-corestaff-01/h/281 3
                                                                                                                                                                                              Object lvl iblk dblk dsize lsize %full type
                                                                                                                                                                                              3 1 16K 1K 8K 1K 100.00 ZFS directory
                                                                                                                                                                                              [...]
                                                                                                                                                                                              microzap: 1024 bytes, 8 entries

                                                                                                                                                                                              RESTORED = 4396504 (type: Directory)
                                                                                                                                                                                              ckstst = 12017 (type: not specified)
                                                                                                                                                                                              ckstst3 = 25069 (type: Directory)
                                                                                                                                                                                              .demo-file = 5832188 (type: Regular File)
                                                                                                                                                                                              .peergroup = 12590 (type: not specified)
                                                                                                                                                                                              cks = 5 (type: not specified)
                                                                                                                                                                                              cksimap1 = 5247832 (type: Directory)
                                                                                                                                                                                              .diskuse = 12016 (type: not specified)
                                                                                                                                                                                              ckstst2 = 12535 (type: not specified)

                                                                                                                                                                                              This is actually an old filesystem (it dates from Solaris 10 and has been transferred around with ‘zfs send | zfs recv’ since then), but various home directories for real and test users have been created in it over time (you can probably guess which one is the oldest one). Sufficiently old directories and files have no file type information, but more recent ones have this information, including .demo-file, which I made just now so this would have an entry that was a regular file with type information.

                                                                                                                                                                                              Once I dug into it, this turned out to be a change introduced (or activated) in ZFS filesystem version 2, which is described in ‘zfs upgrade -v’ as ‘enhanced directory entries’. As an actual change in (Open)Solaris, it dates from mid 2007, although I’m not sure what Solaris release it made it into. The upshot is that if you made your ZFS filesystem any time in the last decade, you’ll have this file type information in your directories.
                                                                                                                                                                                              How ZFS stores this file type information is interesting and clever, especially when it comes to backwards compatibility. I’ll start by quoting the comment from zfs_znode.h:

                                                                                                                                                                                              /*

                                                                                                                                                                                              * The directory entry has the type (currently unused on
                                                                                                                                                                                              * Solaris) in the top 4 bits, and the object number in
                                                                                                                                                                                              * the low 48 bits. The "middle" 12 bits are unused.
                                                                                                                                                                                              */

                                                                                                                                                                                              In yesterday’s entry I said that Unix directory entries need to store at least the filename and the inode number of the file. What ZFS is doing here is reusing the 64 bit field used for the ‘inode’ (the ZFS dnode number) to also store the file type, because it knows that object numbers have only a limited range. This also makes old directory entries compatible, by making type 0 (all 4 bits 0) mean ‘not specified’. Since old directory entries only stored the object number and the object number is 48 bits or less, the higher bits are guaranteed to be all zero.

                                                                                                                                                                                              The reason this needed a new ZFS filesystem version is now clear. If you tried to read directory entries with file type information on a version of ZFS that didn’t know about them, the old version would likely see crazy (and non-existent) object numbers and nothing would work. In order to even read a ‘file type in directory entries’ filesystem, you need to know to only look at the low 48 bits of the object number field in directory entries.

                                                                                                                                                                                              ###Everything old is new again

                                                                                                                                                                                              Just because KDE4-era software has been deprecated by the KDE-FreeBSD team in the official ports-repository, doesn’t mean we don’t care for it while we still need to. KDE4 was released on January 11th, 2008 — I still have the T-shirt — which was a very different C++ world than what we now live in. Much of the code pre-dates the availability of C11 — certainly the availability of compilers with C11 support. The language has changed a great deal in those ten years since the original release.

                                                                                                                                                                                              The platforms we run KDE code on have, too — FreeBSD 12 is a long way from the FreeBSD 6 or 7 that were current at release (although at the time, I was more into OpenSolaris). In particular, since then the FreeBSD world has switched over to Clang, and FreeBSD current is experimenting with Clang 7. So we’re seeing KDE4-era code being built, and running, on FreeBSD 12 with Clang 7. That’s a platform with a very different idea of what constitutes correct code, than what the code was originally written for. (Not quite as big a difference as Helio’s KDE1 efforts, though)
                                                                                                                                                                                              So, while we’re counting down to removing KDE4 from the FreeBSD ports tree, we’re also going through and fixing it to work with Clang 7, which defaults to a newer C++ standard and which is quite picky about some things. Some time in the distant past, when pointers were integers and NULL was zero, there was some confusion about booleans. So there’s lots of code that does list.contains(element) > 0 … this must have been a trick before booleans were a supported type in all our compilers. In any case it breaks with Clang 7, since contains() returns a QBool which converts to a nullptr (when false) which isn’t comparable to the integer 0. Suffice to say I’ve spent more time reading KDE4-era code this month, than in the past two years.
                                                                                                                                                                                              However, work is proceeding apace, so if you really really want to, you can still get your old-school kicks on a new platform. Because we care about packaging things right, even when we want to get rid of it.

                                                                                                                                                                                              ###OpenBSD netcat demystified

                                                                                                                                                                                              Owing to its versatile functionalities, netcat earns the reputation as “TCP/IP Swiss army knife”. For example, you can create a simple chat app using netcat:

                                                                                                                                                                                              • (1) Open a terminal and input following command:
                                                                                                                                                                                              • # nc -l 3003

                                                                                                                                                                                                This means a netcat process will listen on 3003 port in this machine (the IP address of current machine is 192.168.35.176).

                                                                                                                                                                                                • (2) Connect aforemontioned netcat process in another machine, and send a greeting:
                                                                                                                                                                                                • # nc 192.168.35.176 3003

                                                                                                                                                                                                  hello

                                                                                                                                                                                                  Then in the first machine’s terminal, you will see the “hello” text:

                                                                                                                                                                                                  # nc -l 3003

                                                                                                                                                                                                  hello

                                                                                                                                                                                                  A primitive chatroom is built successfully. Very cool! Isn’t it? I think many people can’t wait to explore more features of netcatnow. If you are among them, congratulations! This tutorial may be the correct place for you.

                                                                                                                                                                                                  In the following parts, I will delve into OpenBSD’s netcatcode to give a detailed anatomy of it. The reason of picking OpenBSD’s netcat rather than others’ is because its code repository is small (~2000 lines of code) and neat. Furthermore, I also hope this little book can assist you learn more socket programming knowledge not just grasping usage of netcat.
                                                                                                                                                                                                  We’re all set. Let’s go!

                                                                                                                                                                                                  ##Beastie Bits

                                                                                                                                                                                                  • What’s in store for NetBSD 9.0
                                                                                                                                                                                                  • NetBSD machines at Open Source Conference 2018 Hiroshima
                                                                                                                                                                                                  • nmctl adapted with limited privileges: nmctl-0.6.0
                                                                                                                                                                                                  • Submit Your Work: Check out SCALE 17x and FOSDEM ’19 CFPs
                                                                                                                                                                                                  • OpenBSD 6.4 site is up! (with a partial list of new features)
                                                                                                                                                                                                  • Using Alpine to Read Your Email on OpenBSD
                                                                                                                                                                                                  • ##Feedback/Questions

                                                                                                                                                                                                    • Morgan - Send/Receive to Manage Fragmentation?
                                                                                                                                                                                                    • Ryan - ZFS and mmap
                                                                                                                                                                                                    • Marcus - Linux Compat
                                                                                                                                                                                                    • Ben - Multiple Pools
                                                                                                                                                                                                      • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                                                                                                                                                      • 1 hr 8 min
                                                                                                                                                                                                      • Episode 267: Absolute FreeBSD | BSD Now 267

                                                                                                                                                                                                        We have a long interview with fiction and non-fiction author Michael W. Lucas for you this week as well as questions from the audience.

                                                                                                                                                                                                        ##Headlines

                                                                                                                                                                                                        ##Interview - Michael W. Lucas - [email protected] / @mwlauthor

                                                                                                                                                                                                        • BR: [Welcome Back]
                                                                                                                                                                                                        • AJ: What have you been doing since last we talked to you [ed, ssh, and af3e]
                                                                                                                                                                                                        • BR: Tell us more about AF3e
                                                                                                                                                                                                        • AJ: How did the first Absolute FreeBSD come about?
                                                                                                                                                                                                        • BR: Do you have anything special planned for MeetBSD?
                                                                                                                                                                                                        • AJ: What are you working on now? [FM:Jails, Git sync Murder]
                                                                                                                                                                                                        • BR: What are your plans for next year?
                                                                                                                                                                                                        • AJ: How has SEMIBug been going?
                                                                                                                                                                                                        • Auction at https://mwl.io

                                                                                                                                                                                                          Patreon Link:

                                                                                                                                                                                                          ##Feedback/Questions

                                                                                                                                                                                                          • Paul - Recent bhyve related videos (daemon)
                                                                                                                                                                                                          • Michael - freebsd-update question
                                                                                                                                                                                                          • Sigflup - pkg file search
                                                                                                                                                                                                            • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                                                                                                                                                            • 1 hr 8 min
                                                                                                                                                                                                            • Episode 266: File Type History | BSD Now 266

                                                                                                                                                                                                              Running OpenBSD/NetBSD on FreeBSD using grub2-bhyve, vermaden’s FreeBSD story, thoughts on OpenBSD on the desktop, history of file type info in Unix dirs, Multiboot a Pinebook KDE neon image, and more.

                                                                                                                                                                                                              ##Headlines

                                                                                                                                                                                                              ###OpenBSD/NetBSD on FreeBSD using grub2-bhyve

                                                                                                                                                                                                              When I was writing a blog post about the process title, I needed a couple of virtual machines with OpenBSD, NetBSD, and Ubuntu. Before that day I mainly used FreeBSD and Windows with bhyve. I spent some time trying to set up an OpenBSD using bhyve and UEFI as described here. I had numerous problems trying to use it, and this was the day I discovered the grub2-bhyve tool, and I love it!

                                                                                                                                                                                                              The grub2-bhyve allows you to load a kernel using GRUB bootloader. GRUB supports most of the operating systems with a standard configuration, so exactly the same method can be used to install NetBSD or Ubuntu. First, let’s install grub2-bhyve on our FreeBSD box:

                                                                                                                                                                                                              # pkg install grub2-bhyve

                                                                                                                                                                                                              To run grub2-bhyve we need to provide at least the name of the VM. In bhyve, if the memsize is not specified the default VM is created with 256MB of the memory.

                                                                                                                                                                                                              # grub-bhyve test

                                                                                                                                                                                                              GNU GRUB version 2.00
                                                                                                                                                                                                              Minimal BASH-like line editing is supported. For the first word, TAB lists possible command
                                                                                                                                                                                                              completions. Anywhere else TAB lists possible device or file completions.


                                                                                                                                                                                                              grub>

                                                                                                                                                                                                              After running grub-bhyve command we will enter the GRUB loader. If we type the ls command, we will see all the available devices. In the case of the grub2-bhyve there is one additional device called “(host)” that is always available and allows the host filesystem to be accessed. We can list files under that device.

                                                                                                                                                                                                              grub> ls

                                                                                                                                                                                                              (host)
                                                                                                                                                                                                              grub> ls (host)/
                                                                                                                                                                                                              libexec/ bin/ usr/ bhyve/ compat/ tank/ etc/ boot/ net/ entropy proc/ lib/ root/ sys/ mnt/ rescue/ tmp/ home/ sbin/ media/ jail/ COPYRIGHT var/ dev/
                                                                                                                                                                                                              grub>

                                                                                                                                                                                                              To exit console simply type ‘reboot’. I would like to install my new operating system under a ZVOL ztank/bhyve/post. On another terminal, we create:

                                                                                                                                                                                                              # zfs create -V 10G ztank/bhyve/post

                                                                                                                                                                                                              If you don’t use ZFS for some crazy reason you can also create a raw blob using the truncate(1) command.

                                                                                                                                                                                                              # truncate -s 10G post.img

                                                                                                                                                                                                              I recommend installing an operating system from the disk image (installXX.fs for OpenBSD and NetBSD-X.X-amd64-install.img for NetBSD). Now we need to create a device map for a GRUB.

                                                                                                                                                                                                              cat > /tmp/post.map << EOF

                                                                                                                                                                                                              (hd0) /directory/to/disk/image
                                                                                                                                                                                                              (hd1) /dev/zvol/ztank/bhyve/post
                                                                                                                                                                                                              EOF

                                                                                                                                                                                                              The mapping files describe the names for files in the GRUB. In our case under hd0 we will have an installation image and in hd1 we will have our ZVOL/blob. You can also try to use an ISO image then instead of using hd0 device name use a cd0. When we will run the grub-bhyve command we will see two additional devices.

                                                                                                                                                                                                              # grub-bhyve -m /tmp/post.map post

                                                                                                                                                                                                              grub> ls
                                                                                                                                                                                                              (hd0) (hd0,msdos4) (hd0,msdos1) (hd0,openbsd9) (hd0,openbsd1) (hd1) (host)

                                                                                                                                                                                                              The hd0 (in this example OpenBSD image) contains multiple partitions. We can check what is on it.

                                                                                                                                                                                                              grub> ls (hd0,msdos4)/

                                                                                                                                                                                                              boot bsd 6.4/ etc/

                                                                                                                                                                                                              And this is the partition that contains a kernel. Now we can set a root device, load an OpenBSD kernel and boot:

                                                                                                                                                                                                              grub> set root=(hd0,msdos4)

                                                                                                                                                                                                              grub> kopenbsd -h com0 -r sd0a /bsd
                                                                                                                                                                                                              grub> boot

                                                                                                                                                                                                              After that, we can run bhyve virtual machine. In my case it is:

                                                                                                                                                                                                              # bhyve -c 1 -w -u -H \

                                                                                                                                                                                                              -s 0,amd_hostbridge \
                                                                                                                                                                                                              -s 3,ahci-hd,/directory/to/disk/image \
                                                                                                                                                                                                              -s 4,ahci-hd,/dev/zvol/ztank/bhyve/post \
                                                                                                                                                                                                              -s 31,lpc -l com1,stdio \
                                                                                                                                                                                                              post

                                                                                                                                                                                                              Unfortunately explaining the whole bhyve(8) command line is beyond this article. After installing the operating system remove hd0 from the mapping file and the image from the bhyve(8) command. If you don’t want to type all those GRUB commands, you can simply redirect them to the standard input.

                                                                                                                                                                                                              cat << EOF | grub-bhyve -m /tmp/post.map -M 512 post

                                                                                                                                                                                                              set root=(hd0,4)
                                                                                                                                                                                                              kopenbsd -h com0 -r sd0a /bsd
                                                                                                                                                                                                              boot
                                                                                                                                                                                                              EOF

                                                                                                                                                                                                              ###My FreeBSD Story

                                                                                                                                                                                                              My first devices/computers/consoles (not at the same time) that I remember were Atari 2600 and Pegasus console which was hardware clone of the Nintendo NES.

                                                                                                                                                                                                              Back then I did not even knew that it was Atari 2600 as I referred to it as Video Computer System … and I did not even knew any english by then. It took me about two decades to get to know (by accident) that this Video Computer System was Atari 2600
                                                                                                                                                                                                              Then I got AMIGA 600 computer (or should I say my parents bought it for me) which served both for playing computer games and also other activities for the first time. AMIGA is the computer that had the greatest influence on me, as it was the first time I studied the books about Amiga Workbench operating system and learned commands from Amiga Shell terminal. I loved the idea of Ram Disk icon/directory on the desktop that allowed me to transparently put any things in system memory. I still miss that concept on today’s desktop systems … and I still remember how dismal I was when I watched Amiga Deathbed Vigil movie.
                                                                                                                                                                                                              At the end of 1998 I got my first PC that of course came with Windows and that computer served both as gaming machine and as well as typical tool. One time I dig into the internals with Windows Registry (which left me disgusted by its concepts and implementation) and its limited command line interface provided by CMD.EXE executable. I remember that the heart of this box was not the CPU or the motherboard but the graphics accelerator – the legendary 3Dfx Voodoo card. This company (3Dfx) – their attitude and philosophy – also left solid fingerprint on my way. Like AMIGA did.
                                                                                                                                                                                                              After ‘migration’ from AMIGA to PC it never again ‘felt right’. The games were cool but the Windows system was horrible. Time has passed and different Windows versions and hardware modifications took place. Windows XP felt really heavy at that time, not to mention Windows 2000 for example with even bigger hardware requirements. I also do not understand all the hate about Windows ME. It crashed with the same frequency as Windows 98 or later Windows 98 Second Edition but maybe my hardware was different ??
                                                                                                                                                                                                              I do not have any ‘mine’ screenshots from that period as I lost all my 40 GB (huge then) drive of data when I moved/resized the partition with Partition Magic to get some more space from the less filled C: drive. That day I learned hard that “there are people who do backups and people who will do backups”. I never lost data again as I had multiple copies of my data, but the same as Netheril fall the lost data was was gone forever.
                                                                                                                                                                                                              I always followed various alternatives which led me to try Linux in 2003, after reading about various distributions philosophies I decided to run Slackware Linux with KDE 3. My buddy used Aurox Linux by then (one of the few Linux distributions from Poland) and encouraged me to do the same – especially in the context of fixing possible problems as he already knew it and also as he recently dumped Windows system. But Slackware sounded like a better idea so I took that path instead. At first I dual booted between Windows XP and Slackware Linux cause I had everything worked out on the Windows world while I often felt helpless in the Linux world, so I would reboot into Windows to play some games or find a solution for Linux problem if that was required. I remember how strange the concept of dual clipboards (PRIMARY and SECONDARY) was for me by then. I was amazed why ‘so much better’ system as Linux (at least marketed that way) needs a system tray program to literally manage the clipboard. On Windows it was obvious, you do [CTRL]+[C] to copy and [CTRL]+[V] to paste things, but on Linux there (no I know its X11 feature) there were two clipboards that were synchronized by this little system tray program from KDE 3. It was also unthinkable for me that I will ‘lost’ contents of last/recent [CTRL]+[C] operation if I close the application from which the copy was made. I settled down a little on Slackware but not for long. I really did not liked manual dependency management for packages for example. Also KDE 3 was really ugly and despite trying all possible options I was not able to tweak it into something nice looking.
                                                                                                                                                                                                              After half a year on Slackware I checked the Linux distributions again and decided to try Gentoo Linux. I definitely agree with the image below which visualizes Gentoo Linux experience, especially when You install it for he first time ??
                                                                                                                                                                                                              Of course I went with the most hardcore version with self building Stage 1 (compiler and toolchain) which was horrible idea at that time because compilation on slow single core machine took forever … but after many hours I got Gentoo installed. I now have to decide which desktop environment to use. I have read a lot of good news about Fluxbox at that time so this is what I tried. It was very weird experience (to create everything in GUI from scratch) but very pleasant one. That recalled me the times of AMIGA … but Linux came in the way too much often. The more I dig into Gentoo Linux the more I read that lots of Gentoo features are based on FreeBSD solutions. Gentoo Portage is a clone of FreeBSD Ports. That ‘central’ /etc/rc.conf system configuration file concept was taken from FreeBSD as well. So I started to gather information about FreeBSD. The (then) FreeBSD website or FreeBSD Ports site (still) felt little outdated to say the least but that did not discouraged me.
                                                                                                                                                                                                              Somewhere in 2005 I installed FreeBSD 5.4 on my computer. The beginnings were hard, like the earlier step with Gentoo but similarly like Gentoo the FreeBSD project came with a lot of great documentation. While Gentoo documentation is concentrated within various Gentoo Wiki sites the FreeBSD project comes with ‘official’ documentation in the form of Handbook and FAQ. I remember my first questions at the now nonexistent BSDForums.org site – for example one of the first ones – how to scroll the terminal output in the plain console. I now know that I had to push Scroll Lock button but it was something totally new for me.
                                                                                                                                                                                                              Why FreeBSD and not OpenBSD or NetBSD? Probably because Gentoo based most their concepts on the FreeBSD solutions, so that led me to FreeBSD instead of the other BSD operating systems. Currently I still use FreeBSD but I keep an steady eye on the OpenBSD, HardenedBSD and DragonFly BSD solutions and improvements.
                                                                                                                                                                                                              As the migration path from Linux to FreeBSD is a lot easier – all configuration files from /home can be just copied – the migration was quite fast easy. I again had the Fluxbox configuration which I used on the Gentoo. Now – on FreeBSD – it started to fell even more like AMIGA times. Everything is/has been well thought and had its place and reason. The documentation was good and the FreeBSD Community was second to none.
                                                                                                                                                                                                              After 15 years of using various Windows, UNIX (macOS/AIX/HP-UX/Solaris/OpenSolaris/Illumos/FreeBSD/OpenBSD/NetBSD) and UNIX-like (Linux) systems I always come to conclusion that FreeBSD is the system that sucks least. And sucks least with each release and one day I will write why FreeBSD is such great operating system … if I already haven’t

                                                                                                                                                                                                              ##News Roundup

                                                                                                                                                                                                              ###OpenBSD on the Desktop: some thoughts

                                                                                                                                                                                                              I’ve been using OpenBSD on my ThinkPad X230 for some weeks now, and the experience has been peculiar in some ways.

                                                                                                                                                                                                              The OS itself in my opinion is not ready for widespread desktop usage, and the development team is not trying to push it in the throat of anybody who wants a Windows or macOS alternative. You need to understand a little bit of how *NIX systems work, because you’ll use CLI more than UI. That’s not necessarily bad, and I’m sure I learned a trick or two that could translate easily to Linux or macOS. Their development process is purely based on developers that love to contribute and hack around, just because it’s fun. Even the mailing list is a cool place to hang on! Code correctness and security are a must, nothing gets committed if it doesn’t get reviewed thoroughly first - nowadays the first two properties should be enforced in every major operating system.
                                                                                                                                                                                                              I like the idea of a platform that continually evolves. pledge(2) and unveil(2) are the proof that with a little effort, you can secure existing software better than ever.
                                                                                                                                                                                                              I like the “sensible defaults” approach, having an OS ready to be used - UI included if you selected it during the setup process - is great.
                                                                                                                                                                                                              Just install a browser and you’re ready to go.
                                                                                                                                                                                                              Manual pages on OpenBSD are real manuals, not an extension of the “–help” command found in most CLI softwares. They help you understand inner workings of the operating system, no internet connection needed. There are some trade-offs, too.
                                                                                                                                                                                                              Performance is not first-class, mostly because of all the security mitigations and checks done at runtime.
                                                                                                                                                                                                              I write Go code in neovim, and sometimes you can feel a slight slowdown when you’re compiling and editing multiple files at the same time, but usually I can’t notice any meaningful difference. Browsers are a different matter though, you can definitely feel something differs from the experience you can have on mainstream operating systems. But again, trade-offs.
                                                                                                                                                                                                              To use OpenBSD on the desktop you must be ready to sacrifice some of the goodies of mainstream OSes, but if you’re searching for a zen place to do your computing stuff, it’s the best you can get right now.

                                                                                                                                                                                                              ###The history of file type information being available in Unix directories

                                                                                                                                                                                                              The two things that Unix directory entries absolutely have to have are the name of the directory entry and its ‘inode’, by which we generically mean some stable kernel identifier for the file that will persist if it gets renamed, linked to other directories, and so on. Unsurprisingly, directory entries have had these since the days when you read the raw bytes of directories with read(), and for a long time that was all they had; if you wanted more than the name and the inode number, you had to stat() the file, not just read the directory. Then, well, I’ll quote myself from an old entry on a find optimization:

                                                                                                                                                                                                              […], Unix filesystem developers realized that it was very common for programs reading directories to need to know a bit more about directory entries than just their names, especially their file types (find is the obvious case, but also consider things like ‘ls -F’). Given that the type of an active inode never changes, it’s possible to embed this information straight in the directory entry and then return this to user level, and that’s what developers did; on some systems, readdir(3) will now return directory entries with an additional d_type field that has the directory entry’s type.
                                                                                                                                                                                                              On Twitter, I recently grumbled about Illumos not having this d_type field. The ensuing conversation wound up with me curious about exactly where d_type came from and how far back it went. The answer turns out to be a bit surprising due to there being two sides of d_type.
                                                                                                                                                                                                              On the kernel side, d_type appears to have shown up in 4.4 BSD. The 4.4 BSD /usr/src/sys/dirent.h has a struct dirent that has a d_type field, but the field isn’t documented in either the comments in the file or in the getdirentries(2) manpage; both of those admit only to the traditional BSD dirent fields. This 4.4 BSD d_type was carried through to things that inherited from 4.4 BSD (Lite), specifically FreeBSD, but it continued to be undocumented for at least a while.
                                                                                                                                                                                                              (In FreeBSD, the most convenient history I can find is here, and the d_type field is present in sys/dirent.h as far back as FreeBSD 2.0, which seems to be as far as the repo goes for releases.)
                                                                                                                                                                                                              Documentation for d_type appeared in the getdirentries(2) manpage in FreeBSD 2.2.0, where the manpage itself claims to have been updated on May 3rd 1995 (cf). In FreeBSD, this appears to have been part of merging 4.4 BSD ‘Lite2’, which seems to have been done in 1997. I stumbled over a repo of UCB BSD commit history, and in it the documentation appears in this May 3rd 1995 change, which at least has the same date. It appears that FreeBSD 2.2.0 was released some time in 1997, which is when this would have appeared in an official release.
                                                                                                                                                                                                              In Linux, it seems that a dirent structure with a d_type member appeared only just before 2.4.0, which was released at the start of 2001. Linux took this long because the d_type field only appeared in the 64-bit ‘large file support’ version of the dirent structure, and so was only return by the new 64-bit getdents64() system call. This would have been a few years after FreeBSD officially documented d_type, and probably many years after it was actually available if you peeked at the structure definition.
                                                                                                                                                                                                              As far as I can tell, d_type is present on Linux, FreeBSD, OpenBSD, NetBSD, Dragonfly BSD, and Darwin (aka MacOS or OS X). It’s not present on Solaris and thus Illumos. As far as other commercial Unixes go, you’re on your own; all the links to manpages for things like AIX from my old entry on the remaining Unixes appear to have rotted away.
                                                                                                                                                                                                              Sidebar: The filesystem also matters on modern Unixes
                                                                                                                                                                                                              Even if your Unix supports d_type in directory entries, it doesn’t mean that it’s supported by the filesystem of any specific directory. As far as I know, every Unix with d_type support has support for it in their normal local filesystems, but it’s not guaranteed to be in all filesystems, especially non-Unix ones like FAT32. Your code should always be prepared to deal with a file type of DT_UNKNOWN.
                                                                                                                                                                                                              It’s also possible to have things the other way around, where you have a filesystem with support for file type information in directories that’s on a Unix that doesn’t support it. There are a number of plausible reasons for this to happen, but they’re either obvious or beyond the scope of this entry.

                                                                                                                                                                                                              ###Multiboot Pinebook KDE neon

                                                                                                                                                                                                              Recently a KDE neon image for the Pinebook was announced. There is a new image, with a handful of fixes, which the KDE Plasma team has been working on over the past week and a half.

                                                                                                                                                                                                              Here’s a picture of my Pinebook running KDE neon — watching Panic! At the Disco’s High Hopes — sitting in front of my monitor that’s hooked up to one of my openSUSE systems. There are still some errata, and watching video sucks up battery, but for hacking on documentation from my hammock in the garden, or doing IRC meetings it’s a really nice machine.
                                                                                                                                                                                                              But one of the neat things about running KDE neon off of an SD card on the Pinebook is that it’s portable — that SD card can move around. So let’s talk about multiboot in the sense of “booting the same OS storage medium in different hardware units” rather than “booting different OS from a medium in a single hardware unit”. On these little ARM boards, u-boot does all the heavy lifting early in the boot process. So to re-use the KDE neon Pinebook image on another ARM board, the u-boot blocks need to be replaced.
                                                                                                                                                                                                              I have the u-boot from a Pine64 image (I forget what) lying around, 1015 blocks of 1024 bytes, which I can dd over the u-boot blocks on the SD card, dd bs=1k conv=notrunc,sync if=uboot.img of=/dev/da0 seek=8, and then the same SD card, with the filesystem and data from the Pinebook, will boot on the Pine64 board. Of course, to move the SD card back again, I need to restore the Pinebook u-boot blocks.
                                                                                                                                                                                                              Here’s a picture of my Pineboard (the base is a piece of the garden fence, it’s Douglas pine, with 4mm threaded rods acting as the corner posts for my Pine64 mini-rack), with power and network and a serial console attached, along with the serial console output of the same.
                                                                                                                                                                                                              The nice thing here is that the same software stack runs on the Pine64 but then has a wired network — which in turn means that if I switch on the other boards in that mini-rack, I’ve got a distcc-capable cluster for fast development, and vast NFS storage (served from ZFS on my FreeBSD machines) for source. I can develop in a high(er) powered environment, and then swap the card around into the Pinebook for testing-on-the-go.
                                                                                                                                                                                                              So to sum up: you can multiboot the KDE neon Pinebook image on other Pine64 hardware (i.e. the Pine64 board). To do so, you need to swap around u-boot blocks. The blocks can be picked out of an image built for each board, and then a particular image (e.g. the latest KDE neon Pinebook) can be run on either board.

                                                                                                                                                                                                              ##Beastie Bits

                                                                                                                                                                                                              • Unexpected benefit with Ryzen – reducing power for build server
                                                                                                                                                                                                              • Happy #CIDRDay!
                                                                                                                                                                                                              • Absolute FreeBSD 3e ship date
                                                                                                                                                                                                              • MWL FreeBSD talk @ October 9th 2018 - MUG Meeting
                                                                                                                                                                                                              • MeetBSD Oct 19-20
                                                                                                                                                                                                              • October’s London *BSD meetup - 9th Oct 2018
                                                                                                                                                                                                              • NRW BUG Meeting at Trivago Oct. 9
                                                                                                                                                                                                              • Lars Wittebrood blogs about his visit to EuroBSDCon 2018
                                                                                                                                                                                                              • EuroBSDcon 2018 OpenBSD slides available
                                                                                                                                                                                                              • EuroBSDCon conference site has most slides as well
                                                                                                                                                                                                              • ##Feedback/Questions

                                                                                                                                                                                                                • Brad - Unmounted ZFS sends
                                                                                                                                                                                                                • Niclas - Report from a Meetup
                                                                                                                                                                                                                • Ghislain - Bhyve not used?
                                                                                                                                                                                                                • Shane - zpool history and snapshots
                                                                                                                                                                                                                  • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                                                                                                                                                                  • 1 hr 15 min
                                                                                                                                                                                                                  • Episode 265: Software Disenchantment | BSD Now 265

                                                                                                                                                                                                                    We report from our experiences at EuroBSDcon, disenchant software, LLVM 7.0.0 has been released, Thinkpad BIOS update options, HardenedBSD Foundation announced, and ZFS send vs. rsync.

                                                                                                                                                                                                                    ##Headlines

                                                                                                                                                                                                                    ###[FreeBSD DevSummit & EuroBSDcon 2018 in Romania]

                                                                                                                                                                                                                    • Your hosts are back from EuroBSDcon 2018 held in Bucharest, Romania this year. The first two days of the conference are used for tutorials and devsummits (FreeBSD and NetBSD), while the last two are for talks.
                                                                                                                                                                                                                    • Although Benedict organized the devsummit in large parts, he did not attend it this year. He held his Ansible tutorial in the morning of the first day, followed by Niclas Zeising’s new ports and poudriere tutorial (which had a record attendance). It was intended for beginners that had never used poudriere before and those who wanted to create their first port. The tutorial was well received and Niclas already has ideas for extending it for future conferences.
                                                                                                                                                                                                                    • On the second day, Benedict took Kirk McKusick’s “An Introduction to the FreeBSD Open-Source Operating System” tutorial, held as a one full day class this year. Although it was reduced in content, it went into enough depth of many areas of the kernel and operating system to spark many questions from attendees. Clearly, this is a good start into kernel programming as Kirk provides enough material and backstories to understand why certain things are implemented as they are.
                                                                                                                                                                                                                    • Olivier Robert took [https://www.talegraph.com/tales/l2o9ltrvsE](pictures from the devsummit) and created a nice gallery out of it.
                                                                                                                                                                                                                    • Devsummit evenings saw dinners at two restaurants that allowed developers to spend some time talking over food and drinks.
                                                                                                                                                                                                                    • The conference opened on the next day with the opening session held by Mihai Carabas. He introduced the first keynote speaker, a colleague of his who presented “Lightweight virtualization with LightVM and Unikraft”.
                                                                                                                                                                                                                    • Benedict helped out at the FreeBSD Foundation sponsor table and talked to people. He saw the following talks in between:
                                                                                                                                                                                                                    • Selfhosting as an alternative to the public cloud (by Albert Dengg)

                                                                                                                                                                                                                      Using Boot Environments at Scale (by Allan Jude)
                                                                                                                                                                                                                      Livepatching FreeBSD kernel (by Maciej Grochowski)
                                                                                                                                                                                                                      FreeBSD: What to (Not) Monitor (by Andrew Fengler)
                                                                                                                                                                                                                      FreeBSD Graphics (by Niclas Zeising)

                                                                                                                                                                                                                      • Allan spent a lot of time talking to people and helping track down issues they were having, in addition to attending many talks:
                                                                                                                                                                                                                      • Hacking together a FreeBSD presentation streaming box – For as little as possible (by Tom Jones)

                                                                                                                                                                                                                        Introduction of FreeBSD in new environments (by Baptiste Daroussin)
                                                                                                                                                                                                                        Keynote: Some computing and networking historical perspectives (by Ron Broersma)
                                                                                                                                                                                                                        Livepatching FreeBSD kernel (by Maciej Grochowski)
                                                                                                                                                                                                                        FreeBSD: What to (Not) Monitor (by Andrew Fengler)
                                                                                                                                                                                                                        Being a BSD user (by Roller Angel)
                                                                                                                                                                                                                        From “Hello World” to the VFS Layer: building a beadm for DragonFly BSD (by Michael Voight)

                                                                                                                                                                                                                      • We also met the winner of our Power Bagel raffle from Episode 2^8. He received the item in the meantime and had it with him at the conference, providing a power outlet to charge other people’s devices.
                                                                                                                                                                                                                      • During the closing session, GroffTheBSDGoat was handed over to Deb Goodkin, who will bring the little guy to the Grace Hopper Celebration of Women in Computing conference and then to MeetBSD later this year. It was also revealed that next year’s EuroBSDcon will be held in Lillehammer, Norway.
                                                                                                                                                                                                                      • Thanks to all the speakers, helpers, sponsors, organizers, and attendees for making it a successful conferences. There were no talks recorded this year, but the slides will be uploaded to the EuroBSDcon website in a couple of weeks. The OpenBSD talks are already available, so check them out.
                                                                                                                                                                                                                      • ###Software disenchantment

                                                                                                                                                                                                                        I’ve been programming for 15 years now. Recently our industry’s lack of care for efficiency, simplicity, and excellence started really getting to me, to the point of me getting depressed by my own career and the IT in general.

                                                                                                                                                                                                                        Modern cars work, let’s say for the sake of argument, at 98% of what’s physically possible with the current engine design. Modern buildings use just enough material to fulfill their function and stay safe under the given conditions. All planes converged to the optimal size/form/load and basically look the same.
                                                                                                                                                                                                                        Only in software, it’s fine if a program runs at 1% or even 0.01% of the possible performance. Everybody just seems to be ok with it. People are often even proud about how much inefficient it is, as in “why should we worry, computers are fast enough”:
                                                                                                                                                                                                                        @tveastman: I have a Python program I run every day, it takes 1.5 seconds. I spent six hours re-writing it in rust, now it takes 0.06 seconds. That efficiency improvement means I’ll make my time back in 41 years, 24 days :-)
                                                                                                                                                                                                                        You’ve probably heard this mantra: “programmer time is more expensive than computer time”. What it means basically is that we’re wasting computers at an unprecedented scale. Would you buy a car if it eats 100 liters per 100 kilometers? How about 1000 liters? With computers, we do that all the time.

                                                                                                                                                                                                                        • Everything is unbearably slow
                                                                                                                                                                                                                        • Look around: our portable computers are thousands of times more powerful than the ones that brought man to the moon. Yet every other webpage struggles to maintain a smooth 60fps scroll on the latest top-of-the-line MacBook Pro. I can comfortably play games, watch 4K videos but not scroll web pages? How is it ok?

                                                                                                                                                                                                                          Google Inbox, a web app written by Google, running in Chrome browser also by Google, takes 13 seconds to open moderately-sized emails:
                                                                                                                                                                                                                          It also animates empty white boxes instead of showing their content because it’s the only way anything can be animated on a webpage with decent performance. No, decent doesn’t mean 60fps, it’s rather “as fast as this web page could possibly go”. I’m dying to see web community answer when 120Hz displays become mainstream. Shit barely hits 60Hz already.
                                                                                                                                                                                                                          Windows 10 takes 30 minutes to update. What could it possibly be doing for that long? That much time is enough to fully format my SSD drive, download a fresh build and install it like 5 times in a row.
                                                                                                                                                                                                                          Pavel Fatin: Typing in editor is a relatively simple process, so even 286 PCs were able to provide a rather fluid typing experience.
                                                                                                                                                                                                                          Modern text editors have higher latency than 42-year-old Emacs. Text editors! What can be simpler? On each keystroke, all you have to do is update tiny rectangular region and modern text editors can’t do that in 16ms. It’s a lot of time. A LOT. A 3D game can fill the whole screen with hundreds of thousands (!!!) of polygons in the same 16ms and also process input, recalculate the world and dynamically load/unload resources. How come?
                                                                                                                                                                                                                          As a general trend, we’re not getting faster software with more features. We’re getting faster hardware that runs slower software with the same features. Everything works way below the possible speed. Ever wonder why your phone needs 30 to 60 seconds to boot? Why can’t it boot, say, in one second? There are no physical limitations to that. I would love to see that. I would love to see limits reached and explored, utilizing every last bit of performance we can get for something meaningful in a meaningful way.

                                                                                                                                                                                                                          • Everything is HUUUUGE
                                                                                                                                                                                                                          • And then there’s bloat. Web apps could open up to 10× faster if you just simply block all ads. Google begs everyone to stop shooting themselves in their feet with AMP initiative—a technology solution to a problem that doesn’t need any technology, just a little bit of common sense. If you remove bloat, the web becomes crazy fast. How smart do you have to be to understand that?

                                                                                                                                                                                                                            Android system with no apps takes almost 6 Gb. Just think for a second how obscenely HUGE that number is. What’s in there, HD movies? I guess it’s basically code: kernel, drivers. Some string and resources too, sure, but those can’t be big. So, how many drivers do you need for a phone?
                                                                                                                                                                                                                            Windows 95 was 30Mb. Today we have web pages heavier than that! Windows 10 is 4Gb, which is 133 times as big. But is it 133 times as superior? I mean, functionally they are basically the same. Yes, we have Cortana, but I doubt it takes 3970 Mb. But whatever Windows 10 is, is Android really 150% of that?
                                                                                                                                                                                                                            Google keyboard app routinely eats 150 Mb. Is an app that draws 30 keys on a screen really five times more complex than the whole Windows 95? Google app, which is basically just a package for Google Web Search, is 350 Mb! Google Play Services, which I do not use (I don’t buy books, music or videos there)—300 Mb that just sit there and which I’m unable to delete.
                                                                                                                                                                                                                            All that leaves me around 1 Gb for my photos after I install all the essential (social, chats, maps, taxi, banks etc) apps. And that’s with no games and no music at all! Remember times when an OS, apps and all your data fit on a floppy?
                                                                                                                                                                                                                            Your desktop todo app is probably written in Electron and thus has userland driver for Xbox 360 controller in it, can render 3d graphics and play audio and take photos with your web camera.
                                                                                                                                                                                                                            A simple text chat is notorious for its load speed and memory consumption. Yes, you really have to count Slack in as a resource-heavy application. I mean, chatroom and barebones text editor, those are supposed to be two of the less demanding apps in the whole world. Welcome to 2018.
                                                                                                                                                                                                                            At least it works, you might say. Well, bigger doesn’t imply better. Bigger means someone has lost control. Bigger means we don’t know what’s going on. Bigger means complexity tax, performance tax, reliability tax. This is not the norm and should not become the norm. Overweight apps should mean a red flag. They should mean run away scared.

                                                                                                                                                                                                                            • Better world manifesto
                                                                                                                                                                                                                            • I want to see progress. I want change. I want state-of-the-art in software engineering to improve, not just stand still. I don’t want to reinvent the same stuff over and over, less performant and more bloated each time. I want something to believe in, a worthy end goal, a future better than what we have today, and I want a community of engineers who share that vision.

                                                                                                                                                                                                                              What we have today is not progress. We barely meet business goals with poor tools applied over the top. We’re stuck in local optima and nobody wants to move out. It’s not even a good place, it’s bloated and inefficient. We just somehow got used to it.
                                                                                                                                                                                                                              So I want to call it out: where we are today is bullshit. As engineers, we can, and should, and will do better. We can have better tools, we can build better apps, faster, more predictable, more reliable, using fewer resources (orders of magnitude fewer!). We need to understand deeply what are we doing and why. We need to deliver: reliably, predictably, with topmost quality. We can—and should–take pride in our work. Not just “given what we had…”—no buts!
                                                                                                                                                                                                                              I hope I’m not alone at this. I hope there are people out there who want to do the same. I’d appreciate if we at least start talking about how absurdly bad our current situation in the software industry is. And then we maybe figure out how to get out.

                                                                                                                                                                                                                              ##News Roundup

                                                                                                                                                                                                                              ###[llvm-announce] LLVM 7.0.0 Release

                                                                                                                                                                                                                              I am pleased to announce that LLVM 7 is now available.
                                                                                                                                                                                                                              Get it here: https://llvm.org/releases/download.html#7.0.0
                                                                                                                                                                                                                              The release contains the work on trunk up to SVN revision 338536 plus
                                                                                                                                                                                                                              work on the release branch. It is the result of the community's work
                                                                                                                                                                                                                              over the past six months, including: function multiversioning in Clang
                                                                                                                                                                                                                              with the 'target' attribute for ELF-based x86/x86_64 targets, improved
                                                                                                                                                                                                                              PCH support in clang-cl, preliminary DWARF v5 support, basic support
                                                                                                                                                                                                                              for OpenMP 4.5 offloading to NVPTX, OpenCL C++ support, MSan, X-Ray
                                                                                                                                                                                                                              and libFuzzer support for FreeBSD, early UBSan, X-Ray and libFuzzer
                                                                                                                                                                                                                              support for OpenBSD, UBSan checks for implicit conversions, many
                                                                                                                                                                                                                              long-tail compatibility issues fixed in lld which is now production
                                                                                                                                                                                                                              ready for ELF, COFF and MinGW, new tools llvm-exegesis, llvm-mca and
                                                                                                                                                                                                                              diagtool. And as usual, many optimizations, improved diagnostics, and
                                                                                                                                                                                                                              bug fixes.
                                                                                                                                                                                                                              For more details, see the release notes:
                                                                                                                                                                                                                              https://llvm.org/releases/7.0.0/docs/ReleaseNotes.html
                                                                                                                                                                                                                              https://llvm.org/releases/7.0.0/tools/clang/docs/ReleaseNotes.html
                                                                                                                                                                                                                              https://llvm.org/releases/7.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html
                                                                                                                                                                                                                              https://llvm.org/releases/7.0.0/tools/lld/docs/ReleaseNotes.html
                                                                                                                                                                                                                              Thanks to everyone who helped with filing, fixing, and code reviewing
                                                                                                                                                                                                                              for the release-blocking bugs!
                                                                                                                                                                                                                              Special thanks to the release testers and packagers: Bero
                                                                                                                                                                                                                              Rosenkränzer, Brian Cain, Dimitry Andric, Jonas Hahnfeld, Lei Huang
                                                                                                                                                                                                                              Michał Górny, Sylvestre Ledru, Takumi Nakamura, and Vedant Kumar.
                                                                                                                                                                                                                              For questions or comments about the release, please contact the
                                                                                                                                                                                                                              community on the mailing lists. Onwards to LLVM 8!
                                                                                                                                                                                                                              Cheers,
                                                                                                                                                                                                                              Hans

                                                                                                                                                                                                                              ###Update your Thinkpad’s bios with Linux or OpenBSD

                                                                                                                                                                                                                              • Get your new bios
                                                                                                                                                                                                                              • At first, go to the Lenovo website and download your new bios:

                                                                                                                                                                                                                                • Go to lenovo support
                                                                                                                                                                                                                                • Use the search bar to find your product (example for me, x270)
                                                                                                                                                                                                                                • Choose the right product (if necessary) and click search
                                                                                                                                                                                                                                • On the right side, click on Update Your System
                                                                                                                                                                                                                                • Click on BIOS/UEFI
                                                                                                                                                                                                                                • Choose *BIOS Update (Bootable CD) for Windows *
                                                                                                                                                                                                                                • Download
                                                                                                                                                                                                                                • For me the file is called like this : r0iuj25wd.iso

                                                                                                                                                                                                                                  • Extract bios update
                                                                                                                                                                                                                                  • Now you will need to install geteltorito.

                                                                                                                                                                                                                                    • With OpenBSD:
                                                                                                                                                                                                                                    • $ doas pkg_add geteltorito

                                                                                                                                                                                                                                      quirks-3.7 signed on 2018-09-09T13:15:19Z
                                                                                                                                                                                                                                      geteltorito-0.6: ok

                                                                                                                                                                                                                                      • With Debian:
                                                                                                                                                                                                                                      • $ sudo apt-get install genisoimage

                                                                                                                                                                                                                                        • Now we will extract the bios update :
                                                                                                                                                                                                                                        • $ geteltorito -o bios_update.img r0iuj25wd.iso

                                                                                                                                                                                                                                          Booting catalog starts at sector: 20
                                                                                                                                                                                                                                          Manufacturer of CD: NERO BURNING ROM VER 12
                                                                                                                                                                                                                                          Image architecture: x86
                                                                                                                                                                                                                                          Boot media type is: harddisk
                                                                                                                                                                                                                                          El Torito image starts at sector 27 and has 43008 sector(s) of 512 Bytes

                                                                                                                                                                                                                                          Image has been written to file "bios_update.img".
                                                                                                                                                                                                                                          This will create a file called bios_update.img.

                                                                                                                                                                                                                                          • Put the image on an USB key
                                                                                                                                                                                                                                          • CAREFULL : on my computer, my USB key is sda1 on Linux and sd1 on OpenBSD.
                                                                                                                                                                                                                                          • Please check twice on your computer the name of your USB key.

                                                                                                                                                                                                                                            • With OpenBSD :
                                                                                                                                                                                                                                            • $ doas dd if=bios_update.img of=/dev/rsd1c

                                                                                                                                                                                                                                              • With Linux :
                                                                                                                                                                                                                                              • $ sudo dd if=bios_update.img of=/dev/sda

                                                                                                                                                                                                                                                Now all you need is to reboot, to boot on your USB key and follow the instructions. Enjoy 😉

                                                                                                                                                                                                                                                ###Announcing The HardenedBSD Foundation

                                                                                                                                                                                                                                                In June of 2018, we announced our intent to become a not-for-profit, tax-exempt 501©(3) organization in the United States. It took a dedicated team months of work behind-the-scenes to make that happen. On 06 September 2018, HardenedBSD Foundation Corp was granted 501©(3) status, from which point all US-based persons making donations can deduct the donation from their taxes.

                                                                                                                                                                                                                                                We are grateful for those who contribute to HardenedBSD in whatever way they can. Thank you for making HardenedBSD possible. We look forward to a bright future, driven by a helpful and positive community.

                                                                                                                                                                                                                                                ###How you migrate ZFS filesystems matters

                                                                                                                                                                                                                                                If you want to move a ZFS filesystem around from one host to another, you have two general approaches; you can use ‘zfs send’ and ‘zfs receive’, or you can use a user level copying tool such as rsync (or ‘tar -cf | tar -xf’, or any number of similar options). Until recently, I had considered these two approaches to be more or less equivalent apart from their convenience and speed (which generally tilted in favour of ‘zfs send’). It turns out that this is not necessarily the case and there are situations where you will want one instead of the other.

                                                                                                                                                                                                                                                We have had two generations of ZFS fileservers so far, the Solaris ones and the OmniOS ones. When we moved from the first generation to the second generation, we migrated filesystems across using ‘zfs send’, including the filesystem with my home directory in it (we did this for various reasons). Recently I discovered that some old things in my filesystem didn’t have file type information in their directory entries. ZFS has been adding file type information to directories for a long time, but not quite as long as my home directory has been on ZFS.
                                                                                                                                                                                                                                                This illustrates an important difference between the ‘zfs send’ approach and the rsync approach, which is that zfs send doesn’t update or change at least some ZFS on-disk data structures, in the way that re-writing them from scratch from user level does. There are both positives and negatives to this, and a certain amount of rewriting does happen even in the ‘zfs send’ case (for example, all of the block pointers get changed, and ZFS will re-compress your data as applicable).
                                                                                                                                                                                                                                                I knew that in theory you had to copy things at the user level if you wanted to make sure that your ZFS filesystem and everything in it was fully up to date with the latest ZFS features. But I didn’t expect to hit a situation where it mattered in practice until, well, I did. Now I suspect that old files on our old filesystems may be partially missing a number of things, and I’m wondering how much of the various changes in ‘zfs upgrade -v’ apply even to old data.
                                                                                                                                                                                                                                                (I’d run into this sort of general thing before when I looked into ext3 to ext4 conversion on Linux.)
                                                                                                                                                                                                                                                With all that said, I doubt this will change our plans for migrating our ZFS filesystems in the future (to our third generation fileservers). ZFS sending and receiving is just too convenient, too fast and too reliable to give up. Rsync isn’t bad, but it’s not the same, and so we only use it when we have to (when we’re moving only some of the people in a filesystem instead of all of them, for example).
                                                                                                                                                                                                                                                PS: I was going to try to say something about what ‘zfs send’ did and didn’t update, but having looked briefly at the code I’ve concluded that I need to do more research before running my keyboard off. In the mean time, you can read the OpenZFS wiki page on ZFS send and receive, which has plenty of juicy technical details.
                                                                                                                                                                                                                                                PPS: Since eliminating all-zero blocks is a form of compression, you can turn zero-filled files into sparse files through a ZFS send/receive if the destination has compression enabled. As far as I know, genuine sparse files on the source will stay sparse through a ZFS send/receive even if they’re sent to a destination with compression off.

                                                                                                                                                                                                                                                ##Beastie Bits

                                                                                                                                                                                                                                                • BSD Users Stockholm Meetup #4: Tuesday, November 13, 2018 at 18:00
                                                                                                                                                                                                                                                • BSD Poland User Group: Next Meeting: October 11, 2018, 18:15 - 21:15 at Warsaw University of Technology
                                                                                                                                                                                                                                                • n2k18 Hackathon report: Ken Westerback (krw@) on disklabel(8) work, dhclient(8) progress
                                                                                                                                                                                                                                                • Running MirageOS Unikernels on OpenBSD in vmm (Now Works)
                                                                                                                                                                                                                                                • vmm(4) gets support for qcow2
                                                                                                                                                                                                                                                • MeetBSD and SecurityBsides
                                                                                                                                                                                                                                                • Colin Percival reduced FreeBSD startup time from 10627ms (11.2) to 4738ms (12.0)
                                                                                                                                                                                                                                                • FreeBSD 11.1 end-of-life
                                                                                                                                                                                                                                                • KnoxBug: Monday, October 1, 2018 at 18:00: Real-world Performance Advantages of NVDIMM and NVMe: Case Study with OpenZFS
                                                                                                                                                                                                                                                • ##Feedback/Questions

                                                                                                                                                                                                                                                  • Todd - 2 Nics, 1 bhyve and a jail cell
                                                                                                                                                                                                                                                  • Thomas - Deep Dive
                                                                                                                                                                                                                                                  • Morgan - Send/Receive to Manage Fragmentation?
                                                                                                                                                                                                                                                  • Dominik - hierarchical jails -> networking
                                                                                                                                                                                                                                                    • Send questions, comments, show ideas/topics, or stories you want mentioned on the show to [email protected]
                                                                                                                                                                                                                                                    • 1 hr 42 min

                                                                                                                                                                                                                                                    About BSD Now

                                                                                                                                                                                                                                                    From the publisher's feed

                                                                                                                                                                                                                                                    Created by three guys who love BSD, we cover the latest news and have an extensive series of tutorials, as well as interviews with various people from all areas of the BSD community. It also serves as…

                                                                                                                                                                                                                                                    More shows like BSD Now

                                                                                                                                                                                                                                                    The Changelog: Software Development, Open Source by Changelog Media

                                                                                                                                                                                                                                                    The Changelog: Software Development, Open Source

                                                                                                                                                                                                                                                    286 Listeners

                                                                                                                                                                                                                                                    Security Now (Audio) by TWiT

                                                                                                                                                                                                                                                    Security Now (Audio)

                                                                                                                                                                                                                                                    2,011 Listeners

                                                                                                                                                                                                                                                    MacBreak Weekly (Audio) by TWiT

                                                                                                                                                                                                                                                    MacBreak Weekly (Audio)

                                                                                                                                                                                                                                                    2,018 Listeners

                                                                                                                                                                                                                                                    Accidental Tech Podcast by Marco Arment, Casey Liss, John Siracusa

                                                                                                                                                                                                                                                    Accidental Tech Podcast

                                                                                                                                                                                                                                                    2,144 Listeners

                                                                                                                                                                                                                                                    LINUX Unplugged by Jupiter Broadcasting

                                                                                                                                                                                                                                                    LINUX Unplugged

                                                                                                                                                                                                                                                    272 Listeners

                                                                                                                                                                                                                                                    Risky Business by Risky Business Media

                                                                                                                                                                                                                                                    Risky Business

                                                                                                                                                                                                                                                    374 Listeners

                                                                                                                                                                                                                                                    Late Night Linux by The Late Night Linux Family

                                                                                                                                                                                                                                                    Late Night Linux

                                                                                                                                                                                                                                                    169 Listeners

                                                                                                                                                                                                                                                    Darknet Diaries by Jack Rhysider

                                                                                                                                                                                                                                                    Darknet Diaries

                                                                                                                                                                                                                                                    8,063 Listeners

                                                                                                                                                                                                                                                    Behind the Bastards by Cool Zone Media and iHeartPodcasts

                                                                                                                                                                                                                                                    Behind the Bastards

                                                                                                                                                                                                                                                    15,564 Listeners

                                                                                                                                                                                                                                                    Linux Dev Time by The Late Night Linux Family

                                                                                                                                                                                                                                                    Linux Dev Time

                                                                                                                                                                                                                                                    22 Listeners

                                                                                                                                                                                                                                                    2.5 Admins by The Late Night Linux Family

                                                                                                                                                                                                                                                    2.5 Admins

                                                                                                                                                                                                                                                    98 Listeners

                                                                                                                                                                                                                                                    Linux After Dark by The Late Night Linux Family

                                                                                                                                                                                                                                                    Linux After Dark

                                                                                                                                                                                                                                                    29 Listeners

                                                                                                                                                                                                                                                    This Day in AI Podcast by Michael Sharkey, Chris Sharkey

                                                                                                                                                                                                                                                    This Day in AI Podcast

                                                                                                                                                                                                                                                    221 Listeners

                                                                                                                                                                                                                                                    Linux Matters by Linux Matters

                                                                                                                                                                                                                                                    Linux Matters

                                                                                                                                                                                                                                                    22 Listeners

                                                                                                                                                                                                                                                    Better Offline by Cool Zone Media and iHeartPodcasts

                                                                                                                                                                                                                                                    Better Offline

                                                                                                                                                                                                                                                    608 Listeners