Julian Andres Klode: APT 1.5 is out
Filed under: Debian, Ubuntu
A maintenance update RcppGSL 0.3.3 is now on CRAN. It switched the vignette to the our new pinp package and its two-column pdf default.
The RcppGSL package provides an interface from R to the GNU GSL using the Rcpp package.
No user-facing new code or features were added. The NEWS file entries follow below:
Courtesy of CRANberries, a summary of changes to the most recent release is available. More information is on the RcppGSL page. Questions, comments etc should go to the issue tickets at the GitHub repo.Changes in version 0.3.3 (2017-09-24)
- We also check for
gsl-configat package load.- The vignette now uses the pinp package in two-column mode.
- Minor other fixes to package and testing infrastructure.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A new version of the RcppCNPy package arrived on CRAN yesterday.
RcppCNPy provides R with read and write access to NumPy files thanks to the cnpy library by Carl Rogers.
This version updates internals for function registration, but otherwise mostly switches the vignette over to the shiny new pinp two-page template and package.
CRANberries also provides a diffstat report for the latest release. As always, feedback is welcome and the best place to start a discussion may be the GitHub issue tickets page.Changes in version 0.2.7 (2017-09-22)
- Vignette updated to Rmd and use of
pinppackage- File
src/init.cadded for dynamic registration
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A bug-fix release RcppClassic 0.9.8 for the very recent 0.9.7 release which fixes a build issue on macOS introduced in 0.9.7. No other changes.
Courtesy of CRANberries, there are changes relative to the previous release.
Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
systemctl status [unitname [unitname..]] show status of one or more units,
or of the whole system. Glob patterns also work: systemctl status "systemd-fsck@*"systemctl list-units or just systemctl show a table with all units, their
status and their descriptionsystemctl list-sockets lists listening sockets managed by systemd and what
they activatesystemctl list-timers lists timer-activated units, with information about
when they last ran and when they will run againsystemctl is-active [pattern] checks if one or more units are in active statesystemctl is-enabled [pattern] checks if one or more units are enabledsystemctl is-failed [pattern] checks if one or more units are in failed statesystemctl list-dependencies [unitname] lists the dependencies of a unit, or
a system-wide dependency treesystemctl is-system-running check if the system is running correctly, or if
some unit is in a failed statesystemd-cgtop like top
but processes are aggregated by unitsystemd-analyze produces reports on boot time, per-unit boot time charts,
dependency graphs, and moreservice command,
systemctl provides commands to start/stop/restart/reload units or services:
start: starts a unit if it is not already startedstop: stops a unitrestart: starts or restarts a unitreload: tell a unit to reload its configuration (if it supports it)try-restart: restarts a unit only if it is already active, otherwise do nothing, to prevent accidentally starting a servicereload-or-restart: tell a unit to reload its configuration if supported, otherwise restart ittry-reload-or-restart: tell a unit to reload its configuration if supported, otherwise restart it. If the unit is not already active, do nothing to prevent accidentally starting a service.systemctl has halt, poweroff, reboot, suspend, hibernate, and
hybrid-sleep commands to tell systemd to reboot, power off, suspend and so
on. kexec and switch-root also work.
The rescue and emergency commands switch the system to rescue and emergency
mode (see man systemd.special.
systemctl default switches to the default mode, which also happens when
exiting the rescue or emergency shell.
Run services at boot
systemd does not implement runlevels, and services start at boot based on their
dependencies.
To start a service at boot, you add to its .service file a WantedBy=
dependency on a well-known .target unit.
At boot, systemd brings up the whole chain of dependency started from a default
unit, and that will eventually activate also your service.
See systemctl get-default for what unit is currently the default in your
system. You can change it via the systemd.unit= kernel command line,
so you can configure multiple entries in the boot loader that boot the system
running different services. For example systemd.unit=rescue.target for a
rescue mode, systemd.unit=multi-user.target for a non-graphical mode, or add
your own .target file to implement new system modes.
See systemctl list-units -t target --all for a list of all currently
available targets in your system.
systemctl enable unitname enables the unit to start at boot, by creating
symlinks to it in the .wants directory of the units listed in its
WantedBy= configurationsystemctl disable unitname removes the symlinks created by enablesystemctl reenable unitname removes and readds the symlinks for when you
changed WantedBy=systemctl start activates a unit right now, but does not automatically
enable it at boot
systemctl enable enables a unit at boot, but does not automatically start
it right now
* a disabled unit can still be activated if another unit depends on it
To disable a unit so that it will never get started even if another unit
depends on it, use systemctl mask unitname. Use systemctl unmask unitname
to undo the masking.
Reloading / restarting systemd
systemctl daemon-reload tells systemd to reload its configuration.
systemctl daemon-reexec tells systemd to restart iself.
So previously I've documented the setup of the Debian-Administration website, and now I'm going to retire it I'm planning how that will work.
There are currently 12 servers powering the site:
events can be retired immediately. redis will go when I turn off logins, as there will be no need for sessions/cookies. beta is only used for development, so I'll kill that too. Once logins are gone, and anonymous content is disabled there will be no need to send out emails, so mailer can be shutdown.
That leaves a bunch of hosts left:
public to do the routingweb1-web4 to do the serving.mod_rewrite redirections in place, and reworking all of them would be a pain. Suspect this is something that will be done in the future, maybe next year.
A first update 0.0.2 of the pinp package arrived on CRAN just a few days after the initial release.
We added a new vignette for the package (see below), extended a few nice features, and smoothed a few corners.
Courtesy of CRANberries, there is a comparison to the previous release. More information is on the tint page. For questions or comments use the issue tracker off the GitHub repo.Changes in tint version 0.0.2 (2017-09-20)
- The YAML segment can be used to select font size, one-or-two column mode, one-or-two side mode, linenumbering and watermarks (#21 and #26 addressing #25)
- If
pinp.clsorjss.bstare not present, they are copied in ((#27 addressing #23)- Output is now in shaded framed boxen too (#29 addressing #28)
- Endmatter material is placed in
template.tex(#31 addressing #30)- Expanded documentation of YAML options in
skeleton.Rmdand clarified available one-column option (#32).- Section numbering can now be turned on and off (#34)
- The default bibliography style was changed to
jss.bst.- A short explanatory vignette was added.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
The PATHspider software I maintain as part of my work
depends on some features in cURL and in
PycURL that have
only
just been mereged or are still
awaiting merge. I need to build a
docker container that includes these as Debian packages, so I need to quickly
build an APT repository.
A Debian repository can essentially be seen as a static website and the
contents are GPG signed so it doesn t necessarily need to be hosted somewhere
trusted (unless availability is critical for your application). I host my blog
with Netlify, a static website host, and I figured they
would be perfect for this use case. They also support open source
projects.
There is a CLI tool for netlify which you can install with:
sudo apt install npm
sudo npm install -g netlify-cli
The basic steps for setting up a repository are:
mkdir repository
cp /path/to/*.deb repository/
cd repository
apt-ftparchive packages . > Packages
apt-ftparchive release . > Release
gpg --clearsign -o InRelease Release
netlify deploy
Once you ve followed these steps, and created a new site on Netlify, you ll be
able to manage this site also through the web interface. A few things you might
want to do are set up a custom domain name for your repository, or enable HTTPS
with Let s Encrypt. (Make sure you have apt-transport-https if you re going
to enable HTTPS though.)
To add this repository to your apt sources:
gpg --export -a YOURKEYID sudo apt-key add -
echo "deb https://SUBDOMAIN.netlify.com/ /" sudo tee -a /etc/apt/sources.list
sudo apt update
You ll now find that those packages are installable. Beware of APT
pinning as you may find that the newer
versions on your repository are not actually the preferred versions according
to your policy.
Update: If you re wanting a solution that would be more suitable for regular use, take a look at repropro. If you re wanting to have end-users add your apt repository as a third-party repository to their system, please take a look at this page on the Debian wiki which contains advice on how to instruct users to use your repository.
Update 2: Another commenter has pointed out aptly, which offers a greater feature set and removes some of the restrictions imposed by repropro. I ve never use aptly myself so can t comment on specifics, but from the website it looks like it might be a nicely polished tool.
Many voices arise now and then against risks linked to the Github use by Free Software projects. Yet the infatuation for the collaborative forge of the Octocat Californian start-ups doesn t seem to fade away.
These recent years, Github and its services take an important role in software engineering as they are seen as easy to use, efficient for a daily workload with interesting functions in enterprise collaborative workflow or amid a Free Software project. What are the arguments against using its services and are they valid? We will list them first, then we ll examine their validity.
The Github application belongs to a single entity, Github Inc, a US company which manage it alone. So, a unique company under US legislation manages the access to most of Free Software application code sources, which may be a problem with groups using it when a code source is no longer available, for political or technical reason.
This centralization leads to another trouble: as it obtained critical mass, it becomes more and more difficult not having a Github account. People who don t use Github, by choice or not, are becoming a silent minority. It is now fashionable to use Github, and not doing so is seen as out of date . The same phenomenon is a classic, and even the norm, for proprietary social networks (Facebook, Twitter, Instagram).
When you interact with Github, you are using a proprietary software, with no access to its source code and which may not work the way you think it is. It is a problem at different levels. First, ideologically, but foremost in practice. In the Github case, we send them code we can control outside of their interface. We also send them personal information (profile, Github interactions). And mostly, Github forces any project which goes through the US platform to use a crucial proprietary tools: its bug tracking system.

Windows, the epitome of proprietary software, even if others took the same path
Working with Github interface seems easy and intuitive to most. Lots of companies now use it as a source repository, and many developers leaving a company find the same Github working environment in the next one. This pervasive presence of Github in free software development environment is a part of the uniformization of said developers working space.

Uniforms always bring Army in my mind, here the Clone army
As said above, nowadays, Github is the main repository of Free Software source code. As such it is a favorite target for cyberattacks. DDOS hit it in March and August 2015. On December 15, 2015, an outage led to the inaccessibility of 5% of the repositories. The same occurred on November 15. And these are only the incident reported by Github itself. One can imagine that the mean outage rate of the platform is underestimated.
Today many dependency maintenance tools, as npm for javascript, Bundler for Ruby or even pip for Python can access an application source code directly from Github. Free Software projects getting more and more linked and codependents, if one component is down, all the developing process stop.
One of the best examples is the npmgate. Any company could legally demand that Github take down some source code from its repository, which could create a chain reaction and blocking the development of many Free Software projects, as suffered the Node.js community from the decisions of Npm, Inc, the company managing npm.
Github didn t appear out of the blue. In his time, its predecessor, SourceForge, was also extremely popular.
Heavily centralized, based on strong interaction with the community, SourceForge is now seen as an aging SAAS (Software As A Service) and sees most of its customers fleeing to Github. Which creates lots of hurdles for those who stayed. The Gimp project suffered from spams and terrible advertising, which led to the departure of the VLC project, then from installers corrupted with adwares instead of the official Gimp installer for Windows. And finally, the Project Gimp s SourceForge account was hacked by SourceForge team itself!
These are very recent examples of what can do a commercial entity when it is under its stakeholders pressure. It is vital to really understand what it means to trust them with data and exchange centralization, where it could have tremendous repercussion on the day-to-day life and the habits of the Free Software and open source community.
Mostly based on ideology, this point deals with the definition every member of the community gives to Free Software and open source. Mostly about one thing: is it viral or not? Or GPL vs MIT/BSD.
Those on the side of the viral Free Software will have trouble to use a proprietary software as this last one shouldn t even exist. It must be assimilated, to quote Star Trek, as it is a connected black box, endangering privacy, corrupting for profit our uses and restrain our freedom to use as we re pleased what we own, etc.
Those on the side of complete freedom have no qualms using proprietary software as their very existence is a consequence of freedom without restriction. They even agree that code they developed may be a part of proprietary software, which is quite a common occurrence. This part of the Free Software community has no qualm using Github, which is well within their ideology parameters. Just take a look at the Janson amphitheater during Fosdem and check how many Apple laptops running on macOS are around.
Even without ideological consideration, and just focusing on Github infrastructure, the bug tracking system is a major problem by itself.
Bug report builds the memory of Free Software projects. It is the entrance point for new contributors, the place to find bug reporting, requests for new functions, etc. The project history can t be limited only to the code. It s very common to find bug reports when you copy and paste an error message in a search engine. Not their historical importance is precious for the project itself, but also for its present and future users.
Github gives the ability to extract bug reports through its API. What would happen if Github is down or if the platform doesn t support this feature anymore? In my opinion, not that many projects ever thought of this outcome. How could they move all the data generated by Github into a new bug tracking system? One old example now is Astrid, a TODO list bought by Yahoo a few years ago. Very popular, it grew fast until it was closed overnight, with only a few weeks for its users to extract their data. It was only a to-do list. The same situation with Github would be tremendously difficult to manage for several projects if they even have the ability to deal with it. Code would still be available and could still live somewhere else, but the project memory would be lost. A project like Debian has today more than 800,000 bug reports, which are a data treasure trove about problems solved, function requests and where the development stand on each. The developers of the Cpython project have anticipated the problem and decided not to use Github bug tracking systems.

Issues, the Github proprietary bug tracking system
Another thing we could lose if Github suddenly disappear: all the work currently done regarding the push requests (aka PRs). This Github function gives the ability to clone one project s Github repository, to modify it to fit your needs, then to offer your own modification to the original repository. The original repository s owner will then review said modification, and if he or she agrees with them will fuse them into the original repository. As such, it s one of the main advantages of Github, since it can be done easily through its graphic interface.
However reviewing all the PRs may be quite long, and most of the successful projects have several ongoing PRs. And this PRs and/or the proprietary bug tracking system are commonly used as a platform for comment and discussion between developers.
Code itself is not lost if Github is down (except one specific situation as seen below), but the peer review works materialized in the PRs and the bug tracking system is lost. Let s remember than the PR mechanism let you clone and modify projects and then generate PRs directly from its proprietary web interface without downloading a single code line on your computer. In this particular case, if Github is down, all the code and the work in progress is lost. Some also use Github as a bookmark place. They follow their favorite projects activity through the Watch function. This technological watch style of data collection would also be lost if Github is down.

Debian, one of the main Free Software projects with at least a thousand official contributors
The Free Software community is walking a thigh rope between normalization needed for an easier interoperability between its products and an attraction for novelty led by a strong need for differentiation from what is already there.
Github popularized the use of Git, a great tool now used through various sectors far away from its original programming field. Step by step, Git is now so prominent it s almost impossible to even think to another source control manager, even if awesome alternate solutions, unfortunately not as popular, exist as Mercurial.
A new Free Software project is now a Git repository on Github with README.md added as a quick description. All the other solutions are ostracized? How? None or very few potential contributors would notice said projects. It seems very difficult now to encourage potential contributors into learning a new source control manager AND a new forge for every project they want to contribute. Which was a basic requirement a few years ago. It s quite sad because Github, offering an original experience to its users, cut them out of a whole possibility realm. Maybe Github is one of the best web versioning control systems. But being the main one doesn t let room for a new competitor to grow. And it let Github initiate development newcomers into a narrow function set, totally unrelated to the strength of the Git tool itself.
Fight against centralization is a main part of the Free Software ideology as centralization strengthens the power of those who manage it and who through it control those who are managed by it. Uniformization allergies born against main software companies and their wishes to impose a closed commercial software world was for a long time the main fuel for innovation thirst and intelligent alternative development. As we said above, part of the Free Software community was built as a reaction to proprietary software and their threat. The other part, without hoping for their disappearance, still chose a development model opposite to proprietary software, at least in the beginning, as now there s more and more bridges between the two.
The Github effect is a morbid one because of its consequences: at least centralization, uniformization, proprietary software usage as their bug tracking system. But some years ago the Dear Github buzz showed one more side effect, one I ve never thought about: laziness. For those who don t know what it is about, this letter is a complaint from several spokespersons from several Free Software projects which demand to Github team to finally implement, after years of polite asking, new functions. Since when Free Software project facing a roadblock request for clemency and don t build themselves the path they need? When Torvalds was involved in the Bitkeeper problem and the Linux kernel development team couldn t use anymore their revision control software, he developed Git. The mere fact of not being able to use one tool or functions lacking is the main motivation to seek alternative solutions and, as such, of the Free Software movement. Every Free Software community member able to code should have this reflex. You don t like what Github offers? Switch to Gitlab. You don t like it Gitlab? Improve it or make your own solution.

The Gitlab logo
Let s be crystal clear. I ve never said that every Free Software developers blocked should code his or her own alternative. We all have our own priorities, and some of us even like their beauty sleep, including me. But, to see that this open letter to Github has 1340 names attached to it, among them some spokespersons for major Free Software project showed me that need, willpower and strength to code a replacement are here. Maybe said replacement will be born from this letter, it would be the best outcome of this buzz.
In the end, Github usage is just another example of Internet usage massification. As Internet users are bound to go to massively centralized social network as Facebook or Twitter, developers are following the same path with Github. Even if a large fraction of developers realize the threat linked this centralized and proprietary organization, the whole community is following this centralization and uniformization trend. Github service is useful, free or with a reasonable price (depending on the functions you need) easy to use and up most of the time. Why would we try something else? Maybe because others are using us while we are savoring the convenience? The Free Software community seems to be quite sleepy to me.

The lion enjoying the hearth warm
A rather boring and otherwise uneventful release 0.9.7 of RcppClassic is now at CRAN. This package provides a maintained version of the otherwise deprecated first Rcpp API; no new projects should use it.
Once again no changes in user-facing code. But this makes it the first package to use the very new and shiny pinp package as the backend for its vignette, now converted to Markdown---see here for this new version. We also updated three sources files for tabs versus spaces as the current g++ version complained (correctly !!) about misleading indents. Otherwise a file src/init.c was added for dynamic registration, the Travis CI runner script was updated to using run.sh from our r-travis fork, and we now strip the library after they have been built. Again, no user code changes.
And no iterate: nobody should use this package. Rcpp is so much better in so many ways---this one is simply available as we (quite strongly) believe that APIs are contracts, and as such we hold up our end of the deal.
Courtesy of CRANberries, there are changes relative to the previous release.
Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A brandnew and very exciting (to us, at least) package called pinp just arrived on CRAN, following a somewhat unnecessarily long passage out of incoming. It is based on the PNAS LaTeX Style offered by the Proceeding of the National Academy of Sciences of the United States of America, or PNAS for short. And there is already a Markdown version in the wonderful rticles packages.
But James Balamuta and I thought we could do one better when we were looking to typeset our recent PeerJ Prepint as an attractive looking vignette for use within the Rcpp package.
And so we did by changing a few things (font, color, use of natbib and Chicago.bst for references, removal of a bunch of extra PNAS-specific formalities from the frontpage) and customized a number of other things for easier use by vignettes directly from the YAML header (draft mode watermark, doi or url for packages, easier author naming in footer, bibtex file and more).
We are quite pleased with the result which seems ready for the next Rcpp release---see e.g., these two teasers:
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A new version of drat arrived earlier today on CRAN as another no-human-can-delay-this automatic upgrade directly from the CRAN prechecks. It is mostly a maintenance release ensuring PACKAGES.rds is also updated, plus some minor other edits.
drat stands for drat R Archive Template, and helps with easy-to-create and easy-to-use repositories for R packages. Since its inception in early 2015 it has found reasonably widespread adoption among R users because repositories with marked releases is the better way to distribute code.
The NEWS file summarises the release as follows:
Courtesy of CRANberries, there is a comparison to the previous release. More detailed information is on the drat page.Changes in drat version 0.1.3 (2017-09-16)
- Ensure
PACKAGES.rds, if present, is also inserted in repo- Updated 'README.md' removing stale example URLs (#63)
- Use https to fetch Travis CI script from r-travis
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
Whilst anyone can inspect the source code of free software for malicious flaws, most software is distributed pre-compiled to end users. The motivation behind the Reproducible Builds effort is to allow verification that no flaws have been introduced either maliciously or accidentally during this compilation process.
As part of this project I wrote a script to determine which packages installed on your system are "reproducible" or not:
$ apt install devscripts [ ] $ reproducible-check [ ] W: subversion (1.9.7-2) is unreproducible (libsvn-perl, libsvn1, subversion) <https://tests.reproducible-builds.org/debian/subversion> W: taglib (1.11.1+dfsg.1-0.1) is unreproducible (libtag1v5, libtag1v5-vanilla) <https://tests.reproducible-builds.org/debian/taglib> W: tcltk-defaults (8.6.0+9) is unreproducible (tcl, tk) <https://tests.reproducible-builds.org/debian/tcltk-defaults> W: tk8.6 (8.6.7-1) is unreproducible (libtk8.6, tk8.6) <https://tests.reproducible-builds.org/debian/tk8.6> W: valgrind (1:3.13.0-1) is unreproducible <https://tests.reproducible-builds.org/debian/valgrind> W: wavpack (5.1.0-2) is unreproducible (libwavpack1) <https://tests.reproducible-builds.org/debian/wavpack> W: x265 (2.5-2) is unreproducible (libx265-130) <https://tests.reproducible-builds.org/debian/x265> W: xen (4.8.1-1+deb9u1) is unreproducible (libxen-4.8, libxenstore3.0) <https://tests.reproducible-builds.org/debian/xen> W: xmlstarlet (1.6.1-2) is unreproducible <https://tests.reproducible-builds.org/debian/xmlstarlet> W: xorg-server (2:1.19.3-2) is unreproducible (xserver-xephyr, xserver-xorg-core) <https://tests.reproducible-builds.org/debian/xorg-server> 282/4494 (6.28%) of installed binary packages are unreproducible.
$ reproducible-check --raw dd-list --stdin Alec Leamas <leamas.alec@gmail.com> lirc (U) Alessandro Ghedini <ghedo@debian.org> valgrind Alessio Treglia <alessio@debian.org> fluidsynth (U) libsoxr (U) [ ]
A new and much enhanced version of RcppMsgPack arrived on CRAN a couple of days ago. It came together following this email to the r-package-devel list which made it apparent that Travers Ching had been working on MessagePack converters for R which required the very headers I had for use from, inter alia, the RcppRedis package.
So we joined our packages. I updated the headers in RcppMsgPack to the current upstream version 2.1.5 of MessagePack, and Travers added his helper functions allow direct packing / unpacking of MessagePack objects at the R level, as well as tests and a draft vignette. Very exciting, and great to have a coauthor!
So now RcppMspPack provides R with both MessagePack header files for use via C++ (or C, if you must) packages such as RcppRedis --- and direct conversion routines at the R prompt.
MessagePack itself is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it is faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.
Courtesy of CRANberries, there is also a diffstat report for this release. More information is on the RcppRedis page. More information may be on the RcppMsgPack page. Issues and bugreports should go to the GitHub issue tracker.Changes in version 0.2.0 (2017-09-07)
- Added support for building on Windows
- Upgraded to MsgPack 2.1.5 (#3)
- New R functions to manipulate MsgPack objects: msgpack_format, msgpack_map, msgpack_pack, msgpack_simplify, mgspack_unpack (#4)
- New R functions also available as msgpackFormat, msgpackMap, msgpackPack, msgpackSimplify, mgspackUnpack (#4)
- New vignette (#4)
- New tests (#4)
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A new minor release of RcppRedis arrived on CRAN last week, following the release 0.2.0 of RcppMsgPack which brought the MsgPack headers forward to release 2.1.5. This required a minor and rather trivial change in the code. When the optional RcppMsgPack package is used, we now require this version 0.2.0 or later.
We made a few internal updates to the package as well.
Courtesy of CRANberries, there is also a diffstat report for this release. More information is on the RcppRedis page.Changes in version 0.1.8 (2017-09-08)
- A new file
init.cwas added with calls toR_registerRoutines()andR_useDynamicSymbols()- Symbol registration is enabled in
useDynLib- Travis CI was updated to using
run.sh- The (optional MessagePack) code was updated for MsgPack 2.*
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
(reference version at: https://www.beuc.net/zed/)
.zed archive file format
Introduction
Archives with the .zed extension are conceptually similar to an
encrypted .zip file.
In addition to a specific format, .zed files support multiple users:
files are encrypted using the archive master key, which itself is
encrypted for each user and/or authentication method (password, RSA
key through certificate or PKCS#11 token). Metadata such as filenames
is partially encrypted.
.zed archives are used as stand-alone or attached to e-mails with the
help of a MS Outlook plugin. A variant, which is not covered here,
can encrypt/decrypt MS Windows folders on the fly like
ecryptfs.
In the spirit of academic and independent research this document
provides a description of the file format and encryption algorithms
for this encrypted file archive.
See the conventions section for
conventions and acronyms used in this document.
Structure overview
The .zed file format is composed of several layers.
+----------------------------------------------------------------------------------------------------+
.zed archive (MS-CBF)
stream #1 stream #2 stream #3...
+------------------------------+ +---------------------------+ +---------------------------+
metadata (MS-OLEPS) encryption (AES) encryption (AES)
512-bytes chunks 512-bytes chunks
+--------------------------+
obfuscation (static key) +-----------------------+ +-----------------------+
+----------------------+ - compression (zlib) - - compression (zlib) -
_ctlfile (TLV) ...
+----------------------+ +---------------+ +---------------+
+--------------------------+ file contents file contents
+--------------------------+ - +---------------+ - - +---------------+ -
_catalog (TLV)
+--------------------------+ +-----------------------+ +-----------------------+
+------------------------------+ +---------------------------+ +---------------------------+
+----------------------------------------------------------------------------------------------------+
Encryption schemes
Several AES key sizes are supported, such as 128 and 256 bits.
The Cipher Block Chaining (CBC) block cipher mode of operation is used
to decrypt multiple AES 16-byte blocks, which means an initialisation
vector (IV) is stored in clear along with the ciphertext.
All filenames and file contents are encrypted using the same
encryption mode, key and IV (e.g. if you remove and re-add a file in
the archive, the resulting stream will be identical).
No cleartext padding is used during encryption; instead, several
end-of-stream handlers are available, so the ciphertext has exactly
the size of the cleartext (e.g. the size of the compressed file).
The following variants were identified in the 'encryption_mode'
field.
STREAM
This is the end-of-stream handler for:
Initial offset: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Shuffled offset: 3 2 1 0 5 4 7 6 8 9 10 11 12 13 14 15
The 16th byte is usually a NUL byte, hence the stream identifier is a
30-character-long string.
Decrypting files
The compressed stream is split in chunks of 512 bytes, each of them
encrypted separately using AES CBS and the global archive encryption
scheme. Decryption uses the global AES key (retrieved using the user
credentials), and the global IV (retrieved from the deobfuscated
archive metadata).
The IV for each chunk is computed by:
(reference version at: https://www.beuc.net/zed/)
.zed archive file format
Introduction
Archives with the .zed extension are conceptually similar to an
encrypted .zip file.
In addition to a specific format, .zed files support multiple users:
files are encrypted using the archive master key, which itself is
encrypted for each user and/or authentication method (password, RSA
key through certificate or PKCS#11 token). Metadata such as filenames
is partially encrypted.
.zed archives are used as stand-alone or attached to e-mails with the
help of a MS Outlook plugin. A variant, which is not covered here,
can encrypt/decrypt MS Windows folders on the fly like
ecryptfs.
In the spirit of academic and independent research this document
provides a description of the file format and encryption algorithms
for this encrypted file archive.
See the conventions section for
conventions and acronyms used in this document.
Structure overview
The .zed file format is composed of several layers.
+----------------------------------------------------------------------------------------------------+
.zed archive (MS-CBF)
stream #1 stream #2 stream #3...
+------------------------------+ +---------------------------+ +---------------------------+
metadata (MS-OLEPS) encryption (AES) encryption (AES)
512-bytes chunks 512-bytes chunks
+--------------------------+
obfuscation (static key) +-----------------------+ +-----------------------+
+----------------------+ - compression (zlib) - - compression (zlib) -
_ctlfile (TLV) ...
+----------------------+ +---------------+ +---------------+
+--------------------------+ file contents file contents
+--------------------------+ - +---------------+ - - +---------------+ -
_catalog (TLV)
+--------------------------+ +-----------------------+ +-----------------------+
+------------------------------+ +---------------------------+ +---------------------------+
+----------------------------------------------------------------------------------------------------+
Encryption schemes
Several AES key sizes are supported, such as 128 and 256 bits.
The Cipher Block Chaining (CBC) block cipher mode of operation is used
to decrypt multiple AES 16-byte blocks, which means an initialisation
vector (IV) is stored in clear along with the ciphertext.
All filenames and file contents are encrypted using the same
encryption mode, key and IV (e.g. if you remove and re-add a file in
the archive, the resulting stream will be identical).
No cleartext padding is used during encryption; instead, several
end-of-stream handlers are available, so the ciphertext has exactly
the size of the cleartext (e.g. the size of the compressed file).
The following variants were identified in the 'encryption_mode'
field.
STREAM
This is the end-of-stream handler for:
Initial offset: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Shuffled offset: 3 2 1 0 5 4 7 6 8 9 10 11 12 13 14 15
The 16th byte is usually a NUL byte, hence the stream identifier is a
30-character-long string.
Decrypting files
The compressed stream is split in chunks of 512 bytes, each of them
encrypted separately using AES CBS and the global archive encryption
scheme. Decryption uses the global AES key (retrieved using the user
credentials), and the global IV (retrieved from the deobfuscated
archive metadata).
The IV for each chunk is computed by:
I came across a folder with the most unexpected treasure trove: The text for my first ever public speech! (and some related materials)
I add to this very old stuff about Gunnar the four pages describing my game, Evitamono ("Avoid the monkey", approximately). I still remember the game quite vividly, including traumatic issues which were quite common back then; I wrote that the sprites were accidentally deleted twice and the game once . I remember several of my peers telling about such experiences. Well, that is good if you account for the second system syndrome!
I also found the amazing course material for how to program sound and graphics in the C64 BASIC. That was a course taken by ten year old kids. Kids that understood that you had to write [255,129,165,244,219,165,0,102] (see pages 3-5) into a memory location starting at 53248 to redefine a character so it looked as the graphic element you wanted. Of course, it was done with a set of POKEs, as everything in C64. Or that you could program sound by setting the seven SID registers for each of the three voices containing low frequency, high frequency, low pulse, high pulse, wave control, wave length, wave amplitude in memory locations 54272 through 54292... And so on and on and on...
And as a proof that I did take the course:
...I don't think I could make most of my current BSc students make sense out of what is in the manual. But, being a kid in the 1980s, that was the only way to get a computer to do what you wanted. Yay for primitivity! :-D
| Attachment | Size |
|---|---|
| Speech for "Evitamono" | 1.29 MB |
| Coursee material for sound and graphics programming in C64 BASIC | 15.82 MB |
| Proof that I was there! | 4.86 MB |
Next.