Debian comes with tons of fonts for all kinds of purposes,
you can easily list them all (almost) with: apt-cache search ^fonts-
Above you can see a nice composition with examples of several fonts.
The composition is published under the
MIT (Expat) license
and the source SVG (created with Inkscape) can be downloaded
here.
You will need the fonts to be installed in your system so the SVG is correctly rendered.
If you want to learn more you can have a look at the wiki page about fonts
(https://wiki.debian.org/Fonts),
and if you want to contribute or maintain fonts in Debian,
don't hesitate to join the Fonts Team!
the program code would be doing this:int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
According to the ;login: article, converting a C program to use TLS would normally modify only 5-10 lines in the code, which is amazing when compared to using for example the OpenSSL API. The project has set up the https://securesocketapi.org/ web site to spread the idea, and the code for a kernel module and the associated system daemon is available from two github repositories: ssa and ssa-daemon. Unfortunately there is no explicit license information with the code, so its copyright status is unclear. A request to solve this about it has been unsolved since 2018-08-17. I love the idea of extending socket() to gain TLS support, and understand why it is an advantage to implement this as a kernel module and system wide service daemon, but can not help to think that it would be a lot easier to get projects to move to this way of setting up TLS if it was done with a user space approach where programs wanting to use this API approach could just link with a wrapper library. I recommend you check out this simple and powerful approach to more secure network connections. :) As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TLS);
Preseeding is a very useful way of installing and pre-configuring a
Debian system in one go. You simply supply lots of the settings that
your new system will need up front, in a preseed
file. The installer will use those settings instead of asking
questions, and it will also pass on any extra settings via the debconf
database so that any further package setup will use them.
There is documentation about how to do this in the Debian wiki
at https://wiki.debian.org/DebianInstaller/Preseed,
and an example preseed file for our current stable release (Debian 10,
"buster") in
the release
notes.
One complaint I've heard is that it can be difficult to work out
exactly the right data to use in a preseed file, as the format is not
the easiest to work with by hand. It's also difficult to find
exactly what settings can be changed in a
preseed.
So, I've written a script to parse all the debconf templates in
each release in the Debian archive and dump all the possible settings
in each. I've put the results up online at
my debian-preseed site in
case it's useful. The data will be updated daily as needed to make
sure it's current.
Updated June 2020 - changed the URL for the
preseed site now I have a domain set up
at https://preseed.debian.net/.
fping -c $count -q -b $backoff -r $retry -4 -b $packetsize -t $timeout -i $mininterval -p $hostinterval $host [ $host ...]
... where those parameters are, by default:
$count is 20 (packets)$backoff is 1 (avoid exponential backoff)$timeout is 1.5s$mininterval is 0.01s (minimum wait interval between any target)$hostinterval is 1.5s (minimum wait between probes on a single target)apt install prometheus-blackbox-exporter
dpkg-reconfigure prometheus-blackbox-exporter
prometheus.yml (the default blackbox
exporter configuration is fine):
scrape_configs:
- job_name: blackbox
metrics_path: /probe
params:
module: [icmp]
scrape_interval: 5s
static_configs:
- targets:
- octavia.anarc.at
# hardcoded in DNS
- nexthop.anarc.at
- koumbit.net
- dns.google
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115 # The blackbox exporter's real hostname:port.
Notice how we lower the scrape_interval to 5 seconds to get more
samples. nexthop.anarc.at was added into DNS to avoid hardcoding
my upstream ISP's IP in my configuration.sum(probe_icmp_duration_seconds phase="rtt" ) by (instance)
Legend field to instance RTTDraw modes to lines and Mode options to staircaseLeft Y axis Unit to duration(s)Legend As table, with Min, Avg, Max and
Current enabled1-avg_over_time(probe_success[$__interval])!=0 or null
Legend field to instance packet lossAdd series override to Lines: false, Null point mode:
null, Points: true, Points Radius: 1, Color: deep red,
and, most importantly, Y-axis: 2Right Y axis Unit to percent (0.0-1.0) and set
Y-max to 1Repeat, on target,
vertically. And you need to add a target variable like
label_values(probe_success, instance).
Not bad, but not Smokeping
stddev(probe_icmp_duration_seconds phase="rtt",instance=~"$instance" )
stddev_over_time(probe_icmp_duration_seconds phase="rtt",instance=~"$instance" [$__interval])
stddev_over_time(probe_icmp_duration_seconds phase="rtt",instance=~"$instance" [1m])
The first two give zero for all samples. The latter works, but doesn't
look as good as Smokeping. So there might be something I'm missing.
SuperQ wrote a special exporter for this called
smokeping_prober that came out of this discussion in the blackbox
exporter. Instead of delegating scheduling and target definition
to Prometheus, the targets are set in the exporter.
They also take a different approach than Smokeping: instead of
recording the individual variations, they delegate that to Prometheus,
through the use of "buckets". Then they use a query like this:
histogram_quantile(0.9 rate(smokeping_response_duration_seconds_bucket[$__interval]))
This is the rationale to SuperQ's implementation:
Yes, I know about smokeping's bursts of pings. IMO, smokeping's data model is flawed that way. This is where I intentionally deviated from the smokeping exact way of doing things. This prober sends a smooth, regular series of packets in order to be measuring at regular controlled intervals. Instead of 20 packets, over 10 seconds, every minute. You send one packet per second and scrape every 15. This has the same overall effect, but the measurement is, IMO, more accurate, as it's a continuous stream. There's no 50 second gap of no metrics about the ICMP stream. Also, you don't get back one metric for those 20 packets, you get several. Min, Max, Avg, StdDev. With the histogram data, you can calculate much more than just that using the raw data. For example, IMO, avg and max are not all that useful for continuous stream monitoring. What I really want to know is the 90th percentile or 99th percentile. This smokeping prober is not intended to be a one-to-one replacement for exactly smokeping's real implementation. But simply provide similar functionality, using the power of Prometheus and PromQL to make it better. [...] one of the reason I prefer the histogram datatype, is you can use the heatmap panel type in Grafana, which is superior to the individual min/max/avg/stddev metrics that come from smokeping. Say you had two routes, one slow and one fast. And some pings are sent over one and not the other. Rather than see a wide min/max equaling a wide stddev, the heatmap would show a "line" for both routes.That's an interesting point. I have also ended up adding a heatmap graph to my dashboard, independently. And it is true it shows those "lines" much better... So maybe that, if we ignore legacy, we're actually happy with what we get, even with the plain blackbox exporter. So yes, we're missing pretty "fuzz" lines around the main lines, but maybe that's alright. It would be possible to do the equivalent to the InfluxDB hack, with queries like:
min_over_time(probe_icmp_duration_seconds phase="rtt",instance=~"$instance" [30s])
avg_over_time(probe_icmp_duration_seconds phase="rtt",instance=~"$instance" [5m])
max_over_time(probe_icmp_duration_seconds phase="rtt",instance=~"$instance" [30s])
The output looks something like this:
Looks more like Smokeping!
min_over_time function (incorrectly, IMHO)
returning zero. I haven't quite figured out how to fix that, and I'm
not sure it is better. But it does look more like Smokeping than the
previous graph.
Update: I forgot to mention one big thing that this setup is
missing. Smokeping has this nice feature that you can order and group
probe targets in a "folder"-like hierarchy. It is often used to group
probes by location, which makes it easier to scan a lot of
targets. This is harder to do in this setup. It might be possible to
setup location-specific "jobs" and select based on that, but it's not
exactly the same.
avg_over_time query idea.
Welcome to the May 2020 report from the Reproducible Builds project.
One of the original promises of open source software is that distributed peer review and transparency of process results in enhanced end-user security. Nonetheless, whilst anyone may inspect the source code of free and open source software for malicious flaws, almost all software today is distributed as pre-compiled binaries. This allows nefarious third-parties to compromise systems by injecting malicious code into seemingly secure software during the various compilation and distribution processes.
In these reports we outline the most important things that we and the rest of the community have been up to over the past month.
Recent years saw a number of supply chain attacks that leverage the increasing use of open source during software development, which is facilitated by dependency managers that automatically resolve, download and install hundreds of open source packages throughout the software life cycle.In related news, the LineageOS Android distribution announced that a hacker had access to the infrastructure of their servers after exploiting an unpatched vulnerability. Marcin Jachymiak of the Sia decentralised cloud storage platform posted on their blog that their
siac and siad utilities can now be built reproducibly:
This means that anyone can recreate the same binaries produced from our official release process. Now anyone can verify that the release binaries were created using the source code we say they were created from. No single person or computer needs to be trusted when producing the binaries now, which greatly reduces the attack surface for Sia users.Synchronicity is a distributed build system for Rust build artifacts which have been published to crates.io. The goal of Synchronicity is to provide a distributed binary transparency system which is independent of any central operator. The Comparison of Linux distributions article on Wikipedia now features a Reproducible Builds column indicating whether distributions approach and progress towards achieving reproducible builds.
binutils package ships its own, unreproducible, log files in its binary packages. It was followed-up by replies from Chris Lamb and Matthias Klose.
ocaml_cmti_files toolchain issue.
In Alpine Linux, an issue was filed and closed regarding the reproducibility of .apk packages.
Allan McRae of the ArchLinux project posted their third Reproducible builds progress report to the arch-dev-public mailing list which includes the following call for help:
We also need help to investigate and fix the packages that fail to reproduce that we have not investigated as of yet.In openSUSE, Bernhard M. Wiedemann published his monthly Reproducible Builds status update.
Chris Lamb made the changes listed below to diffoscope, our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. He also prepared and uploaded versions 142, 143, 144, 145 and 146 to Debian, PyPI, etc.
file now supports recognising JSON data. (#106).changes and .buildinfo handling to show all details (including the GnuPG header and footer components) even when referenced files are not present. (#122)BuildinfoFile comparator (etc.) regardless of whether the associated files (such as the orig.tar.gz and the .deb) are present. [ ].buildinfo, .changes, etc. [ ]apksigner(1). (#121).zip files. (#116).mobilepovision files. (#113)differences typo in the ApkFile handler. (#127)id="foo" anchor reference twice in the HTML output, otherwise identically-named parts will not be able to linked to via a #foo anchor. (#120)#. [ ]--json presenter; it will usually be too complicated to be readable by the human anyway. [ ]Command [ ] failed with exit code messages to remove duplicate exited with exit but also to note that diffoscope is interpreting this as an error. [ ]Command [ ] exited with 1 messages. (#126)debian Python module. [ ]stderr from if both commands emit the same output. [ ]apksigner test failures due to lack of binfmt_misc, eg. on Salsa CI and elsewhere. [ ].travis.yml as we use Salsa instead. [ ]Dockerfile improvements:
.dockerignore file to whitelist files we actually need in our container. (#105)ARG instead of ENV when setting up the DEBIAN_FRONTEND environment variable at runtime. (#103)build-essential during build so we can install the recommended packages from Git. [ ]shell=False keyword argument to subprocess.Popen so that the potentially-unsafe shell=True is more obvious. [ ]MissingFile s special handling of deb822 to prevent leaking through abstract layers. [ ][ ]try/except block when cleaning up temporary files with respect to the flake8 quality assurance tool. [ ]in_dsc_path to dsc_in_same_dir to clarify the use of this variable. [ ]debian_fallback class [ ] and add descriptions for the file types. [ ]Openssl command class to OpenSSLPKCS7 to accommodate other command names with this prefix. [ ]--debugger command-line argument to --pdb. [ ]stat(2) birth times (ie. st_birthtime) in the same way we do with the stat(1) command s Access: and Change: times to fix a nondeterministic build failure in GNU Guix. (#74)LibarchiveMember s has_same_content method was called regardless of the underlying type of file. [ ]
debian/py3dist-overrides to ensure the rpm-python module is used in package dependencies (#89) and moved to using the new execute_after_* and execute_before_* Debhelper rules [ ].
Chris Lamb also performed a huge overhaul of diffoscope s website:
absolute_url and relative_url where possible [ ][ ] and move a number of configuration variables to _config.yml [ ][ ].golang-packaging (toolchain issue, affecting times in minikube)jboss-logging-tools (toolchain issue, affecting date for resteasy)linux_logo (sort find output to avoid inheriting filesystem order)moonjit (generate reproducible output by default if SOURCE_DATE_EPOCH is set)vala (report ASLR nondeterminism)earlyoom (timestamps in Gzip files)fmt (Don t install sphinx-build cached files as they are unneeded & unreproducible)nvidia-settings (timestamp in Gzip files)ataqv.elinks.briquolo.cryptominisat.wolfssl.mistral.python-watcherclient.tree-puzzle.nulib2.process-cpp.bowtie2.properties-cpp.wand (forwarded upstream)vows.libstatgrab.texi2html.grub.systemtap.mono.mescc-tools: Inherit CFLAGS in a Makefile, allowing -ffile-prefix-map/-fdebug-prefix-map to sanitise build paths (merged upstream).1.8.1-1 to Debian unstable and Bernhard M. Wiedemann fixed an off-by-one error when parsing PNG image modification times. (#16)
In disorderfs, our FUSE-based filesystem that deliberately introduces non-determinism into directory system calls in order to flush out reproducibility issues, Chris Lamb replaced the term dirents in place of directory entries in human-readable output/log messages [ ] and used the astyle source code formatter with the default settings to the main disorderfs.cpp source file [ ].
Holger Levsen bumped the debhelper-compat level to 13 in disorderfs [ ] and reprotest [ ], and for the GNU Guix distribution Vagrant Cascadian updated the versions of disorderfs to version 0.5.10 [ ] and diffoscope to version 145 [ ].
libtool. [ ]_docs subdirectory to find the _docs/index.md file after an internal move. (#27)ltmain.sh etc. in preformatted quotes. [ ]SOURCE_DATE_EPOCH Python examples onto more lines to prevent visual overflow on the page. [ ]faketime to the project s Github page. (!57)
We operate a large and many-featured Jenkins-based testing framework that powers tests.reproducible-builds.org that, amongst many other tasks, tracks the status of our reproducibility efforts as well as identifies any regressions that have been introduced. Holger Levsen made the following changes:
let VARIABLE=0 exits with an error. [ ].buildinfo files with the same name. [ ]/usr merge variation on Debian unstable. [ ]molly-guard. [ ]debrebuild script. [ ][ ][ ][ ].buildinfo files. [ ][ ]
alpine_schroot.sh script now that a patch for abuild had been released upstream. [ ]
brcm47xx target to bcm47xx. [ ]
jenkins to run the blacklist command [ ] and the usual build node maintenance was performed was performed by Holger Levsen [ ][ ][ ], Mattia Rizzolo [ ][ ] and Vagrant Cascadian [ ][ ][ ].
Paul Spooren started a thread titled Reproducible Builds Verification Format which reopens the discussion around a schema for sharing the results from distributed rebuilders:
To make the results accessible, storable and create tools around them, they should all follow the same schema, a reproducible builds verification format. The format tries to be as generic as possible to cover all open source projects offering precompiled source code. It stores the rebuilder results of what is reproducible and what not.Hans-Christoph Steiner of the Guardian Project also continued his previous discussion regarding making our website translatable. Lastly, Leo Wandersleb posted a detailed request for feedback on a question of supply chain security and other issues of software review; Leo is the founder of the Wallet Scrutiny project which aims to prove the security of Android Bitcoin Wallets:
Do you own your Bitcoins or do you trust that your app allows you to use your coins while they are actually controlled by them ? Do you have a backup? Do they have a copy they didn t tell you about? Did anybody check the wallet for deliberate backdoors or vulnerabilities? Could anybody check the wallet for those?Elsewhere, Leo had posted instructions on his attempts to reproduce the binaries for the BlueWallet Bitcoin wallet for iOS and Android platforms.
#reproducible-builds on irc.oftc.net.
rb-general@lists.reproducible-builds.org
This month s report was written by Bernhard M. Wiedemann, Chris Lamb, Holger Levsen, Jelle van der Waa and Vagrant Cascadian. It was subsequently reviewed by a bunch of Reproducible Builds folks on IRC and the mailing list.
Here's a practical example of applying Template Haskell to reduce
the amount of boilerplate code that is otherwise required. I wrote the below
after following this excellent blog post by Matt Parsons. This post will be much higher-level, read
Matt's blog for the gorier details.
Liquorice
Liquorice is a toy project of mine from a few years ago that lets you
draw 2D geometric structures similar to LOGO. Liquorice offers two interfaces:
pure functions that operate on an explicit Context (the pen location:
existing lines, etc.), and a second "stateful" interface where the input and
output are handled in the background.
I prefix the pure ones P. and the stateful ones S. in this blog post for
clarity.
The stateful interface can be much nicer to use for larger drawings.
Compare example8b.hs,
written in terms of the pure functions, and the stateful equivalent
example8.hs.
The majority of the stateful functions are "wrapped" versions of the pure
functions. For example, the pure function P.step takes two numbers
and moves the pen forward and sideways. Its type signature is
P.step :: Int -> Int -> Context -> Context
Here's the signature and implementation of the stateful equivalent:
S.step :: Int -> Int -> State Context ()
S.step x y = modify (P.step x y)
Writing these wrapped functions for the 29 pure functions is boilerplate that
can be generated automatically with Template Haskell.
Generating the wrapper functions
Given the Name of a function to wrap, we construct an instance of FunD, the
TH data-type representing a function definition. We use the base name of the
incoming function as the name for the new one.
mkWrap fn = do
let name = mkName (nameBase fn)
return $ FunD name [ Clause (map VarP args) (NormalB rhs) [] ]
To determine how many arguments the wrapper function needs to accept, we need
to determine the input function's arity. We use Template Haskell's reify
function to get type information about the function, and derive the arity from
that. Matt Parson's covers this exactly in his blog.
info <- reify fn
let ty = (\(VarI _ t _ ) -> t) info
let n = arity ty - 1
args <- replicateM n (newName "arg")
We can use the list "args" directly in the clause part of the function
definition, as the data-type expects a list. For the right-hand side, we need
to convert from a list of arguments to function application. That's a simple
left-fold:
-- mkFnApp f [a,b,c] => ((f a) b) c => f a b c
mkFnApp = foldl (\e -> appE e . varE)
rhs <- [ modify $(mkFnApp (varE fn) args) :: State Context () ]
We use TH's oxford brackets for the definition of rhs. This permits us
to write real Haskell inside the brackets, and get an expression data-type
outside them. Within we have a splice (the $( )), which does the opposite:
the code is evaluated at compile time and generates an Exp that is then
converted into the equivalent Haskell code and spliced into place.
Finally, we need to apply the above to a list of Names. Sadly, we can't get at
the list of exported names from a Module automatically. There is an open
request for a TH extension for
this. In the meantime,
we export a list of the functions to wrap from the Pure module and operate
on that
import Liquorice.Pure
wrapPureFunctions = mapM mkWrap pureFns
Finally, we 'call' wrapPureFunctions at the top level in our state module
and Template Haskell splices all the function definitions into place.
The final code ended up only around 30 lines of code, and saved about the
same number of lines of boilerplate. But in doing this I noticed some missing
functions, and it will pay dividends if more pure functions are added.
Limitations
The current implementation has one significant limitation: it cannot handle
higher-order functions. An example of a pure higher-order function is
place, which moves the pen, performs an operation, and then moves it back:
P.place :: Int -> Int -> (Context -> Context) -> Context -> Context
Wrapping this is not sufficient because the higher-order parameter has
the pure function signature Context -> Context. If we wrapped it, the
stateful version of the function would accept a pure function as the
parameter, but you would expect it to accept another stateful function.
To handle these, at a minimum we would need to detect the function arguments
that have type Context -> Context and replace them with State Context ().
The right-hand side of the wrapped function would also need to do more work to
handle wrapping and unwrapping the parameter. I haven't spent much time
thinking about it but I'm not sure that a general purpose wrapper would work
for all higher-order functions. For the time being I've just re-implemented the
half-dozen of them.
For about two months I've been working on a new project, debplate,
which currently lives
at benh/debplate
on Salsa. This is a template system for Debian packages, primarily
intended to ease building multiple similar binary packages from a
single source. With some changes, it could also be useful for
making multiple source packages consistent
(issue
#9).
I want debplate to be capable of replacing the kernel team's
existing template system and a lot of its custom scripting, but it
is also meant to a general tool. I believe it's already capable of
supporting source packages with relatively simple needs, and there
are some examples of these in the debplate source. My long-term
goal is that debplate will replace most team-specific and
package-specific template systems, making those source packages
using it less unusual and easier to contribute to.
I gave
a short
talk about debplate at MiniDebConf Online on Sunday.
The eleventh release of littler as a CRAN package is now available, following in the fourteen-ish year history as a package started by Jeff in 2006, and joined by me a few weeks later.
littler is the first command-line interface for R as it predates Rscript. It allows for piping as well for shebang scripting via #!, uses command-line arguments more consistently and still starts faster. It also always loaded the methods package which Rscript only started to do in recent years.
littler lives on Linux and Unix, has its difficulties on macOS due to yet-another-braindeadedness there (who ever thought case-insensitive filesystems as a default where a good idea?) and simply does not exist on Windows (yet the build system could be extended see RInside for an existence proof, and volunteers are welcome!). See the FAQ vignette on how to add it to your PATH.
A few examples are highlighted at the Github repo, as well as in the examples vignette.
This release adds a new helper / example script installBioc.r for BioConductor package installation, generalizes the roxygenize() wrapper roxy.r a little, and polished a couple of other corners.
The NEWS file entry is below.
CRANberries provides a comparison to the previous release. Full details for the littler release are provided as usual at the ChangeLog page. The code is available via the GitHub repo, from tarballs and now of course also from its CRAN page and viaChanges in littler version 0.3.10 (2020-06-02)
- Changes in examples
- The
update.rscript only considers writeable directories.- The
rcc.rscript tries to report full logs by setting_R_CHECK_TESTS_NLINES_=0.- The
tt.rscript has an improvedncpufallback.- Several installation and updating scripts set
_R_SHLIB_STRIP_toTRUE.- A new script
installBioc.rwas added.- The
--erroroption toinstall2.rwas generalized (Sergio Oller in #78).- The
roxy.rscript was extended a little.- Changes in package
- Travis CI now uses R 4.0.0 and the bionic distro
install.packages("littler"). Binary packages are available directly in Debian as well as soon via Ubuntu binaries at CRAN thanks to the tireless Michael Rutter.
Comments and suggestions are welcome at the GitHub repo.
If you like this or other open-source work I do, you can now sponsor me at GitHub. For the first year, GitHub will match your contributions.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
ordered comparison between pointer and zero or oscar fails on a -Werror,-Wdeprecated-copy error.
Breaking the build later also highlighted some new classes of issues which didn't occur with clang < 10.some new symbols appeared in the symbols file or some symbols or patterns disappeared in the symbols file will NOT fail the build.
Unsurprisingly, all but one package (libktorrent) build.
Even if I am pessimistic, I reported a bug on dpkg-dev to evaluate if we could improve dpkg-gensymbol not to fail on these cases.
Imake.tmpl:2243:10: fatal error: ' X11 .rules' file not found with more than an hundred occurrences, reported upstream quite sometime ago.
Then, the big issues are going to be much harder to fix as they are real issues/warnings (with -Werror) in the code of the packages. Example: -Wc++11-narrowing & Wreserved-user-defined-literal... The list is long.apt install clang && CC=clang CXX=clang++ <build step> is good enough.
Here is my monthly update covering what I have been doing in the free software world during May 2020 (previous month):
icat command-line tool. (#659)
force_text method was deprecated favour of force_str. [...]
In Lintian, the static analysis tool for Debian packages:
$ misc:Pre-Depends) in the Depends field. (#961290)/usr/share/icons/hicolor as they will invariably clash with other packages. (#959855)Homepage fields in debian/control that point to known directory listing pages. (#960366)data/fields/perl-provides. [...]dh-sequence-gnome provides the services of dh_gnome and dh_gnome_clean. (#958500)no-dh-sequencer. (#960485)debian-rules-uses-as-needed-linker-flag tag as being pedantic & experimental until at least the release of Debian bullseye. (#959696)
One of the original promises of open source software is that distributed peer review and transparency of process results in enhanced end-user security. However, whilst anyone may inspect the source code of free and open source software for malicious flaws, almost all software today is distributed as pre-compiled binaries. This allows nefarious third-parties to compromise systems by injecting malicious code into ostensibly secure software during the various compilation and distribution processes.
The motivation behind the Reproducible Builds effort is to ensure no flaws have been introduced during this compilation process by promising identical results are always generated from a given source, thus allowing multiple third-parties to come to a consensus on whether a build was compromised.
The initiative is proud to be a member project of the Software Freedom Conservancy, a not-for-profit 501(c)(3) charity focused on ethical technology and user freedom.
Conservancy acts as a corporate umbrella allowing projects to operate as non-profit initiatives without managing their own corporate structure. If you like the work of the Conservancy or the Reproducible Builds project, please consider becoming an official supporter.
disorderfs.cpp file [...].
Elsewhere in our tooling, I made the following changes to diffoscope, our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues, including preparing and uploading versions 142, 143, 144, 145 and 146 to Debian:
file now supports recognising JSON data. (#106).changes and .buildinfo handling to show all details (including the GnuPG header and footer components) even when referenced files are not present. (#122)BuildinfoFile comparator (etc.) regardless of whether the associated files (such as the orig.tar.gz and the .deb) are present. [...].buildinfo, .changes, etc. [...]apksigner(1). (#121).zip files. (#116).mobilepovision files. (#113)id="foo" anchor reference twice in the HTML output, otherwise identically-named parts will not be able to linked to via a #foo anchor. (#120)#. [...]--json presenter; it will usually be too complicated to be readable by the human anyway. [...]Command [ ] failed with exit code messages to remove duplicate exited with exit but also to note that diffoscope is interpreting this as an error. [...]Command [ ] exited with 1 messages. (#126)debian Python module. [...]stderr from if both commands emit the same output. [...]Dockerfile improvements:
.dockerignore file to whitelist files we actually need in our container. (#105)ARG instead of ENV when setting up the DEBIAN_FRONTEND environment variable at runtime. (#103)build-essential during build so we can install the recommended packages from Git. [...]shell=False keyword argument to subprocess.Popen so that the potentially-unsafe shell=True is more obvious. [...]MissingFile's special handling of deb822 to prevent leaking through abstract layers. [...][...]try/except block when cleaning up temporary files with respect to the flake8 quality assurance tool. [...]in_dsc_path to dsc_in_same_dir to clarify the use of this variable. [...]debian_fallback class [...] and add descriptions for the file types. [...]Openssl command class to OpenSSLPKCS7 to accommodate other command names with this prefix. [...]--debugger command-line argument to --pdb. [...]stat(2) "birth times" (ie. st_birthtime) in the same way we do with the stat(1) command's Access: and Change: times to fix a nondeterministic build failure in GNU Guix. (#74)
I also performed a huge overhaul of diffoscope's website:
absolute_url and relative_url where possible [...][...] and move a number of configuration variables to _config.yml [...][...].
_docs subdirectory to find the _docs/index.md file after an internal move. (#27)ltmain.sh etc. in preformatted quotes. [...]SOURCE_DATE_EPOCH Python examples onto more lines to prevent visual overflow on the page. [...]freerdp, keystone, nginx, tcpreplay & thunderbird, as well as tended to the general upkeep of the dla-needed.txt and ela-needed.txt files, adding various notes, references, attributions and citations.
ntp network time protocol server/client. ntp allowed an "off-path" attacker to block unauthenticated synchronisation via a server mode packet with a spoofed source IP address because transmissions were rescheduled even if a packet lacked a valid "origin timestamp".
resetAccumulator() function which would lead to a crash via a segmentation fault.
I filed the following bug reports in Debian this month:
apksigner: Uses en-dashes (U+2013) in manpage over two hyphens. (#960778)
devscripts: dd-list -nou results in "unknown option: [ ]". (#960891)
node-redis: autopkgtest regressions against Redis 6.x. (#960105)
3.0.6-1) New upstream bugfix release.
6.0.0-1 New upstream "General Availability" release.6.0.0-2 Mark an autopkgtest as being flaky for now.6.0.1-1, 6.0.1-2 & 6.0.1-2~bpo10+1 New upstream "General Availability" releases.6.0.3-1 & 6.0.3-1~bpo10+1 New upstream "General Availability" releases.1.6.6-1) New upstream release, fixing a build failure on s390x and similar architectures. (#960459)
1.7-1) New upstream release & move to debhelper-compat level 13.
4.7.7-1), also uploading it to buster-backports.
Something I ve found myself doing as the pandemic rolls on is picking
out and (re-)reading through sections of the GNU Emacs
manual and the
GNU Emacs Lisp reference
manual. This
has got me (too) interested in some of the recent history of Emacs
development, and I did some digging into archives of emacs-devel from
2008 (15M
mbox) regarding the change to turn Transient Mark mode on by default
and set mark-even-if-inactive to true by default in Emacs 23.1.
It s not always clear which objections to turning on Transient Mark
mode by default take into account the mark-even-if-inactive change.
I think that turning on Transient Mark mode along with
mark-even-if-inactive is a good default. The question that remains
is whether the disadvantages of Transient Mark mode are significant
enough that experienced Emacs users should consider altering Emacs
default behaviour to mitigate them. Here s one popular blog arguing
for some
mitigations.
How might Transient Mark mode be disadvantageous?
The suggestion is that it makes using the mark for navigation rather
than for acting on regions less convenient:
C-SPC C-SPC, rather than just one keypressexchange-point-and-mark activates the region, so to use it
for navigation you need to use either C-u C-x C-x or C-x C-x
C-g, neither of which are convenient to type, or else it will be
difficult to set regions at the place you ve just jumped to because
you ll already have one active.exchange-point-and-mark, and it s
subsumed by the problem of that command actually activating the
region. The rest of the time Emacs automatic deactivation of the
region seems sufficient.
How might disabling Transient Mark mode be disadvantageous?
When Transient Mark mode is on, many commands will do something
usefully different when the mark is active. The number of commands in
Emacs which work this way is only going to increase now that Transient
Mark mode is the default.
If you disable Transient Mark mode, then to use those features you
need to temporarily activate Transient Mark mode. This can be fiddly
and/or require a lot of keypresses, depending on exactly where you
want to put the region.
Without being able to see the region, it might be harder to know where
it is. Indeed, this is one of the main reasons for wanting Transient
Mark mode to be the default, to avoid confusing new users. I don t
think this is likely to affect experienced Emacs users often, however,
and on occasions when more precision is really needed, C-u C-x C-x
will make the region visible. So I m not counting this as a
disadvantage.
How might we mitigate these two sets of disadvantages?
Here are the two middle grounds I m considering.
Mitigation #1: Transient Mark mode, but hack C-x C-x behaviour
(defun spw/exchange-point-and-mark (arg)
"Exchange point and mark, but reactivate mark a bit less often.
Specifically, invert the meaning of ARG in the case where
Transient Mark mode is on but the region is inactive."
(interactive "P")
(exchange-point-and-mark
(if (and transient-mark-mode (not mark-active))
(not arg)
arg)))
(global-set-key [remap exchange-point-and-mark] &aposspw/exchange-point-and-mark)
C-x
C-x reactivate the mark and require C-u C-x C-x to use the action
of exchanging point and mark as a means of navigation. There needs to
a binding to reactivate the mark, but in roughly ten years of having
Transient Mark mode turned on, I ve found that the need to reactivate
the mark doesn t come up often, so the shorter and longer bindings
seem the wrong way around. Not sure what I m missing here.
Mitigation #2: disable Transient Mark mode, but enable it temporarily more often
(setq transient-mark-mode nil)
(defun spw/remap-mark-command (command &optional map)
"Remap a mark-* command to temporarily activate Transient Mark mode."
(let* ((cmd (symbol-name command))
(fun (intern (concat "spw/" cmd)))
(doc (concat "Call "
cmd
"&apos and temporarily activate Transient Mark mode.")))
(fset fun (lambda ()
,doc
(interactive)
(call-interactively #&apos,command)
(activate-mark)))
(if map
(define-key map (vector &aposremap command) fun)
(global-set-key (vector &aposremap command) fun))))
(dolist (command &apos(mark-word
mark-sexp
mark-paragraph
mark-defun
mark-page
mark-whole-buffer))
(spw/remap-mark-command command))
(with-eval-after-load &aposorg
(spw/remap-mark-command &aposorg-mark-element org-mode-map)
(spw/remap-mark-command &aposorg-mark-subtree org-mode-map))
;; optional
(global-set-key "\M-=" (lambda () (interactive) (activate-mark)))
;; resettle the previous occupant
(global-set-key "\C-cw" &aposcount-words-region)
C-M-SPC C-M-SPC M-( to wrap the
following two function arguments in parentheses. And you can hit
M-h a few times to mark some blocks of text or code, then operate on
them with commands like M-% and C-/ which behave differently when
the region is active.1
Comparing these mitigations
Both of these mitigations handle the second of the two disadvantages
of Transient Mark mode given above. What remains, then, is
C-SPC
C-SPC instead of having a single binding, C-SPC, for all manual
mark setting2C-SPC C-SPC, M-= or one of the mark-* commands?mark-* commands activate the mark comes
from an emacs-devel post by Stefan Monnier in the archives linked
above. C-SPC C-SPC. I
don t believe there are any easily rebindable keys which are
easier to type than typing C-SPC twice. And this does not deal
with the two distinct mark-setting operations problem. C-SPC and which should get C-SPC C-SPC. 146. This version includes the following changes:
[ Chris Lamb ]
* Refactor .changes and .buildinfo handling to show all details (including
the GPG header and footer components), even when referenced files are not
present. (Closes: reproducible-builds/diffoscope#122)
* Normalise filesystem stat(2) "birth times" (ie. st_birthtime) in the same
way we do with stat(1)'s "Access:" and "Change:" times to fix a
nondetermistic build failure on GNU Guix.
(Closes: reproducible-builds/diffoscope#74)
* Drop the (default) subprocess.Popen(shell=False) keyword argument so that
the more unsafe shell=True is more obvious.
* Ignore lower vs. upper-case when ordering our file format descriptions.
* Don't skip string normalisation in Black.
[ Mattia Rizzolo ]
* Add a "py3dist" override for the rpm-python module (Closes: #949598)
* Bump the debhelper compat level to 13 and use the new
execute_after_*/execture_before_* style rules.
* Fix a spelling error in changelog.
[ Daniel Fullmer ]
* Mount GuestFS filesystem images readonly.
[ Jean-Romain Garnier ]
* Prevent an issue where (for example) LibarchiveMember's has_same_content
method is called regardless of the actual type of file.
Previously: v5.4.
I got a bit behind on this blog post series! Let s get caught up. Here are a bunch of security things I found interesting in the Linux kernel v5.5 release:
restrict perf_event_open() from LSMkernel.perf_event_paranoid sysctl knob has existed for a while, attempts to extend its control to block all perf_event_open() calls have failed in the past. Distribution kernels have carried the rejected sysctl patch for many years, but now Joel Fernandes has implemented a solution that was deemed acceptable: instead of extending the sysctl, add LSM hooks so that LSMs (e.g. SELinux, Apparmor, etc) can make these choices as part of their overall system policy.
generic fast full refcount_trefcount_t hardening work for both x86 and arm64 and distilled the implementations into a single architecture-agnostic C version. The result was almost as fast as the x86 assembly version, but it covered more cases (e.g. increment-from-zero), and is now available by default for all architectures. (There is no longer any Kconfig associated with refcount_t; the use of the primitive provides full coverage.)
linker script cleanup for exception tablesUSER_NOTIF continuationSECCOMP_RET_USER_NOTIF interface was added, it seemed like it would only be used in very limited conditions, so the idea of needing to handle normal requests didn t seem very onerous. However, since then, it has become clear that the overhead of a monitor process needing to perform lots of normal open() calls on behalf of the monitored process started to look more and more slow and fragile. To deal with this, it became clear that there needed to be a way for the USER_NOTIF interface to indicate that seccomp should just continue as normal and allow the syscall without any special handling. Christian Brauner implemented SECCOMP_USER_NOTIF_FLAG_CONTINUE to get this done. It comes with a bit of a disclaimer due to the chance that monitors may use it in places where ToCToU is a risk, and for possible conflicts with SECCOMP_RET_TRACE. But overall, this is a net win for container monitoring tools.
EFI_RNG_PROTOCOL for x86FORTIFY_SOURCE for MIPSCONFIG_FORTIFY_SOURCE, so compile-time (and some run-time) buffer overflows during calls to the memcpy() and strcpy() families of functions will be detected.
limit copy_ to,from _user() size to INT_MAXvsnprintf(), and strscpy(), I went ahead and limited the size of copy_to_user() and copy_from_user() calls to INT_MAX in order to catch any weird overflows in size calculations.
Other thingsvmalloc(). More specifically, this means KASan can examine the stack again, since it can be in that region since CONFIG_VMAP_STACK was introduced. 2020, Kees Cook. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License.
| Publisher: | Tor |
| Copyright: | May 2019 |
| ISBN: | 1-250-19551-9 |
| Format: | Kindle |
| Pages: | 528 |
The thought has barely formed when a different shape looms over him, grinning widely enough to show every tooth in its head. They are even, white, and perfect, and yet he somehow can't stop himself from thinking there's something wrong with them, that they're mismatched, that this assortment of teeth was never meant to share a single jaw, a single terrible smile.This isn't effective. This is telling the reader how they're supposed to feel about the thing you're describing, without doing the work of writing a description that makes them feel that way. (Also, you may see what I mean by overwrought.) That leads me to my next complaint: the villains. My problem is not so much with Leigh, who I thought was an adequate monster, if a bit single-note. There's some thought and depth behind her arguments with Reed, a few hints of her own motives that were more convincing for not being fully shown. The descriptions of how dangerous she is were reasonably effective. She's a good villain for this type of dark fantasy story where the world is dangerous and full of terrors (and reminded me of some of the villains from McGuire's October Daye series). Reed, though, is a storytelling train wreck. The Big Bad of the novel is the least interesting character in it. He is a stuffed tailcoat full of malicious incompetence who is only dangerous because the author proclaims him to be. It only adds insult to injury that he kills off a far more nuanced and creative villain before the novel starts, replacing her ambiguous goals with Snidely Whiplash mustache-twirling. The reader has to suffer through extended scenes focused on him as he brags, monologues, and obsesses over his eventual victory without an ounce of nuance or subtlety. Worse is the dynamic between him and Leigh, which is only one symptom of the problem with Middlegame that made me the most angry: the degree to this book oozes patriarchy. Every man in this book, including the supposed hero, orders around the women, who are forced in various ways to obey. This is the most obvious between Leigh and Reed, but it's the most toxic, if generally more subtle, between Roger and Dodger. Dodger is great. I had absolutely no trouble identifying with and rooting for her as a character. The nasty things that McGuire does to her over the course of the book (and wow does that never let up) made me like her more when she tenaciously refuses to give up. Dodger is the math component of the Doctrine of Ethos, and early in the book I thought McGuire handled that well, particularly given how difficult it is to write a preternatural genius. Towards the end of this book, her math sadly turns into a very non-mathematical magic (more on this in a moment), but her character holds all the way through. It felt like she carved her personality out of this story through sheer force of will and clung to it despite the plot. I wanted to rescue her from this novel and put her into a better book, such as the one in which her college friends (who are great; McGuire is very good at female friendships when she writes them) stage an intervention, kick a few people out of her life, and convince her to trust them. Unfortunately, Dodger is, by authorial fiat, half of a bound pair, and the other half of that pair is Roger, who is the sort of nice guy everyone likes and thinks is sweet and charming until he turns into an emotional trap door right when you need him the most and dumps you into the ocean to drown. And then somehow makes you do all the work of helping him feel better about his betrayal. The most egregious (and most patriarchal) thing Roger does in this book is late in the book and a fairly substantial spoiler, so I can't rant about that properly. But even before that, Roger keeps doing the the same damn emotional abandonment trick, and the book is heavily invested into justifying it and making excuses for him. Excuses that, I should note, are not made for Dodger; her failings are due to her mistakes and weaknesses, whereas Roger's are natural reactions to outside forces. I got very, very tired of this, and I'm upset by how little awareness the narrative voice showed for how dysfunctional and abusive this relationship is. The solution is always for Dodger to reunite with Roger; it's built into the structure of the story. I have a weakness for the soul-bound pair, in part from reading a lot of Mercedes Lackey at an impressionable age, but one of the dangerous pitfalls of the concept is that the characters then have to have an almost flawless relationship. If not, it can turn abusive very quickly, since the characters by definition cannot leave each other. It's essentially coercive, so as soon as the relationship shows a dark side, the author needs to be extremely careful. McGuire was not. There is an attempted partial patch, late in the book, for the patriarchal structure. One of the characters complains about it, and another says that the gender of the language and math pairs is random and went either way in other pairs. Given that both of the pairs that we meet in this story have the same male-dominant gender dynamic, what I took from this is that McGuire realized there was a problem but wasn't able to fix it. (I'm also reminded of David R. Henry's old line that it's never a good sign when the characters start complaining about the plot.) The structural problems are all the more frustrating because I think there were ways out of them. Roger is supposedly the embodiment of language, not that you'd be able to tell from most scenes in this novel. For reasons that I do not understand, McGuire expressed that as a love of words: lexicography, translation, and synonyms. This makes no sense to me. Those are some of the more structured and rules-based (and hence mathematical) parts of language. If Roger had instead been focused on stories collecting them, telling them, and understanding why and how they're told he would have had a clearer contrast with Dodger. More importantly, it would have solved the plot problem that McGuire solved with a nasty bit of patriarchy. So much could have been done with Dodger building a structure of math around Roger's story-based expansion of the possible, and it would have grounded Dodger's mathematics in something more interesting than symbolic magic. To me, it's such an obvious lost opportunity. I'm still upset about this book. McGuire does a lovely bit of world-building with Asphodel Baker, what little we see of her. I found the hidden alchemical war against her work by L. Frank Baum delightful, and enjoyed every excerpt from the fictional Over the Woodward Wall scattered throughout Middlegame. But a problem with inventing a fictional book to excerpt in a real novel is that the reader may decide that the fictional book sounds a lot better than the book they're reading, and start wishing they could just read that book instead. That was certainly the case for me. I'm sad that Over the Woodward Wall doesn't exist, and am mostly infuriated by Middlegame. Dodger and Erin deserved to live in a better book. Should you want to read this anyway (and I do know people who liked it), serious content warning for self-harm. Rating: 4 out of 10
We are happy to announce that registration for DebConf20
is now open. The event will take place from August 23rd to 29th, 2020 at the
University of Haifa, in Israel, and will be preceded by DebCamp, from August
16th to 22nd.
Although the Covid-19 situation is still rather fluid, as of now, Israel seems
to be on top of the situation. Days with less than 10 new diagnosed infections
are becoming common and businesses and schools are slowly reopening. As such,
we are hoping that, at least as far as regulations go, we will be able to hold
an in-person conference. There is more (and up to date) information at the
conference's FAQ. Which means,
barring a second wave, that there is reason to hope that the conference can go
forward.
For that, we need your help. We need to know, assuming health regulations permit
it, how many people intend to attend. This year probably more than ever before,
prompt registration is very important to us. If after months of staying at home
you feel that rubbing elbows with fellow Debian Developers is precisely the
remedy that will salvage 2020, then we ask that you do register as soon as
possible.
Sadly, things are still not clear enough for us to make a final commitment to
holding an in-person conference, but knowing how many people intend to attend
will be a great help in making that decision. The deadline for deciding on
postponing, cancelling or changing the format of the conference is June 8th.
To register for DebConf20, please visit our website
and log into the registration system
and fill out the form. You can always edit or cancel your registration, but
please note that the last day to confirm or cancel is July 26th, 2020
23:59:59 UTC. We cannot guarantee availability of accommodation, food and
swag for unconfirmed registrations.
We do suggest that attendees begin making travel arrangements as soon as
possible, of course. Please bear in mind that most air carriers allow
free cancellations and changes.
Any questions about registrations should be addressed to
registration@debconf.org.
Bursary for travel, accomodation and meals
In an effort to widen the diversity of DebConf attendees,
the Debian Project allocates a part of the financial resources obtained through
sponsorships to pay for bursaries (travel, accommodation, and/or meals) for
participants who request this support when they register.
As resources are limited, we will examine the requests and decide who will
receive the bursaries. They will be destined:
I found a detailed
explanation
of what might be causing this which pointed the finger at transparent
images, a PDF 1.4 feature which apparently requires a more recent version of
PostScript than what my printer
supports.
Using Okular's Force rasterization option
(accessible via the print dialog) does work by essentially rendering
everything ahead of time and outputing a big image to be sent to the
printer. The quality is not very good however.
pdfinfo, I found that
it is in PDF 1.5 format and so the transparency effects could be the cause
of the out-of-memory printer error.
Here's how I converted it to a high-quality DjVu file I could print without
problems using Evince:
pdf2djvu -d 1200 2002.04049.pdf > 2002.04049-1200dpi.djvu
pdf2djvu -d 600 dow-faq_v1.1.pdf > dow-faq_v1.1-600dpi.djvu
In this case, I used a different technique and simply converted the PDF to
version 1.3 (from version 1.6 according to pdfinfo):
ps2pdf13 -r1200x1200 dow-faq_v1.1.pdf dow-faq_v1.1-1200dpi.pdf
This eliminates the problematic transparency and rasterizes the elements
that version 1.3 doesn't support.
A new RcppSimdJson release with updated upstream simdjson code just arrived on CRAN. RcppSimdJson wraps the fantastic and genuinely impressive simdjson library by Daniel Lemire and collaborators. Via some very clever algorithmic engineering to obtain largely branch-free code, coupled with modern C++ and newer compiler instructions, it results in parsing gigabytes of JSON parsed per second which is quite mindboggling. The best-case performance is faster than CPU speed as use of parallel SIMD instructions and careful branch avoidance can lead to less than one cpu cycle use per byte parsed; see the video of the recent talk by Daniel Lemire at QCon (which was also voted best talk).
This release brings updated upstream code (thanks to Brendan Knapp) plus a new example and minimal tweaks. The full NEWS entry follows.
Courtesy of CRANberries, there is also a diffstat report for this release. For questions, suggestions, or issues please use the issue tracker at the GitHub repo. If you like this or other open-source work I do, you can now sponsor me at GitHub. For the first year, GitHub will match your contributions.Changes in version 0.0.5 (2020-05-23)
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
/etc/apache2/conf-available/ssi.conf:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
and making that configuration file active:
a2enconf ssi
Then, find the vhost file where you want to enable SSI and add the following
options to a Location or Directory section:
<Location /ssi_files>
Options +IncludesNOEXEC
SSLRequireSSL
Header set Content-Security-Policy: "default-src 'none'"
Header set X-Content-Type-Options: "nosniff"
</Location>
before adding the necessary modules:
a2enmod headers
a2enmod include
and restarting Apache:
apache2ctl configtest && systemctl restart apache2.service
Create an shtml page
With the web server ready to process SSI instructions, the following HTML
blurb can be used to display the client IP address:
<!--#echo var="REMOTE_ADDR" -->
or any other built-in
variable.
Note that you don't need to write a valid HTML for the variable to be
substituted and so the above one-liner is all I use on my server.
IncludesNOEXEC option in order to disable arbitrary command
execution via
SSI. In addition, you can also make sure that the cgi module is disabled
since that's a dependency of the more dangerous side of SSI:
a2dismod cgi
Of course, if you rely on this IP address to be accurate, for example
because you'll be putting it in your DNS, then you should make sure that you
only serve this page over HTTPS, which can be enforced via the
SSLRequireSSL
directive.
I included two other headers in the above vhost config
(Content-Security-Policy
and
X-Content-Type-Options)
in order to limit the damage that could be done in case a malicious file was
accidentally dropped in that directory.
Finally, I suggest making sure that only the root user has writable
access to the directory which has server-side includes enabled:
$ ls -la /var/www/ssi_includes/
total 12
drwxr-xr-x 2 root root 4096 May 18 15:58 .
drwxr-xr-x 16 root root 4096 May 18 15:40 ..
-rw-r--r-- 1 root root 0 May 18 15:46 index.html
-rw-r--r-- 1 root root 32 May 18 15:58 whatsmyip.shtml
Next.