<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Daniel Jakots</title><link href="https://oldblog.chown.me/" rel="alternate"></link><link href="https://oldblog.chown.me/blog/feeds/atom.xml" rel="self"></link><id>https://oldblog.chown.me/</id><updated>2020-04-08T10:20:00-04:00</updated><entry><title>How I accidentally wrote a static site generator</title><link href="https://oldblog.chown.me/blog/pics2html.html" rel="alternate"></link><published>2020-04-08T10:20:00-04:00</published><updated>2020-04-08T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2020-04-08:/blog/pics2html.html</id><summary type="html">&lt;p&gt;How I accidentally wrote a static site generator&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Some context first&lt;/h1&gt;
&lt;p&gt;I bought my
&lt;a href="https://en.wikipedia.org/wiki/Digital_single-lens_reflex_camera"&gt;DSLR&lt;/a&gt; at the
end of 2014. I wanted to host the resulting pictures somewhere. I never liked
Flickr much, so I went with 500px. I liked the website and the UI/UX was pretty
nice. The community was pretty cool. Having skilled photographers around is
really valuable, as you can learn and find inspiration. But it might also hurt
(it definitely did, sometimes) to see photographs much better than yours!&lt;/p&gt;
&lt;p&gt;For some reason, I kinda stopped photography in 2017. I took a few pictures
here and there but didn't do anything with them. Basically, the cost (i.e. the
time the whole thing took) was way too high for what I felt I got from it
(emotions or whatever).&lt;/p&gt;
&lt;p&gt;At the beginning of 2020, I went through all my data on my personal storage
(which included my pictures) to sort and rearrange them. It made me happy to
have all those &lt;em&gt;souvenirs&lt;/em&gt; and I thought I should really go shoot again.&lt;/p&gt;
&lt;p&gt;This narrative is not entirely true, though. ;)&lt;/p&gt;
&lt;p&gt;While it did happen, it didn't happen initially. I bought &lt;a href="https://dumpster.chown.me/mastodon/media_attachments/files/000/050/759/original/18e91ddf4f0c6ce4.jpeg"&gt;a case for my
photography
gear&lt;/a&gt;
for unrelated reasons (compulsive buying) and thought if I was spending money
on it again, I should make good use of it. Nevertheless, the souvenirs really
nailed my motivation!&lt;/p&gt;
&lt;p&gt;Initially, I thought I could keep using 500px but I realized I'd lost my access
and that during my hiatus &lt;a href="https://support.500px.com/hc/en-us/articles/360017752493-Security-Issue-February-2019-FAQ"&gt;they had been
pwned&lt;/a&gt;.
Now that I have more experience publishing pictures on the Internet, I have a
better idea of what I want and care about. During the ensuing years, I have
also acquired much more experience in &lt;a href="./infrastructure-2019.html"&gt;hosting my own
services&lt;/a&gt;, which I try to do for everything I use.&lt;/p&gt;
&lt;h1&gt;Looking for some FOSS&lt;/h1&gt;
&lt;p&gt;I thought writing my own would be difficult/time consuming, so I went for doing
what I do best: using existing Free Software. I carefully thought through my
requirements, and here they are:&lt;/p&gt;
&lt;p&gt;A quality project is both subjective, and an obvious requirement so I won't
talk more about it. But PHP apps written by someone who wanted to make their
first project?  I'll pass. :)&lt;/p&gt;
&lt;p&gt;I really care about showing &lt;a href="https://en.wikipedia.org/wiki/Exif"&gt;EXIF&lt;/a&gt; for
pictures. As with software, being able to study how they're made is really
helpful. I feel like pictures without EXIF are as interesting as closed source
software, so I tend to ignore both. (In a photography context, of course. I
won't look at which phone model took that cat picture).&lt;/p&gt;
&lt;p&gt;On a side note, surprisingly, I learned that people recently created gallery
software and added machine learning. Well, I've better use for my computing
power and I prefer simpler things.&lt;/p&gt;
&lt;p&gt;AND SHOW THOSE DAMN EXIF!&lt;/p&gt;
&lt;h1&gt;Writing my own - the process&lt;/h1&gt;
&lt;p&gt;Sadly, I didn't find anything that met those two simple requirements.&lt;/p&gt;
&lt;p&gt;Because of that, I thought I would either write something myself or put the
photos into my blog. I was not very fond of the idea of putting my pictures on
my blog (as a weird application of the "do one thing and do it well" rule), but
even if I were to do so, I wouldn't want to extract the EXIF myself/manually
for each picture.&lt;/p&gt;
&lt;p&gt;I began writing a python script which parsed the EXIF, which was kind of funny.
For instance, the library I use gives a tuple for the exposure and depending on
each field's value, &lt;a href="https://github.com/danieljakots/pics2html/blob/c08e2b17476e28e8304bfaadc94f76d77d4c74df/pics2html.py#L62-L74"&gt;it has a different
meaning&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I had already used jinja2 in my &lt;a href="https://github.com/danieljakots/uv"&gt;uv&lt;/a&gt;
script, so I thought "let's generate a basic html page!" since it was easy.
That was my planned alternative to using my blog. Since I know nothing about
web design/frontend and I wasn't very enthusiastic, I thought maybe I would
later hire someone to do it.&lt;/p&gt;
&lt;p&gt;I began to add some very basic CSS to experiment. I had scavenged it from some
random website which had the nice quality of being very simple! I was happy
with the result, so I tried to improve it further. I thought "if I'm stuck or
stop having fun, then I'll look into hiring" which eased my mind a lot!&lt;/p&gt;
&lt;p&gt;Surprisingly, I didn't struggle that much and I did have fun!  Tackling one
small issue at a time made it a breeze.&lt;/p&gt;
&lt;p&gt;I thought that using icons was better than text since they convey as much
information while being much much shorter. I had bookmarked a &lt;a href="https://github.com/tabler/tabler-icons"&gt;set of
icons&lt;/a&gt; (because they're MIT-licensed) a
few days before, thinking "I doubt I'll ever need these, but who knows?" The
set didn't have an icon for the &lt;em&gt;lens&lt;/em&gt; so I used the &lt;em&gt;lego&lt;/em&gt; icon.  It looks
similar and it has a smile on it! What's not to love?&lt;/p&gt;
&lt;p&gt;During the process, I went to look at how I did stuff with my blog and I
noticed it was a complete mess. Seeing how easy writing a static site generator
was made me want to write one for my blog. So, stay tuned! ;)&lt;/p&gt;
&lt;h1&gt;The result&lt;/h1&gt;
&lt;p&gt;The result is available here: &lt;a href="https://px.chown.me/"&gt;https://px.chown.me/&lt;/a&gt;. The &lt;a href="https://github.com/danieljakots/pics2html"&gt;code is, of course,
available&lt;/a&gt; as well.&lt;/p&gt;
&lt;p&gt;I would not necessarily advise someone to reuse the code as-is (even though you
definitely can since it's Free Software). It's pretty tailored to my needs. For
instance, the red color used is the same as on my &lt;a href="./new-design.html"&gt;blog&lt;/a&gt;
(coherency FTW).  I made no effort to make it easily customizable, more than
what I needed to make the code maintainable (up to a certain point, since I
have exactly 0 tests... I already feel my future self's frustration, &lt;em&gt;oops!&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;That said, if you're thinking about building something similar, you're totally
free (well as long as you abide by the license terms ;)) to study/take parts
from it!&lt;/p&gt;
&lt;p&gt;I'm really happy with the result. The code is pretty simple (though some hacks
exist here and there), as you would expect from a less-than-300-line python
script. I learned quite a few things (e.g. improved my skill with jinja2,
discovered that creating a RSS feed is actually not that hard, etc). I'm really
happy with how the website looks. Doing web design is completely out of the
ordinary for me, so it was nice to do something different!&lt;/p&gt;
&lt;p&gt;And it's funny... I do things that are 1000x times more complicated, but
generating 200 html files with a single command really feels like magic!&lt;/p&gt;</content><category term="autohébergement"></category></entry><entry><title>My infrastructure as of 2019</title><link href="https://oldblog.chown.me/blog/infrastructure-2019.html" rel="alternate"></link><published>2020-03-06T10:20:00-05:00</published><updated>2020-03-06T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2020-03-06:/blog/infrastructure-2019.html</id><summary type="html">&lt;p&gt;My infrastructure as of 2019&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've wanted to write about my infrastructure for a while, but I kept thinking,
"I'll wait until after I've done $next_thing_on_my_todo." Of course this cycle
never ends, so I decided to write about its state at the end of 2019. Maybe
I'll write an update on it in a couple of moons; who knows?&lt;/p&gt;
&lt;h2&gt;Goal for this infrastructure&lt;/h2&gt;
&lt;p&gt;The goal for my infrastructure is to run the services I need. While a lot of
people in the homelab community experiment and play with software for its own
sake, I actively use the stuff I host. When I stop, I kill the service (though
I'm not as proficient at this as &lt;a href="https://killedbygoogle.com/"&gt;Google&lt;/a&gt;).  These
are my production systems, and when one of them is down, I do miss it.&lt;/p&gt;
&lt;p&gt;I kind of enjoy working on this infrastructure, but not that much (I used to
enjoy it more), so I'm careful with the software I choose. I want to spend time
on it when &lt;em&gt;I want to&lt;/em&gt;, not because &lt;em&gt;I have to&lt;/em&gt; (e.g. because something broke).
Consequently, I do my best to pick reliable, boring and easy software. Those
are my kinks.&lt;/p&gt;
&lt;p&gt;Why do I host this myself? Mostly trust issues, and the fact that I care about
sovereignty.&lt;/p&gt;
&lt;p&gt;I tend to lock down services as much as I can, either cutting them off
completely from the Internet (e.g. for &lt;em&gt;imap&lt;/em&gt;) or running them on a
non-standard port and &lt;a href="./2FA-with-ssh-on-OpenBSD.html"&gt;enabling 2FA&lt;/a&gt;. I don't
use a VPN (mostly because I haven't come up with a nice, clean option yet), so
I restrict access to my services in different ways.&lt;/p&gt;
&lt;p&gt;For most things, I'm the only user, which is both sad (as it's a waste of
resources) and great (as I can be more nimble). A notable exception is my
mastodon instance which is also used by &lt;a href="https://awoo.chown.me/@jeancanard"&gt;my
cat&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Machines&lt;/h2&gt;
&lt;p&gt;My machines are hosted in 3 different places. First is at
&lt;a href="https://www.exoscale.com/"&gt;Exoscale&lt;/a&gt;, second is
&lt;a href="https://www.vultr.com/"&gt;Vultr&lt;/a&gt; and the third is... my flat.&lt;/p&gt;
&lt;p&gt;All of them run either OpenBSD on its -current branch, or the latest version of
Ubuntu. At this time, that's Ubuntu 19.10. After a couple of years working on
OpenBSD ports (i.e. packaging), I believe fresh software is better,
security-wise.&lt;/p&gt;
&lt;p&gt;They're managed with Ansible. I began my Ansible repository 4 years ago and it
has about 1500 commits in it. I wrote the Ansible to fit my needs rather than
making generic (and therefore reusable) roles, so it's not public.&lt;/p&gt;
&lt;p&gt;I update the OpenBSD machines regularly to a newer OpenBSD snapshot (so of
course the process has been
&lt;a href="./upgrading-openbsd-with-ansible.html"&gt;automated&lt;/a&gt;). For Ubuntu, I prefer to
reinstall them, since they're managed by Ansible and they don't have any data
on them. Reinstalling machines regularly helps spot missing pieces in Ansible.
:P&lt;/p&gt;
&lt;p&gt;All the three sites are as
&lt;a href="https://en.wikipedia.org/wiki/Loose_coupling"&gt;standalone&lt;/a&gt; as possible. This is
both so that in the case that one gets pwned it won't help the attacker to
&lt;a href="https://en.wikipedia.org/wiki/Network_Lateral_Movement"&gt;move laterally&lt;/a&gt;, and
so that if one is unavailable it shouldn't impact anything else.&lt;/p&gt;
&lt;h3&gt;ns3.chown.me (OpenBSD)&lt;/h3&gt;
&lt;p&gt;It's my secondary name server and as you can guess, it replaced ns2. It's the
only machine that I don't back up, since I can replace it with my Ansible
without losing data.&lt;/p&gt;
&lt;p&gt;It's hosted by &lt;em&gt;Vultr&lt;/em&gt;. I mostly picked them because they offer OpenBSD
hosting. This virtual machine is in Toronto and has 1 CPU and 512M of ram.
(Disk space is not relevant here).&lt;/p&gt;
&lt;p&gt;I wanted a different hosting provider/AS than my main name server for obvious
reasons of resiliency. Every now and then I think about using another name
server (whether instead of this machine or in addition to it, I don't know)
provided by my registrar (Gandi), but it has a low priority on my todo list.&lt;/p&gt;
&lt;p&gt;The name server I use is &lt;em&gt;NSD&lt;/em&gt;. I could use another one (like &lt;em&gt;knot&lt;/em&gt;) as my
main name server also uses &lt;em&gt;NSD&lt;/em&gt;, but the issues related to running the same
software on both aren't that serious in my case.&lt;/p&gt;
&lt;p&gt;Since this machine doesn't do much otherwise, it's running
&lt;a href="https://github.com/danieljakots/mownitoring"&gt;mownitoring&lt;/a&gt; to check that
everything works.&lt;/p&gt;
&lt;h3&gt;virtie.chown.me (OpenBSD)&lt;/h3&gt;
&lt;p&gt;This virtual machine is the main one in my infrastructure. A moment ago your
browser connected to it to get this page. :)&lt;/p&gt;
&lt;p&gt;It's hosted by Exoscale (with whom my experiences have been nothing less than
perfect). It's my oldest VM (4 or 5 years old). It has 1 CPU, 1G of ram and 50G
of disk space.&lt;/p&gt;
&lt;p&gt;To host my blog I use OpenBSD's httpd which is fronted by &lt;em&gt;HAProxy&lt;/em&gt;. While I
could remove &lt;em&gt;HAProxy&lt;/em&gt;, I like this software and I trust it &lt;a href="https://ftp.openbsd.org/pub/OpenBSD/patches/5.6/common/022_httpd.patch.sig"&gt;more
than&lt;/a&gt;
&lt;a href="https://github.com/openbsd/src/commit/49b1a9b154081c713af219b2422adaf51ca2584d"&gt;httpd&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to hosting my blog, it hosts my email. I switched to &lt;em&gt;postfix&lt;/em&gt; in
the beginning of 2019 after a couple of years running &lt;em&gt;OpenSMTPD&lt;/em&gt;. Since I
switched to &lt;em&gt;postfix&lt;/em&gt; I also dropped &lt;em&gt;spamd&lt;/em&gt; (the OpenBSD greylisting daemon).
I enabled &lt;a href="https://en.wikipedia.org/wiki/Forward-confirmed_reverse_DNS"&gt;FCrDNS&lt;/a&gt;
on &lt;em&gt;postfix&lt;/em&gt; when I switched (at the time it was not available on &lt;em&gt;OpenSMTPD&lt;/em&gt;)
and I didn't notice more spam. I use &lt;em&gt;Dovecot&lt;/em&gt; for imap with only my IP
allowed. I can easily allow another IP address with &lt;code&gt;pfctl -t imap_allowed -Ta
203.0.113.47&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I've never really had deliverability problems (except with Microsoft, but who
can say they haven't?) I assume my IP has a good reputation, which is why this
VM is the oldest, as I've been reluctant to lose it.&lt;/p&gt;
&lt;p&gt;This machine also hosts a &lt;em&gt;gitolite&lt;/em&gt; for a couple of different internal git
repositories.&lt;/p&gt;
&lt;h3&gt;pancake.chown.me (OpenBSD)&lt;/h3&gt;
&lt;p&gt;This machine is an &lt;a href="https://pcengines.ch/apu2.htm"&gt;APU2&lt;/a&gt;. It acts as a router
for my flat. Since it's way more powerful than necessary for this task, I put
some other stuff on it. It's a trade-off between increasing the attack surface
of a critical machine and leaving a lot of CPU/RAM/SSD unused.&lt;/p&gt;
&lt;p&gt;I collect &lt;a href="https://en.wikipedia.org/wiki/NetFlow"&gt;flows&lt;/a&gt; on it, which in my
opinion are super cool!&lt;/p&gt;
&lt;p&gt;It also hosts influxdb + grafana and some machines send their metrics with
collectd (&lt;a href="https://collectd.org/wiki/index.php/Networking_introduction#Cryptographic_setup"&gt;which allow signing/encrypting the network
traffic&lt;/a&gt;).
This doesn't work well for a couple of reasons, so it's waiting to be replaced.&lt;/p&gt;
&lt;h3&gt;kvm1, and sometimes kvm2 (Ubuntu)&lt;/h3&gt;
&lt;p&gt;These machines are hosted at home. kvm1 is the main machine, and kvm2 is the
machine I use to play Windows games on another SSD. I boot on the Ubuntu SSD
whenever I want to do something on kvm1 and then I live-migrate guests on it so
I don't experience any downtime. I use full disk encryption on the guests, so
live-migrating (instead of rebooting them) allows me to avoid having to
manually unlock each guest. I encrypt the guests and not the kvm because in the
event of a power outage, machines may come back on, in which case I don't want
them to wait for the passphrase if I'm away. Some hacks could be done to
encrypt them as well, but I'm not willing to do them since they're overkill for
my threat model.&lt;/p&gt;
&lt;p&gt;Both machines have an i5-4590. kvm2 has 4x4G of ram with a 256G SSD (which is
enough for the kvm system and all the guests). kvm1 also has a 256G SSD but
while its ram layout would make anyone sensible cringe, it amounts to 20G of
ram! I don't use RAID. kvm0 (the machine they replaced) used to and I wasn't
sure it would work (and I couldn't test it safely since it was my only
machine).&lt;/p&gt;
&lt;p&gt;To manage this part of the infrastructure I wrote a &lt;a href="https://github.com/danieljakots/uv"&gt;python
script&lt;/a&gt;. This script is kind of a wrapper
around libvirt, which itself is kind of a wrapper around qemu, which itself
&lt;a href="https://en.wikipedia.org/wiki/Turtles_all_the_way_down"&gt;wrangles turtles&lt;/a&gt;.
Contrary to what other people run, I think, a guest disk isn't a qcow2/raw
file. I don't want to pile filesystems on one another, so I manage guests'
disks on the hypervisor with LVM directly. I tend to have multiple disks to
bring more flexibility to the disk layout/partitioning than OpenBSD would,
thanks to LVM.&lt;/p&gt;
&lt;p&gt;It hosts all the following virtual machines:&lt;/p&gt;
&lt;h3&gt;manicouagan1 (OpenBSD)&lt;/h3&gt;
&lt;p&gt;This machine's name dates from back when I used names from Québec to name my
machines.  The name comes from the &lt;a href="https://en.wikipedia.org/wiki/Manicouagan_Reservoir"&gt;Manicouagan
Reservoir&lt;/a&gt;, as this
machine is where I put my backups.&lt;/p&gt;
&lt;p&gt;My backups are in three different places:
- locally, i.e. each machine stores its backup on itself
- &lt;em&gt;manicouagan&lt;/em&gt; copies all the backups onto itself
- &lt;em&gt;manicouagan&lt;/em&gt; ships the backups to an s3-like provider&lt;/p&gt;
&lt;p&gt;I use &lt;em&gt;BorgBackup&lt;/em&gt; for the backup, &lt;em&gt;rsync&lt;/em&gt; to copy them onto &lt;em&gt;manicouagan&lt;/em&gt; and
&lt;em&gt;s3cmd&lt;/em&gt; to ship them away. I tried to use &lt;em&gt;rclone&lt;/em&gt; but it used more ram.  Once,
I was away from my place for a long time, and my whole infra there became
unreachable, so I decided to temporarily host stuff on the cloud in the
meantime. I had to restore those backups and it went so nicely that I'm not
looking to change anything. Borg is awesome!&lt;/p&gt;
&lt;p&gt;This machine is also a syslog server to which all my OpenBSD machines ship
their logs. Thanks to OpenBSD syslogd (bluhm@ &amp;lt;3), it uses TCP+TLS with a
private PKI. This is mostly in case one machine gets hacked, to help with
&lt;a href="https://en.wikipedia.org/wiki/Forensic_science"&gt;forensics&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I wrote a short script that shows me the largest data transfers on my router. I
use this to check that the backups are alive (I receive emails if the
&lt;em&gt;BorgBackup&lt;/em&gt; script fails, but isn't that less fun? :))&lt;/p&gt;
&lt;h3&gt;db1 (OpenBSD)&lt;/h3&gt;
&lt;p&gt;This machine hosts postgresql and redis. Two boring pieces of software which I
love. Redis requires so little care that when I moved from db0, I forgot I had
it!&lt;/p&gt;
&lt;h3&gt;web1 (OpenBSD)&lt;/h3&gt;
&lt;p&gt;This machine runs nginx for my whole web presence excluding my blog. It hosts
&lt;em&gt;nextcloud&lt;/em&gt;, &lt;em&gt;tt-rss&lt;/em&gt;, &lt;em&gt;shaarli&lt;/em&gt; and pics.chown.me (whose content I should
update).&lt;/p&gt;
&lt;p&gt;Have you ever thought, "naah I'm too much paranoid"? Yeah, me neither. A few
months ago, I restricted all the non-static websites (with the exception of
Mastodon) behind an &lt;em&gt;htpasswd&lt;/em&gt;. There was some value in having them publicly
accessible, but at the time I thought it was not worth the risk. The php-fpm
pools should be secure (they have their own users, they're chrooted and so on)
but I'm not entirely sure I'm doing this stuff properly and it is such a pain
to get it working that I'm not willing to look into it more than that.&lt;/p&gt;
&lt;p&gt;Nginx also acts as a reverse proxy for the docker containers that run on
another machine. Finally, it hosts &lt;em&gt;minio&lt;/em&gt; for &lt;em&gt;mastodon&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;docker2 (Ubuntu, obviously)&lt;/h3&gt;
&lt;p&gt;This machine runs a few docker containers through &lt;em&gt;docker-compose&lt;/em&gt;:
- 3 containers for &lt;em&gt;mastodon&lt;/em&gt; (&lt;em&gt;ruby on rails&lt;/em&gt; stuff, a node api and &lt;em&gt;sidekiq&lt;/em&gt;)
- container running the code I wrote for api.chown.me; it's a &lt;em&gt;flask&lt;/em&gt;
  application
- registry:v2 that I have simply to ease the transfer of docker images&lt;/p&gt;
&lt;p&gt;I build all the docker images I run myself (except for the registry one).&lt;/p&gt;
&lt;p&gt;My policy regarding those containers is that they must not store any data
locally (i.e. they don't have a &lt;em&gt;docker volume&lt;/em&gt;). This allows me not to care
about backups. The &lt;em&gt;docker-compose.yml&lt;/em&gt; is tracked in my personal git, so I can
trash the VM any time.&lt;/p&gt;
&lt;p&gt;api.chown.me is for now mostly a way to sync a list of IPs to block on my whole
infra. This way, if an IP is acting badly on one machine, it doesn't get to try
its luck on another of my machines. This list is also supplemented by public
lists of threats.&lt;/p&gt;
&lt;h2&gt;That's it for now&lt;/h2&gt;
&lt;p&gt;Currently, my infrastructure is good at meeting my needs. It's not perfect, of
course, and it's a perpetual work in progress. But it's stable, and usually the
most I need to do is quickly patch some security vulnerabilities.  Since most
of the resources I use come from reused computers hosted at my place, I'm able
to keep the cost (both financial and ecological) really low.&lt;/p&gt;</content><category term="infra"></category><category term="OpenBSD"></category></entry><entry><title>Launching my newsletter</title><link href="https://oldblog.chown.me/blog/launching-my-newsletter.html" rel="alternate"></link><published>2019-01-25T10:20:00-05:00</published><updated>2019-01-25T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2019-01-25:/blog/launching-my-newsletter.html</id><summary type="html">&lt;p&gt;Launching my own newsletter&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Social media&lt;/h2&gt;
&lt;h3&gt;Blogging...&lt;/h3&gt;
&lt;p&gt;I created this blog a few years ago because I wanted to talk about the stuff I
was experimenting with, and in my opinion it was cool to have a blog. I still have
the same opinion, but now I'm using the blog more like a portfolio. I like it
because I take a lot of care with it and I like to build high quality stuff. However,
it takes me. So. Much. Time. I have to be really enthusiastic about something to
write about it.&lt;/p&gt;
&lt;h3&gt;...and micro-blogging&lt;/h3&gt;
&lt;p&gt;More or less at the same time, I created my Twitter account. I've used it for
multiple years and I have realized the way it was architected to influence users was obnoxious and the way I was using it made it even worse.&lt;/p&gt;
&lt;p&gt;Then came Mastodon, and while there is lot to bit^Wsay about it, many things
are much better. The community is much more friendly, and I can self-host my own
instance. (Who doesn't like to host a RoR application with all the software it
needs, PostgreSQL, Redis, Elastic Search, Nginx, and about twelve others?)&lt;/p&gt;
&lt;p&gt;My use evolved from the Twitter game of trying to get new followers to...
well, I'll just quote a friend I met there: &lt;a href="https://octodon.social/@stoof/101360489620753545"&gt;"Please talk to me before you
follow me! I am on Mastodon to make friends and be part of a
community."&lt;/a&gt;. Nonetheless, my
micro-posts there are still somewhat shallow. Even though I have 500 characters for
each post, I don't feel the medium is the right one to allow me to express myself deeply.
Which is perfectly fine, because I enjoy shitposting and bitching about a wide
spectrum of things!&lt;/p&gt;
&lt;h2&gt;In between&lt;/h2&gt;
&lt;h3&gt;Why?&lt;/h3&gt;
&lt;p&gt;I'll be honest and tell you what happened. Recently, I read &lt;a href="https://blog.chaddickerson.com/2019/01/09/replacing-facebook/"&gt;Going old school: how I
replaced Facebook with
email&lt;/a&gt;. In his
blog article, the author explained that he created a newsletter to replace the role that had been held by the Facebook account he disabled. I really liked the idea and wondered
if I could justify creating my own newsletter, especially since I had just
been working on my email setup and wanted to put it to good use. I eventually
decided to just create one.&lt;/p&gt;
&lt;p&gt;I think that having something between my blog, for which writing takes a lot
of time and Mastodon, where I express myself but in a more volatile setting, would be nice!&lt;/p&gt;
&lt;p&gt;The goal is to have something where I can share my feelings and my thoughts
without putting things on the public Internet (and avoiding the dread of judgment)
with a format closer to a blog article than to a micro-post on Mastodon. I hope to
create an environment more friendly to replies than what my blog articles
currently provide (as there isn't a system for comments). I'm also
curious about how the social interaction will happen. Lastly, I'll do it for
myself, as a writing exercise.&lt;/p&gt;
&lt;h3&gt;What?&lt;/h3&gt;
&lt;p&gt;I plan to talk about my life, what I have been doing lately or a
particular subject I care about. My frequency goal ranges between multiple times a
week for a busy period to at least once per month. I'm not sure yet how I'm
going to do it, technically-speaking, but I won't use any external services.&lt;/p&gt;
&lt;p&gt;Of course, I won't share your email address with anyone (including other
subscribers, i.e. I won't use a giant Cc:) and of course you'll receive solely
my newsletter and no other emails (ads or whatever). I don't have anything to
sell, anyway. &lt;a href="https://en.wikipedia.org/wiki/Pyramid_scheme#The_%22eight_ball%22_model"&gt;Especially if you get two acquaintances of yours to
subscribe!&lt;/a&gt;
There won't be a web interface or anything, so subscribing and unsubscribing
will require you to email me as the goal is also to experiment with human
interaction, since nowadays there is less and less of that.&lt;/p&gt;
&lt;p&gt;Of course, you won't get access to the previous newsletters, only the
subsequent ones. (Maybe the previous one?)&lt;/p&gt;
&lt;h3&gt;How can I subscribe?&lt;/h3&gt;
&lt;p&gt;If you're curious about this experiment and want to be part of it, please send an email
to newsletter at chown dot me!&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks &lt;a href="https://bsd.network/@pamela"&gt;Pamela&lt;/a&gt; for the proof-reading!&lt;/em&gt;&lt;/p&gt;</content><category term="autohébergement"></category></entry><entry><title>Upgrading OpenBSD with Ansible</title><link href="https://oldblog.chown.me/blog/upgrading-openbsd-with-ansible.html" rel="alternate"></link><published>2018-10-19T08:30:00-04:00</published><updated>2018-10-19T08:30:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2018-10-19:/blog/upgrading-openbsd-with-ansible.html</id><summary type="html">&lt;p&gt;How to upgrade an OpenBSD machine with Ansible&lt;/p&gt;</summary><content type="html">&lt;p&gt;This article is best enjoyed with basic knowledge of &lt;a href="https://man.openbsd.org/autoinstall"&gt;OpenBSD
autoinstall&lt;/a&gt; and &lt;a href="https://www.ansible.com/"&gt;Ansible&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;My router runs OpenBSD -current&lt;/h2&gt;
&lt;p&gt;A few months ago, I needed software that had just hit the ports tree. I didn't
want to wait for the next release, so I upgraded my router to use -current.
Since then, I've continued running -current, which means upgrading to a newer
snapshot every so often. Running -current is great, but the process of updating
to a newer snapshot was cumbersome.  Initially, I had to plug in a serial cable
and then reboot into &lt;em&gt;bsd.rd&lt;/em&gt;, hit enter ten times, then reboot, run &lt;code&gt;sysmerge&lt;/code&gt;
and update packages.&lt;/p&gt;
&lt;p&gt;I eventually switched to &lt;a href="https://bitbucket.org/semarie/upobsd"&gt;upobsd&lt;/a&gt; to be
able to upgrade without the need for a serial connection. The process was
better, but still tiresome. Usually, I would prepare the special version of
&lt;em&gt;bsd.rd&lt;/em&gt;, boot on &lt;em&gt;bsd.rd&lt;/em&gt;, and do something like wash the dishes in the
meantime. After about ten minutes, I would dry my hands and then go back to my
workstation to see whether the &lt;em&gt;bsd.rd&lt;/em&gt; part had finished so I could run
&lt;code&gt;sysmerge&lt;/code&gt; and &lt;code&gt;pkg_add&lt;/code&gt;, and then return to the dishes while it upgraded
packages.&lt;/p&gt;
&lt;p&gt;Out of laziness, I thought: "I should automate this," but what happened instead
is that I simply didn't upgrade that machine very often. (Yes, laziness).  With
my router out of commission, life is very dull, because it is my gateway to the
Internet. Even services hosted at my place (like my Mastodon instance) are not
reachable when the router is down because I use multiple VLANs (so I need the
router to &lt;em&gt;jump&lt;/em&gt; across VLANs).&lt;/p&gt;
&lt;h2&gt;Ansible Reboot Module&lt;/h2&gt;
&lt;p&gt;I recently got a new job, and one of my first tasks was auditing the &lt;em&gt;Ansible&lt;/em&gt;
roles written by my predecessors. In one role, the machine rebooted and they
used the
&lt;a href="https://docs.ansible.com/ansible/2.5/modules/wait_for_module.html"&gt;&lt;em&gt;wait_for_connection&lt;/em&gt;&lt;/a&gt;
module to wait for it to come back up. That sounded quite hackish to me, so out
of curiosity, I tried to determine whether there was a better way. I also
thought I might be able to use something similar to further automate my OpenBSD
upgrades, and wanted to assess the cleanliness of this method. ;-)&lt;/p&gt;
&lt;p&gt;I learned that with the then-upcoming 2.7 Ansible release, a proper &lt;em&gt;reboot&lt;/em&gt;
module would be included. I went to the docs, which stated that for a certain
parameter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;- On Linux and macOS, this is converted to minutes and
  rounded down. If less than 60, it will be set to 0.
- On Solaris and FreeBSD, this will be seconds.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I took this to mean that there was no support for OpenBSD. I looked at the code
and, indeed, there was not. However, I believed that it wouldn't be too hard
to add it. I added the missing pieces for OpenBSD, tested it on my poor Pine64
and then submitted it upstream. After a quick back and forth, the module's
author &lt;a href="https://github.com/ansible/ansible/commit/2769a4e2cc3aadbf91e7f4f83ef57b7ebe43442a"&gt;merged it into
devel&lt;/a&gt;
(having a friend working at Red Hat helped the process, merci Cyril !) A couple
days later, the release engineer &lt;a href="https://github.com/ansible/ansible/commit/26de4f97493adeb388c1c8fad7a266bb7652bac6"&gt;merged it into
stable-2.7&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I proceeded to actually write the playbook, and then I hit a bug. The parameter
&lt;em&gt;reboot_timeout&lt;/em&gt; was not recognized by Ansible. This feature would definitely
be useful on a slow machine (such as the Pine64 and its dying SD card). Again,
my fix was &lt;a href="https://github.com/ansible/ansible/commit/0105b4aeadb94dd12b921ed6c427b21cd31182fa"&gt;merged into
master&lt;/a&gt;
by the module's author and then &lt;a href="https://github.com/ansible/ansible/commit/a0f38bdab5ae0e183cb960fe9e964bf1edf7c326"&gt;merged into
stable-2.7&lt;/a&gt;.
2.7.1 will be the first release to feature these fixes, but if you use OpenBSD
-current, you already have access to them. I backported the patches when I
&lt;a href="https://marc.info/?l=openbsd-ports-cvs&amp;amp;m=153994960724056&amp;amp;w=2"&gt;updated
ansible&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Fun fact about Ansible and reboots: "The win_reboot module was [...] included
with Ansible 2.1," while for unix systems it wasn't added until 2.7. :D For
more details, you can read the &lt;a href="http://samdoran.com/ansible-reboot-plugin/"&gt;module's author blog
article&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The Playbook&lt;/h2&gt;
&lt;p&gt;Initially, my playbook did the upgrade as usual (i.e., it fetched the sets in
&lt;em&gt;bsd.rd&lt;/em&gt;). During this process, of course, my machine is not performing its
function as a router. My Internet access is not super great, so fetching the
sets takes awhile. I got frustrated while I was testing it and looked into
lessening the amount of time spent inside &lt;em&gt;bsd.rd&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;To speed up the process, I wrote &lt;a href="https://chown.me/iota/blog/fetch-sets"&gt;a basic shell
script&lt;/a&gt; to fetch the sets &lt;strong&gt;before&lt;/strong&gt;
rebooting into &lt;em&gt;bsd.rd&lt;/em&gt;. It enabled me to remove some &lt;em&gt;tasks&lt;/em&gt; I had to do in
order to get working Internet access in &lt;em&gt;bsd.rd&lt;/em&gt;. (This is specific to my
case).&lt;/p&gt;
&lt;h3&gt;The playbook itself&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;---&lt;/span&gt;
&lt;span class="x"&gt;- name: Upgrade OpenBSD&lt;/span&gt;
&lt;span class="x"&gt;  hosts: apu-root&lt;/span&gt;
&lt;span class="x"&gt;  vars:&lt;/span&gt;
&lt;span class="x"&gt;    arch: amd64&lt;/span&gt;
&lt;span class="x"&gt;    date: &amp;quot;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;lookup&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pipe&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;date +%Y-%m-%d&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;    disk: &amp;quot;sd0&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;    mirror: &amp;quot;fastly.cdn.openbsd.org&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;    path_sets: &amp;quot;/home/danj/sets&amp;quot;&lt;/span&gt;

&lt;span class="x"&gt;  tasks:&lt;/span&gt;
&lt;span class="x"&gt;    - name: fetch sets&lt;/span&gt;
&lt;span class="x"&gt;      command: /home/danj/bin/fetch-sets&lt;/span&gt;
&lt;span class="x"&gt;      when: path_sets is defined&lt;/span&gt;
&lt;span class="x"&gt;    - name: create answer file for upobsd&lt;/span&gt;
&lt;span class="x"&gt;      template:&lt;/span&gt;
&lt;span class="x"&gt;        src: answer.j2&lt;/span&gt;
&lt;span class="x"&gt;        dest: answer&lt;/span&gt;
&lt;span class="x"&gt;      delegate_to: localhost&lt;/span&gt;
&lt;span class="x"&gt;    - name: create kernel with upobsd&lt;/span&gt;
&lt;span class="x"&gt;      command: &amp;quot;upobsd -v -a &lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;arch&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt; -u ./answer -m https://&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;mirror&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;/pub/OpenBSD -V snapshots&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;      delegate_to: localhost&lt;/span&gt;
&lt;span class="x"&gt;    - name: copy bsd.rd created by upobsd&lt;/span&gt;
&lt;span class="x"&gt;      copy:&lt;/span&gt;
&lt;span class="x"&gt;        src: bsd.rd&lt;/span&gt;
&lt;span class="x"&gt;        dest: /bsd&lt;/span&gt;
&lt;span class="x"&gt;    - name: reboot host&lt;/span&gt;
&lt;span class="x"&gt;      reboot:&lt;/span&gt;
&lt;span class="x"&gt;        msg: &amp;quot;rebooting into bsd.rd to upgrade&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;        reboot_timeout: 900&lt;/span&gt;
&lt;span class="x"&gt;    - name: archive kernel&lt;/span&gt;
&lt;span class="x"&gt;      copy:&lt;/span&gt;
&lt;span class="x"&gt;        src: &amp;quot;/bsd&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;        dest: &amp;quot;/bsd-&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;date&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;        mode: 0700&lt;/span&gt;
&lt;span class="x"&gt;        remote_src: &amp;quot;yes&amp;quot;&lt;/span&gt;
&lt;span class="x"&gt;    - name: upgrade all packages&lt;/span&gt;
&lt;span class="x"&gt;      command: &amp;quot;pkg_add -u -Dsnap&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;The answer file&lt;/h3&gt;
&lt;p&gt;The answer file is automatically &lt;a href="https://github.com/openbsd/src/blob/master/distrib/miniroot/install.sub#L2811-L2812"&gt;mailed to root at the end of the
upgrade&lt;/a&gt;,
so it's easy to get it!&lt;/p&gt;
&lt;p&gt;In my case, the answer file transformed into a jinja2 template is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;Which disk is the root disk = sd0&lt;/span&gt;
&lt;span class="x"&gt;Force checking of clean non-root filesystems = no&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;path_sets&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;defined&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;Location of sets = disk&lt;/span&gt;
&lt;span class="x"&gt;Is the disk partition already mounted = yes&lt;/span&gt;
&lt;span class="x"&gt;Pathname to the sets = &lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;path_sets&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;Location of sets = http&lt;/span&gt;
&lt;span class="x"&gt;HTTP proxy URL = none&lt;/span&gt;
&lt;span class="x"&gt;HTTP Server = &lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;mirror&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;Server directory = pub/OpenBSD/snapshots/&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;arch&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;endif&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;Set name(s) = done&lt;/span&gt;
&lt;span class="x"&gt;Location of sets = done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;The explanations&lt;/h3&gt;
&lt;p&gt;Ansible runs my script on the remote host to fetch the sets. It creates an
answer file from the template and then gives it to &lt;em&gt;upobsd&lt;/em&gt;. Once &lt;em&gt;upobsd&lt;/em&gt; has
created the kernel, Ansible copies it in place of &lt;code&gt;/bsd&lt;/code&gt; on the host. The
router reboots and boots on &lt;code&gt;/bsd&lt;/code&gt;, which is upobsd's &lt;em&gt;bsd.rd&lt;/em&gt;. The &lt;em&gt;installer&lt;/em&gt;
runs in &lt;em&gt;auto_update&lt;/em&gt; mode. Once it comes back from &lt;em&gt;bsd.rd&lt;/em&gt; land, it archives
the kernel and finishes by upgrading all the packages.&lt;/p&gt;
&lt;p&gt;It also supports upgrading without fetching the sets ahead of time. For
instance, I upgrade this way on my Pine64 because if I cared about speed, I
wouldn't use this weak computer with its dying SD card. For this case, I just
comment out the &lt;em&gt;path_sets&lt;/em&gt; variable and Ansible instead creates an answer file
that will instruct the installer to fetch the sets from the designated mirror.&lt;/p&gt;
&lt;p&gt;I've been archiving my kernels for a few years. It's a nice way to &lt;strike&gt;fill
up /&lt;/strike&gt; keep a history of my upgrades. If I spot a regression, I can
try a previous kernel ... which may not work with the then-desynchronized
&lt;em&gt;userland&lt;/em&gt;, but that's another story.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sysmerge&lt;/code&gt; already runs with
&lt;a href="https://github.com/openbsd/src/blob/master/etc/rc#L579-L580"&gt;rc.sysmerge&lt;/a&gt; in
batch mode and sends the result by email. I don't think there's merit to
running it again in the playbook. The only perk would be discovering &lt;strong&gt;in the
terminal&lt;/strong&gt; whether any files need to be manually merged, rather than reading
exactly the same output in the email.&lt;/p&gt;
&lt;p&gt;Initially, I used the &lt;em&gt;openbsd_pkg&lt;/em&gt; module, but it doesn't work on -current
just &lt;strong&gt;before&lt;/strong&gt; a release because &lt;code&gt;pkg_add&lt;/code&gt; automatically looks for
&lt;em&gt;pub/OpenBSD/${release}/packages/${arch}&lt;/em&gt; (which is empty). I wrote and tested
this playbook while 6.4 was around the corner, so I switched to &lt;em&gt;command&lt;/em&gt; to be
able to pass the &lt;code&gt;-Dsnap&lt;/code&gt; parameter.&lt;/p&gt;
&lt;h2&gt;The result&lt;/h2&gt;
&lt;p&gt;I'm very happy with the playbook! It performs the upgrade with as little
intervention as possible and minimal downtime. \o/&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks &lt;a href="https://bsd.network/@pamela"&gt;Pamela&lt;/a&gt; for the proof-reading!&lt;/em&gt;&lt;/p&gt;</content><category term="OpenBSD"></category><category term="ansible"></category></entry><entry><title>Locking OpenBSD when it's sleeping</title><link href="https://oldblog.chown.me/blog/locking-openbsd-when-sleeping.html" rel="alternate"></link><published>2018-10-08T10:20:00-04:00</published><updated>2018-10-08T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2018-10-08:/blog/locking-openbsd-when-sleeping.html</id><summary type="html">&lt;p&gt;A frequently asked question: how do you lock your machine?&lt;/p&gt;</summary><content type="html">&lt;p&gt;I frequent the #openbsd IRC channel in order to help people. A question
commonly asked is how to automatically lock your machine when
putting it to sleep with zzz(1). I answered this question in a
previous article (which was actually written four years ago; time flies!) but
it was written in French, so here's a new one, also covering additional related topics.&lt;/p&gt;
&lt;h1&gt;Locking the machine when it is put to sleep&lt;/h1&gt;
&lt;p&gt;If you read &lt;a href="https://man.openbsd.org/apmd.8"&gt;apmd(8)&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;FILES
     /etc/apm/suspend
     /etc/apm/hibernate
     /etc/apm/standby
     /etc/apm/resume
     /etc/apm/powerup
     /etc/apm/powerdown    These files contain the host&amp;#39;s customized actions.
                           Each file must be an executable binary or shell
                           script.  A single program or script can be used to
                           control all transitions by examining the name by
                           which it was called, which is one of suspend,
                           hibernate, standby, resume, powerup, or powerdown.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The trick is to write a script for 'etc/apm/suspend' to run when zzz is called
(either directly or by &lt;a href="https://github.com/openbsd/src/blob/master/etc/etc.amd64/sysctl.conf#L3"&gt;closing the
lid&lt;/a&gt;).
For instance, the script I'm using is:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
doas -u danj env &lt;span class="nv"&gt;DISPLAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;:0 &lt;span class="nv"&gt;XAUTHORITY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/danj/.Xauthority xlock &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;It requires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configuring doas, &lt;em&gt;left as an exercise to the reader&lt;/em&gt; ;)&lt;/li&gt;
&lt;li&gt;running apmd (hashtag rcctl)&lt;/li&gt;
&lt;li&gt;an executable script&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Locking it further&lt;/h1&gt;
&lt;p&gt;This is off to a good start, but if you are a &lt;em&gt;startx&lt;/em&gt; user (versus using xenodm), be sure to run &lt;code&gt;exec startx&lt;/code&gt; and not just &lt;code&gt;startx&lt;/code&gt;. Otherwise, it is possible to kill X and then access the shell.&lt;/p&gt;
&lt;p&gt;If you don't set a maximum lifetime for your &lt;code&gt;ssh-agent&lt;/code&gt;, you should clear your identities using &lt;code&gt;ssh-add -D&lt;/code&gt;. You should also revoke any &lt;code&gt;sudo&lt;/code&gt; permissions with &lt;code&gt;sudo -K&lt;/code&gt;. &lt;code&gt;doas&lt;/code&gt; doesn't work the same way, so &lt;code&gt;doas -L&lt;/code&gt; won't help you much. (You have elevated permissions only in the current shell, not account-wide).&lt;/p&gt;
&lt;p&gt;You might want to clear your clipboards, as well. Use something like: &lt;code&gt;xsel -c -p; xsel -c -s; xsel -c -b&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Of course, if you use other authentication mechanisms (GNOME keyring, ssh's
Control*, etc.), you should handle those as well.&lt;/p&gt;
&lt;h1&gt;Beware of the cat&lt;/h1&gt;
&lt;p&gt;Now that I have a &lt;a href="https://awoo.chown.me/@jeancanard"&gt;Captive Advanced
Threat&lt;/a&gt;, I feel the need to automatically lock the screen after it has been idle for a short while. You can achieve this using &lt;code&gt;xidle&lt;/code&gt;. The &lt;a href="https://man.openbsd.org/xidle.1"&gt;man
page&lt;/a&gt; is sufficiently descriptive that I won't talk about that further.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks &lt;a href="https://maly.io/@semarie"&gt;semarie&lt;/a&gt; for the technical proof-reading and &lt;a href="https://bsd.network/@pamela"&gt;Pamela&lt;/a&gt; for the English proof-reading!&lt;/em&gt;&lt;/p&gt;</content><category term="OpenBSD"></category></entry><entry><title>2FA with ssh on OpenBSD</title><link href="https://oldblog.chown.me/blog/2FA-with-ssh-on-OpenBSD.html" rel="alternate"></link><published>2018-08-31T10:20:00-04:00</published><updated>2018-08-31T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2018-08-31:/blog/2FA-with-ssh-on-OpenBSD.html</id><summary type="html">&lt;p&gt;How I locked down my ssh connection&lt;/p&gt;</summary><content type="html">&lt;p&gt;Five years ago I wrote about &lt;a href="./yubikey.html"&gt;using a yubikey&lt;/a&gt; on OpenBSD.  The
only problem with doing this is that there's no validation server available on
OpenBSD, so you need to use a different OTP slot for each machine. (You don't
want to risk a &lt;a href="https://en.wikipedia.org/wiki/Replay_attack"&gt;replay attack&lt;/a&gt; if
someone succeeds in capturing an OTP on one machine, right?)  Yubikey has two
OTP slots per device, so you would need a yubikey for every two machines with
which you'd like to use it. You could use a
&lt;a href="https://en.wikipedia.org/wiki/Bastion_host"&gt;bastion&lt;/a&gt;—and use only one
yubikey—but I don't like the SPOF aspect of a bastion. YMMV.&lt;/p&gt;
&lt;p&gt;After &lt;a href="./my-recent-journey-with-2FA.html"&gt;I played with TOTP&lt;/a&gt;, I wanted to use
them as a 2FA for ssh. At the time of writing, we can't do that using only the
tools in base. This article focuses on OpenBSD; if you use another operating
system, here are two &lt;a href="https://www.openbsd.org/faq/faq4.html"&gt;handy&lt;/a&gt;
&lt;a href="https://ftp.openbsd.org/pub/OpenBSD/6.3/amd64/INSTALL.amd64"&gt;links&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Seed configuration&lt;/h1&gt;
&lt;p&gt;The first thing we need to do is to install the software which will be used to
verify the OTPs we submit.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# pkg_add login_oath
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;We need to create a &lt;em&gt;secret&lt;/em&gt; - aka, the &lt;em&gt;seed&lt;/em&gt; - that will be used to calculate
the Time-based One-Time Passwords. We should make sure no one can read or
change it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ openssl rand -hex &lt;span class="m"&gt;20&lt;/span&gt; &amp;gt; ~/.totp-key
$ chmod &lt;span class="m"&gt;400&lt;/span&gt; ~/.totp-key
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now we have a hexadecimal key, but apps usually &lt;a href="https://github.com/mattrubin/Authenticator/blob/develop/Authenticator/Source/TokenEntryForm.swift#L214"&gt;want a base32
secret&lt;/a&gt;.
I initially wrote a small script to do the conversion.&lt;/p&gt;
&lt;p&gt;While writing this article, I took the opportunity to improve it. When I
initially wrote this utility for my use,
&lt;a href="https://github.com/lincolnloop/python-qrcode"&gt;python-qrcode&lt;/a&gt; hadn't yet been
imported to the OpenBSD ports/packages system. It's easy to install now, so
let's use it.&lt;/p&gt;
&lt;p&gt;Here's the improved version. It will ask for the hex key and output the secret
as a base32-encoded string, both with and without spacing so you can copy-paste
it into your password manager or easily retype it. It will then ask for the
information needed to generate a &lt;em&gt;QR code&lt;/em&gt;. Adding our new OTP secret to any
mobile app using the QR code will be super easy!&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/usr/bin/env python&lt;/span&gt;

&lt;span class="c1"&gt;#           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE&lt;/span&gt;
&lt;span class="c1"&gt;#                   Version 2, December 2004&lt;/span&gt;

&lt;span class="c1"&gt;# Copyright (C) 2018 Daniel Jakots&lt;/span&gt;


&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;binascii&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;qrcode&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pkg_add py3-qrcode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;seed_hex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Key in hex format &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;binary_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;binascii&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unhexlify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed_hex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;seed_b32&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b32encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;binary_string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;The secret in a base32 encoded format&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed_b32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;The same, but with a space every three letters for readability&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;seed_b32&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed_b32&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)]))&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Let&amp;#39;s create a QR code to import it into an app&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;issuer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;#39;Issuer&amp;#39; (can be the server name) &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Username &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;otpauth://totp/{username}?secret={seed_b32}&amp;amp;issuer={issuer}&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qrcode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;image_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;qrcode-otp-{issuer}.jpg&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;wb&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;You can fetch this script using &lt;code&gt;ftp
https://chown.me/iota/blog/totp-hex-to-qrcode.py&lt;/code&gt;.  (The code isn't in any of
my public repositories for
&lt;a href="https://chown.me/iota/blog/issues-public-repo.jpg"&gt;reasons&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We can check to make sure everything went smoothly by comparing the code
provided by your mobile app to one generated by &lt;em&gt;oathtool&lt;/em&gt; at the same time.
The &lt;em&gt;oathtool&lt;/em&gt; binary is provided by the package &lt;em&gt;oath-toolkit&lt;/em&gt; (which is the
dependency needed by &lt;em&gt;login_oath&lt;/em&gt;). &lt;em&gt;oathtool&lt;/em&gt; accepts the seed in either
hexadecimal or base32 format.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ oathtool --totp 0123456789abcdef0123
&lt;span class="m"&gt;054640&lt;/span&gt;
$ oathtool --totp -b AERUKZ4JVPG66AJD
&lt;span class="m"&gt;054640&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;em&gt;0123456789abcdef0123&lt;/em&gt; is the &lt;em&gt;seed&lt;/em&gt; in hexadecimal format (as in
&lt;code&gt;~/.totp-key&lt;/code&gt;) and &lt;em&gt;AERUKZ4JVPG66AJD&lt;/em&gt; is the same data, but base32-encoded.&lt;/p&gt;
&lt;p&gt;Alternatively, if you just want to do the hex -&amp;gt; b32 conversion, &lt;em&gt;login_oath&lt;/em&gt;'s
README gives a Perl example (but it is not an unreadable one-liner, so you may
not want to use it):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Some&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Google&lt;/span&gt; &lt;span class="n"&gt;Authenticator&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="nn"&gt;secrets&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;base32&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;convert&lt;/span&gt; &lt;span class="n"&gt;them&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;p5&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Convert&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Base32:&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Convert::Base32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;H*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;99d12448129d1e8192e063d64714209137a13864&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;encode_base32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h1&gt;System configuration&lt;/h1&gt;
&lt;p&gt;We can now move to the configuration of the system to put our new TOTP to use.
As you might guess, it's going to be quite close to what we did with the
yubikey.&lt;/p&gt;
&lt;p&gt;We need to tweak &lt;code&gt;login.conf&lt;/code&gt;. &lt;strong&gt;Be careful&lt;/strong&gt; and keep a root shell open at all
times.  The few times I broke my OpenBSD were because I messed with login.conf
without showing enough care.&lt;/p&gt;
&lt;p&gt;After the lines:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# Default allowed authentication styles for authentication type ftp
auth-ftp-defaults:auth-ftp=passwd:
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;we add:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# Default allowed authentication styles for authentication type ssh
auth-ssh-defaults:auth-ssh=-totp:
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and inside the class of the user account for which TOTP is being set, we add
the line &lt;code&gt;:tc=auth-ssh-defaults:\&lt;/code&gt;. For instance, in my case it's:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;staff:\
        :datasize-cur=1536M:\
        :datasize-max=infinity:\
        :maxproc-max=512:\
        :maxproc-cur=256:\
        :ignorenologin:\
        :requirehome@:\
        :tc=auth-ssh-defaults:\
        :tc=default:
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;(Hint: it's the penultimate line). You can check the class of your user using
&lt;code&gt;id -c&lt;/code&gt;.&lt;/p&gt;
&lt;h1&gt;sshd configuration&lt;/h1&gt;
&lt;p&gt;Again, keeping a root shell around decreases the risk of losing access to the
system and being locked outside.&lt;/p&gt;
&lt;p&gt;A good standard is to use &lt;code&gt;PasswordAuthentication no&lt;/code&gt; and to use public key
only. Except... have a guess what the &lt;em&gt;P&lt;/em&gt; stands for in &lt;em&gt;TOTP&lt;/em&gt;.  Yes, congrats,
you guessed it!&lt;/p&gt;
&lt;p&gt;We need to switch to &lt;code&gt;PasswordAuthentication yes&lt;/code&gt;. However, if we made this
change alone, sshd would then accept a public key OR a password (which are TOTP
because of our &lt;em&gt;login.conf&lt;/em&gt;). 2FA uses both at the same time.&lt;/p&gt;
&lt;p&gt;To inform sshd we intend to use both, we need to set &lt;code&gt;AuthenticationMethods
publickey,password&lt;/code&gt;. This way, the user trying to login will first need to
perform the traditional publickey authentication. Once that's done, ssh will
prompt for a password and the user will need to submit a valid TOTP for the
system.&lt;/p&gt;
&lt;p&gt;We could do this the other way around, but I think bots could try passwords,
wasting resources. Evaluated in this order, failing to provide a public key leads to
sshd immediately declining your attempt.&lt;/p&gt;
&lt;p&gt;Here's the diff of the output when testing with &lt;code&gt;ssh -v&lt;/code&gt; using both public-key-only authentication and two-factor authentication:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nf"&gt;debug1:&lt;/span&gt; &lt;span class="n"&gt;Authentication&lt;/span&gt; &lt;span class="n"&gt;succeeded&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;publickey&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Authenticated&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;partial&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nl"&gt;debug1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Authentications&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nl"&gt;debug1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Next&lt;/span&gt; &lt;span class="n"&gt;authentication&lt;/span&gt; &lt;span class="nl"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;danj&lt;/span&gt;&lt;span class="mf"&gt;@198.51.100.12&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="nl"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nl"&gt;debug1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Authentication&lt;/span&gt; &lt;span class="n"&gt;succeeded&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h1&gt;Improving security without impacting UX&lt;/h1&gt;
&lt;p&gt;My phone has a long enough password that most of the time, I fail to type it
correctly on the first try. Of course, if I had to unlock my phone, launch my
TOTP app and use my keyboard to enter what I see on my phone's screen, I would
quickly disable 2FA.&lt;/p&gt;
&lt;p&gt;To find a balance, I have whitelisted certain IP addresses and users. If I
connect from a particular IP address or as a specific user, I don't want to go
through 2FA. For some users, I might not even enable 2FA.&lt;/p&gt;
&lt;p&gt;To whitelist, we can use the &lt;em&gt;Match&lt;/em&gt; keyword. Here are two basic examples:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Match User git
    AuthenticationMethods publickey
&lt;/pre&gt;&lt;/div&gt;


&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Match Address 203.0.113.47 # VPN
    AuthenticationMethods publickey
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;To sum up, we covered how to create a seed, how to perform a hexadecimal to
base32 conversion and how to create a &lt;em&gt;QR code&lt;/em&gt; for mobile applications. We
configured the login system with &lt;em&gt;login.conf&lt;/em&gt; so that ssh authentication uses
the TOTP login system, and we told sshd to ask for both the public key and the
Time-based One-Time Password. Now you should be all set to use two-factor
ssh authentication on OpenBSD!&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks &lt;a href="https://bsd.network/@pamela"&gt;Pamela&lt;/a&gt; for the proof-reading!&lt;/em&gt;&lt;/p&gt;</content><category term="OpenBSD"></category><category term="2FA"></category></entry><entry><title>The Effective Manager</title><link href="https://oldblog.chown.me/blog/the-effective-manager.html" rel="alternate"></link><published>2018-08-13T10:20:00-04:00</published><updated>2018-08-13T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2018-08-13:/blog/the-effective-manager.html</id><summary type="html">&lt;p&gt;I read The Effective Manager by Mark Horstman; here's my summary.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Note: this is also available in audio format: 3:49
&lt;a href="https://chown.me/iota/blog/the-effective-manager.mp3"&gt;(1.6MB mp3)&lt;/a&gt;
&lt;a href="https://chown.me/iota/blog/the-effective-manager.ogg"&gt;(1.3MB ogg)&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;A few months ago, I stumbled across &lt;a href="https://jacobian.org/writing/engmanager-reading-list/"&gt;A reading list for new engineering
managers&lt;/a&gt;. I'm not sure
that I want to become a manager, but even so, knowing how management tasks
should be approached is valuable. Knowing how things work from the other side
helps me to understand the bigger picture, so I try to do that with most things
in life.&lt;/p&gt;
&lt;p&gt;I began by reading the first book on the list, &lt;em&gt;The Effective Manager&lt;/em&gt; by Mark
Horstman. Here's what I found interesting:&lt;/p&gt;
&lt;p&gt;Firstly, employees should be able to list their goals. If they can't, they
should ask "what results do you expect from me?" and "how will you measure my
performance?"&lt;/p&gt;
&lt;p&gt;For the manager, the two main goals are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Achieve Results&lt;/li&gt;
&lt;li&gt;Retain Employees&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To help the manager succeed in these goals, the book first gives some general
advice:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get to know your people&lt;/li&gt;
&lt;li&gt;Communicate about performance&lt;/li&gt;
&lt;li&gt;Ask for more&lt;/li&gt;
&lt;li&gt;Push work down&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Their respective importance is set to 40%, 30%, 20% and 10%. (Isn't it great
when you add percentages and their sum is, indeed, 100%?)&lt;/p&gt;
&lt;p&gt;When goals are clearly defined and the manager communicates about their
employee's performance, both are off to a good start!&lt;/p&gt;
&lt;p&gt;"Generally, the more a team trusts its manager, the better the results will be,
and the better the retention as well."&lt;/p&gt;
&lt;p&gt;The author advises managers to talk to their subordinates frequently about things
that are important to them. For those frequent discussions, his recommended
format is the &lt;em&gt;One-on-One&lt;/em&gt;. One-on-ones are scheduled, weekly, 30-minute
meetings that managers have with each of their employees.&lt;/p&gt;
&lt;p&gt;One-on-ones last thirty minutes at the most, but can end early if neither has
more to say. The thirty minutes are split into three ten-minute segments.  The
first third is for what the subordinate wishes to discuss. The second third allows
the manager to provide feedback and instruction. The final third (hopefully
there's still some time left :-)) is designated for discussion about the future
... as it's not particularly useful to talk about the past.&lt;/p&gt;
&lt;p&gt;The book has some tips for addressing the reasons why some might be reluctant
to attend one-on-ones.  If they say their schedule is already fully booked, the
key is to say "ok, but look at your schedule. If in one month it's mostly free,
let's add a few weekly 30-minute slots then, to see how it goes."&lt;/p&gt;
&lt;p&gt;Another problem that could arise is the employee being unwilling to talk or
dominating the conversation. Again, the book has some tips for that and in both
cases, it comes down to &lt;strong&gt;gently&lt;/strong&gt; encouraging the behavior you want to see
&lt;strong&gt;without forcing&lt;/strong&gt; the employee (at least, in the beginning).&lt;/p&gt;
&lt;p&gt;For giving feedback, Horstman provides the following model:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ask if the person is open to receiving feedback. It's useless to give
   feedback if one's not open to it. Also, hashtag consent.&lt;/li&gt;
&lt;li&gt;Identify the behavior you've noticed.&lt;/li&gt;
&lt;li&gt;Describe the impact of the behavior (positive or negative).&lt;/li&gt;
&lt;li&gt;Encourage effective future behavior. If the feedback is positive, say "keep
   up the good work!" and if it isn't, ask questions and work out a plan.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One important thing about feedback is that you shouldn't be angry when you
deliver it. Bearing that in mind, you should still give it as soon as you can.&lt;/p&gt;
&lt;p&gt;I didn't take any notes for the points "Ask for more" and "Push work down"
because I didn't feel I was learning anything. Of course, this is specific to
me. I'm sure plenty of people will find valuable advice in these sections.&lt;/p&gt;
&lt;p&gt;I quite liked the book; it was full of interesting points. What I didn't like
was that sometimes the author repeated points that felt obvious to me. Also, I
felt like the author was a bit full of himself (though that may simply reflect
cultural differences).&lt;/p&gt;
&lt;p&gt;Reading &lt;em&gt;The Effective Manager&lt;/em&gt; will provide you with a lot of techniques as a
manager to complete your daily tasks. Even as someone without subordinates, I
found this a valuable read, as it allows for some management in reverse.&lt;/p&gt;
&lt;p&gt;Finally, remember the saying: "people don't quit their jobs; they quit their
managers." ;)&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks &lt;a href="https://bsd.network/@pamela"&gt;Pamela&lt;/a&gt; for the proof-reading and the audio recording!&lt;/em&gt;&lt;/p&gt;</content><category term="management"></category><category term="books"></category></entry><entry><title>The Checklist Manifesto</title><link href="https://oldblog.chown.me/blog/the-checklist-manifesto.html" rel="alternate"></link><published>2018-06-01T10:20:00-04:00</published><updated>2018-06-01T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2018-06-01:/blog/the-checklist-manifesto.html</id><summary type="html">&lt;p&gt;I read The Checklist Manifesto&lt;/p&gt;</summary><content type="html">&lt;p&gt;What is the best way to improve the quality of your actions? According to the
author of the book &lt;a href="https://en.wikipedia.org/wiki/The_Checklist_Manifesto"&gt;&lt;em&gt;The Checklist
Manifesto&lt;/em&gt;&lt;/a&gt;, it's with
checklists.&lt;/p&gt;
&lt;p&gt;A few months ago, a &lt;a href="https://instinctive.eu/"&gt;friend&lt;/a&gt; wrote &lt;a href="https://instinctive.eu/weblog/0AC-perte-de-memoire-II"&gt;a blog
article&lt;/a&gt; about how her
memory began to fail her. &lt;a href="https://blog.pasithee.fr/"&gt;Another friend&lt;/a&gt;
&lt;a href="https://instinctive.eu/weblog/0AC-perte-de-memoire-II#VXBU66HpV1Ds"&gt;commented&lt;/a&gt; that
she wrote a checklist to avoid forgetting anything before a commit, after
having read &lt;em&gt;The Checklist Manifesto&lt;/em&gt;.  Another passion of mine is airplanes.
In the aviation world, there are checklists for everything. I was curious
what this book could say about this subject so I read it.&lt;/p&gt;
&lt;p&gt;While reading the book was pleasant, if the author talked only about checklists,
I think it could have been only one chapter. The other things he wrote about
are communications and sharing—or spreading—responsibilities. These topics are also
very important but out of the scope in my opinion.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Atul_Gawande"&gt;Atul Gawande&lt;/a&gt; (the author)
is a surgeon, so obviously he talks about surgery but not only. For instance,
he talks about how aviation and construction firms started using checklists, who
writes them, and what they cover.&lt;/p&gt;
&lt;p&gt;But why make checklists? The author
explains that over the last centuries we have learned many many things, but we
sometimes fail at doing them.  Checklists are there to lower our fail rate.
They also help to be faster and more methodical.&lt;/p&gt;
&lt;p&gt;Checklists don't improve our skills, they improve results. They are guards
against basic errors and oversights.&lt;/p&gt;
&lt;p&gt;That sounds good, doesn't it? So how does one a do a good checklist? The author
gives a &lt;em&gt;rule of thumb&lt;/em&gt;. The checklist must:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;be between 5 and 9 elements—it should take between 60 and 90 seconds to complete&lt;/li&gt;
&lt;li&gt;have a clear &lt;em&gt;pause point&lt;/em&gt; i.e. when to go through the checklist&lt;/li&gt;
&lt;li&gt;be short and precise, they're not a how-to&lt;/li&gt;
&lt;li&gt;have a publication date and be occasionally revised&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Atul Gawande lists two kinds of checklist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;do-confirm: you do your stuff and once you think you're good, you go
through the checklist to verify you didn't forget anything&lt;/li&gt;
&lt;li&gt;read-do: you do what the checklist says you have to do while reading it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Checklists can be done during team briefing and it has the added benefit that it
improves communication among the team.&lt;/p&gt;
&lt;p&gt;I liked this book and if you're curious about stories behind checklists, you
should definitely read it!&lt;/p&gt;</content><category term="Books"></category><category term="checklist"></category></entry><entry><title>Hackathon report - p2k18</title><link href="https://oldblog.chown.me/blog/p2k18.html" rel="alternate"></link><published>2018-05-03T10:20:00-04:00</published><updated>2018-05-03T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2018-05-03:/blog/p2k18.html</id><summary type="html">&lt;p&gt;Another ports hackathon in Nantes, France&lt;/p&gt;</summary><content type="html">&lt;p&gt;After two mostly boring flights, I was in Nantes on Sunday. I didn't do much
because I wanted to get some rest after an exhausting week and tried to get my
body into this new timezone. After a long night of sleep, I went to the hackroom.
It was already well crowded for the first morning.&lt;/p&gt;
&lt;p&gt;On Friday the week before, I asked my boss at 5 pm if I had to take days off. He said
"no" as a way to support my work on Open Source—it had been the same for
&lt;a href="./t2k17.html"&gt;t2k17&lt;/a&gt;. I made a deal with myself that I would finish what I was
working on for a customer instead of asking my coworker. So a large part of my
Monday was finishing that stuff. Still, &lt;a href="https://github.com/openbsd/ports/commit/a322d2ddc88df925eb9c719578e9f6aca0096298"&gt;I updated a port I maintain,
pqiv&lt;/a&gt;.
I received a &lt;a href="https://chown.me/iota/dmesg/dmesg-x1.txt"&gt;generous donation&lt;/a&gt; from &lt;a href="https://twitter.com/mischapeters"&gt;Mischa
Peters&lt;/a&gt; so I installed OpenBSD on it (thanks
to jasper@ for carrying it!).&lt;/p&gt;
&lt;p&gt;Installing OpenBSD was not that trivial because I didn't have any USB key and
the wired NIC required an adapter which I didn't have and the wifi NIC required
a firmware to work. Thanks to &lt;a href="https://twitter.com/poolporg"&gt;our marvelous
organizer&lt;/a&gt; for providing me a USB key and stsp@ for
lending me a USB NIC (which later &lt;a href="https://undeadly.org/cgi?action=article;sid=20180430190108"&gt;krw@ used to debug a dhclient
bug&lt;/a&gt;!). After that,
I installed the packages I use, rsync'ed my home from my work laptop I was
using until then like a lil' pig and felt immediately at home!&lt;/p&gt;
&lt;p&gt;I really begin the ports hackathon on Tuesday when I committed an update for
py-setuptools. I had already &lt;a href="./b2k16.html"&gt;updated them&lt;/a&gt; 18 months ago. It was
easy to do it because I already did all the work a few weeks ago. My plan was
to commit it before the hackathon but the clang6 fallout decided otherwise. I
needed this setuptools to port upt. &lt;a href="https://framagit.org/upt"&gt;upt&lt;/a&gt; is a
"modular tool that helps people package software from PyPI/CPAN/etc. to
OpenBSD/GNU Guix/etc". It's made by a &lt;a href="https://perso.aquilenet.fr/~steap/"&gt;very good friend of
mine&lt;/a&gt; so I sent him a bunch of &lt;a href="https://framagit.org/upt/upt-rubygems/commit/ccb5c2c1f9df2c383a02b2297f0354c3692757b4"&gt;really
nice&lt;/a&gt;
&lt;a href="https://framagit.org/upt/upt-cpan/commit/893ef4aed42a121fb2adb6412dd9c91f81a8e8f0"&gt;diffs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I imported spdx and spdx-lookup which are a database of licenses and a tool to
query it. That's the tool upt is using to
&lt;a href="https://framagit.org/upt/upt/blob/master/upt/licenses.py#L702"&gt;guess&lt;/a&gt; the
license used. Then, I decided to call it a day. The morning was stressful, and rain was forecasted for the next few days. This pushed me to go see the city. I went to
see &lt;a href="https://www.lesmachines-nantes.fr/en/"&gt;&lt;em&gt;Les Machines De L'Île&lt;/em&gt;&lt;/a&gt;. Sadly the
Elephant was sick so I couldn't ride him. He was fine enough to spit water on
kids though. What makes me even sadder is that I didn't photograph the
billboard saying it was sick. It would have been such a cool error page
for when PostgreSQL is down!&lt;/p&gt;
&lt;p&gt;I also visited &lt;em&gt;Le Chateau des Ducs de Bretagne&lt;/em&gt; and &lt;em&gt;Le Jardin des Plantes&lt;/em&gt;
which both were awesome with the nice blue sky I had. It was also funny to
notice that the people of Nantes try to trick people, with putting "de Bretagne"
in various names, into thinking that Nantes is in Bretagne while it is not.
Yup, I'm pretty happy to have a static blog without any comments system so
there won't be any hateful reactions visible here :-)&lt;/p&gt;
&lt;p&gt;Once I got back to the hackroom, I review-n-committed a couple of diffs for
python ports. I updated again pqiv as they released another bugfix release and
did some reviews for the &lt;a href="https://undeadly.org/cgi?action=article;sid=20180429101745"&gt;boar port from solene@&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I spent Wednesday only doing reviews for other devs—facette, influxdb for
landry@, and several python ports for pvk@. At 5 pm I was fed up, so I went to
the supermarket and bought some Belgian beers (&lt;em&gt;Trappe Quadrupel&lt;/em&gt; and
&lt;em&gt;Westmalle&lt;/em&gt; mainly but also some &lt;em&gt;Chimay&lt;/em&gt;). Once drunk I went to play ping-pong
with other French hackers. A few hours—and less alcohol in my blood—later, I
finally updated my main server to OpenBSD 6.3 which went fine.&lt;/p&gt;
&lt;p&gt;I also looked at setting &lt;code&gt;PORTS_PRIVSEP=Yes&lt;/code&gt; being one of the &lt;a href="https://undeadly.org/cgi?action=article;sid=20180429190200"&gt;"new
converts"&lt;/a&gt;, but I
had some &lt;a href="https://marc.info/?l=openbsd-ports-cvs&amp;amp;m=152466817003263&amp;amp;w=2"&gt;problems&lt;/a&gt;
(this commit message actually makes me laugh so much) so I eventually decided to
rollback. Now, however, I know which permissions to set if I want to enable it
again so that's cool!&lt;/p&gt;
&lt;p&gt;Thursday was low-hanging-fruit day. One of the commits renamed a package and so
I needed to add a quirks entry. I did all of it on my own and I was glad to see
how much more comfortable I was after two years (I got my &lt;em&gt;commit bit&lt;/em&gt; shortly
before p2k16 which happened 2 years ago).&lt;/p&gt;
&lt;p&gt;Until Friday, I didn't submit upt because I was waiting for Cyril to send an
email about it. He finally sent
&lt;a href="https://marc.info/?l=openbsd-ports&amp;amp;m=152478073001511&amp;amp;w=2"&gt;it&lt;/a&gt; so I submitted
it while replying to his email. I had already talked about it to landry@
because he wanted to port a dozen of python ports. I told him this tool
could help him so he was eager to try it. I finally imported it after a couple
of back and forth between landry@ and I.&lt;/p&gt;
&lt;p&gt;Saturday was my last day as I was traveling on Sunday. I reviewed
collectd/liboping for landry@, looked at the new
&lt;a href="https://www.palletsprojects.com/blog/flask-1-0-released/"&gt;Flask&lt;/a&gt;. During
p2k16, I talked with eric@ about ports where he was listed as maintainer. This
time I succeeded in convincing him that his time was better spent on OpenSMTPD so
there was no need to for him to be listed as maintainer. My final commit for
p2k18 was freeing him from the ports tree :-) &lt;/p&gt;
&lt;p&gt;A while ago, I bought two &lt;a href="./playing-with-the-pine64.html"&gt;pine64&lt;/a&gt; but they
were not that useful for my use cases—too slow and unreliable. For a few weeks,
semarie was using one of them remotely to work on rust/arm64. But when it
stopped working, I had to investigate which didn't please my laziness. I offered
him to take one and give it to him. He gladly accepted and then it was quickly &lt;a href="https://marc.info/?l=openbsd-bugs&amp;amp;m=152526381422932&amp;amp;w=2"&gt;put to
use&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;It was very nice to see Nantes and my fellow OpenBSD hackers again. I could commit
the diffs I had for a few weeks and reviewed some submissions that enhance what
you can &lt;code&gt;pkg_add&lt;/code&gt; on OpenBSD. Thanks to gilles@ for all the organization and to
Epitech for hosting us again and to the OpenBSD Foundation for the fundings!&lt;/p&gt;</content><category term="OpenBSD"></category><category term="dev"></category><category term="hackathon"></category><category term="python"></category></entry><entry><title>New design</title><link href="https://oldblog.chown.me/blog/new-design.html" rel="alternate"></link><published>2018-04-13T10:20:00-04:00</published><updated>2018-04-13T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2018-04-13:/blog/new-design.html</id><summary type="html">&lt;p&gt;The blog has a new design!&lt;/p&gt;</summary><content type="html">&lt;p&gt;In June this blog will be five years old. Since &lt;a href="./blog.html"&gt;I created it&lt;/a&gt;, it
has had the same design. A few weeks ago I looked for a new theme. I found
&lt;a href="https://github.com/Parbhat/pelican-blue"&gt;pelican-blue&lt;/a&gt; which I liked. For my
first theme, I took it from someone and shortly after someone took it from me.
This time I wanted something more unique.&lt;/p&gt;
&lt;p&gt;I took pelican-blue and hammered the CSS so people would notice I love the
color &lt;a href="https://en.wikipedia.org/wiki/Red"&gt;&lt;em&gt;red&lt;/em&gt;&lt;/a&gt;. At home, my sheets are red, my bath towel is red, my couch is
red, my curtains are red. Even the ribbon Jean Canard plays with is &lt;a href="https://pics.chown.me/Jean-Canard/IMG_0675.JPG"&gt;red&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I noticed a couple of things that were broken with the theme so I had to fix
them. Now I have to go back to my commit log to tell the original author as a
way to contribute back.&lt;/p&gt;
&lt;p&gt;At first, my blog URL was &lt;code&gt;blog.chown.me&lt;/code&gt;. Then I wanted https but I couldn't
have another domain because back then free (and valid—hi cacert) certificates
weren't a thing, I moved it to &lt;code&gt;chown.me/blog&lt;/code&gt;. To welcome stalk^Wvisitors I
had a landing page on &lt;code&gt;chown.me&lt;/code&gt;. Now, however, I changed my mind and I prefer
to have my blog index page directly on &lt;code&gt;chown.me&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I wanted to break as few links as possible—ain't nobody got time to write the
otherwise needed haproxy redirection. I think I tweaked enough of my
&lt;a href="https://blog.getpelican.com/"&gt;pelican&lt;/a&gt; config file so that most of them are fine.
Not all of them are; I had to break one or two because of translations.
Fortunately, I was lazy enough to translate only a handful of articles so the
breakage is minimal.&lt;/p&gt;
&lt;p&gt;To fix some past mistakes I had to go through old articles. It was a weird
feeling to read my younger self. I wouldn't advise to read them haha. They're in
French anyway.&lt;/p&gt;
&lt;p&gt;One of my 2018 New Year's resolution was to write more blog articles. With not a
single one for the first quarter, you can guess it's not my best
accomplishment. But hopefully, I'll finally do it.&lt;/p&gt;</content><category term="blog"></category></entry><entry><title>Routing traffic with multiple OpenVPN</title><link href="https://oldblog.chown.me/blog/routing-traffic-with-multiple-openvpn.html" rel="alternate"></link><published>2017-11-21T10:20:00-05:00</published><updated>2017-11-21T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2017-11-21:/blog/routing-traffic-with-multiple-openvpn.html</id><summary type="html">&lt;p&gt;On my home router, I have multiple instances of OpenVPN, and here I describe how I route my traffic&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Why OpenVPN?&lt;/h2&gt;
&lt;p&gt;For &lt;a href="https://evolix.ca/en"&gt;my dayjob&lt;/a&gt; we access the servers we manage
through OpenVPN. Of course it's not the only security measure, it's
yet another layer and it helps to cut a part of the
&lt;a href="https://en.wikipedia.org/wiki/Internet_background_noise"&gt;IBN&lt;/a&gt;. All of
our servers are registered in
&lt;a href="https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol"&gt;LDAP&lt;/a&gt;
and from this system we create some routes that the OpenVPN server
pushes to the OpenVPN clients.&lt;/p&gt;
&lt;h2&gt;What did I need?&lt;/h2&gt;
&lt;h3&gt;Follow the pushed routes, not always and not for all the hosts&lt;/h3&gt;
&lt;p&gt;I work sometimes from home (for on-call or just remote work). I have a
IP phone which needs the VPN but of course I can't setup OpenVPN on
the phone directly, so the VPN has to go on my router. But let's say
some android phone (without security updates) connects to my wifi, I
don't want its traffic to go through the VPN.&lt;/p&gt;
&lt;p&gt;But I also have my own desktop that I don't want any of its traffic to
go through the VPN, but sometimes I want it to use the routes if I
want to quickly check something on a server.&lt;/p&gt;
&lt;h3&gt;Default route sometimes, sometimes not&lt;/h3&gt;
&lt;p&gt;By default, clients don't set the gateway to the vpn, because we
have the routes. But sometimes, we need to access a host through the
VPN without having a route to it being pushed by the server. Hence I
need to be able to route all the traffic through the vpn if
needed. But not always because the vpn endpoint is 105ms away and
browsing with this increased latency is obviously a bit slower.&lt;/p&gt;
&lt;h3&gt;Even with a default route, bypassing the VPN for some servers&lt;/h3&gt;
&lt;p&gt;I have a VM in Montreal, 10ms away, and there's no reason that the
traffic should go through the VPN. Same goes for my OpenBSD mirror.&lt;/p&gt;
&lt;h3&gt;Multiple VPN&lt;/h3&gt;
&lt;p&gt;I also have another VPN which endpoints is in Montreal and I may want
to route some host from my lan through it. It must independant from
the other VPN.&lt;/p&gt;
&lt;h3&gt;Don't touch the server side&lt;/h3&gt;
&lt;p&gt;My coworkers use the VPN as well so I can't change the server
configuration just to suit my own need.&lt;/p&gt;
&lt;h2&gt;Suiting all the needs \o/&lt;/h2&gt;
&lt;p&gt;I will only talk about the client as there's nothing special on the
server side&lt;/p&gt;
&lt;h3&gt;OpenVPN infrastructure&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;danj@pancake:/etc/openvpn$ ls
client-ca.conf  client-fr.conf  private-stuff/
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Config files are as usual, the only special thing is that I force
the tun device used by the VPN (so I can use it in pf.conf):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;danj@pancake:/etc/openvpn$ grep dev *.conf
client-ca.conf:dev tun1
client-fr.conf:dev tun0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In &lt;code&gt;rc.conf.local&lt;/code&gt;, I set the correct config file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;openvpn_fr_flags=&amp;quot;--config /etc/openvpn/client-fr.conf&amp;quot;
openvpn_ca_flags=&amp;quot;--config /etc/openvpn/client-ca.conf&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;now I can &lt;code&gt;rcctl start openvpn_fr&lt;/code&gt; and &lt;code&gt;rcctl start openvpn_ca&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;routing&lt;/h3&gt;
&lt;p&gt;Spoiler alert, everything is done with pf.&lt;/p&gt;
&lt;p&gt;I won't put my whole pf.conf but only the needed parts. First let's
describe the interface.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;vpnfr_if = &amp;quot;tun0&amp;quot;
vpnca_if = &amp;quot;tun1&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I have vlan-capable switch and wifi AP, so I have multiple networks.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;lan_net = $lan_if:network
wifilap_net = $wifilap_if:network
wifitel_net = $wifitel_if:network
windows_net = $windows_if:network
tel_net = $tel_if:network
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I need some tables (don't worry, you'll understand later what purpose
they have).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;table &amp;lt;softvpnfr&amp;gt; { 10.20.20.20 } persist
table &amp;lt;vpnfr&amp;gt; { $phone } persist
table &amp;lt;vpnca&amp;gt; { 10.10.10.60 } persist
table &amp;lt;bypassfr&amp;gt; { 129.128.197.20, 129.128.5.191, 185.19.29.62, 167.114.216.84 } persist
table &amp;lt;forcevpnfr&amp;gt; { $mrs-fw2 }
table &amp;lt;nousautres&amp;gt; { 10.0.0.0/8, $home_ip } persist
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now we can see the ruleset. I let everything from the lan, that doesn't
go on the router itself or to another lan (so the traffic will need
another rules to be allowed) come through.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pass in     on $lan_if     from $lan_net     to ! &amp;lt;nousautres&amp;gt;
pass in     on $wifilap_if from $wifilap_net to ! &amp;lt;nousautres&amp;gt;
pass in     on $wifitel_if from $wifitel_net to ! &amp;lt;nousautres&amp;gt;
pass in     on $tel_if     from $tel         to ! &amp;lt;nousautres&amp;gt;
pass in log on $windows_if proto { tcp, udp } from $windows_net to ! &amp;lt;nousautres&amp;gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I let everything going out&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pass out log on $ext_if proto { tcp, udp } all modulate state
pass out on $vpnfr_if proto { tcp, udp } all modulate state
pass out on $vpnca_if proto { tcp, udp } all modulate state
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now's the fun part.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;softvpn&amp;gt;&lt;/code&gt; is the hosts that can you the routes pushed by the VPN but
it doesn't use the VPN as the gw&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;vpnfr&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;vpnca&amp;gt;&lt;/code&gt; everything from the hosts in it goes through
the VPN (French or Canadian)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;bypassfr&amp;gt;&lt;/code&gt; any traffic to host in the table won't go through the VPN&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;forcevpnfr&amp;gt;&lt;/code&gt; host that must be accessed through the VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# disable the use of the routes if you&amp;#39;re not in &amp;lt;softvpn&amp;gt;
pass in on { $lan_if, $wifilap_if, $wifitel_if, $atlas_if } \
     from !&amp;lt;softvpnfr&amp;gt; to ! &amp;lt;nousautres&amp;gt;  route-to ($ext_if $home_ip)

# force traffic through the French VPN
pass in on { $lan_if, $wifilap_if, $wifitel_if, $tel_if } \
     from &amp;lt;vpnfr&amp;gt; to ! &amp;lt;nousautres&amp;gt; route-to ($vpnfr_if 192.168.125.61)

# traffic to hosts in &amp;lt;bypass&amp;gt; must not go through the VPN
pass in on { $lan_if, $wifilap_if, $wifitel_if, $tel_if } \
     from &amp;lt;vpnfr&amp;gt; to &amp;lt;bypassfr&amp;gt; route-to ($ext_if $home_ip)

# force traffic through the Canadian VPN
pass in on { $lan_if, $wifilap_if, $wifitel_if, $tel_if } \
     from &amp;lt;vpnca&amp;gt; to ! &amp;lt;nousautres&amp;gt; route-to ($vpnca_if 192.168.251.10)

# traffic from &amp;lt;softvpnfr&amp;gt; to hosts in &amp;lt;forcevpnfr&amp;gt; should really go through the VPN
pass in on { $lan_if, $wifilap_if, $wifitel_if } \
     from &amp;lt;softvpnfr&amp;gt; to &amp;lt;forcevpnfr&amp;gt; route-to ($vpnfr_if 192.168.125.61)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;But the real magic with pf, is that I can &lt;strong&gt;very easily&lt;/strong&gt; change the
routing for any host :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# if I want everything to go through the Canadian VPN
root@pancake:~# pfctl -t vpnca -Ta 10.1.2.3
# or not
root@pancake:~# pfctl -t vpnca -Td 10.1.2.3
# through the French VPN
root@pancake:~# pfctl -t vpnfr -Ta 10.1.2.3
# ok not everything, just use the route pushed by the VPN
root@pancake:~# pfctl -t vpnfr -Td 10.1.2.3
root@pancake:~# pfctl -t softvpn -Ta 10.1.2.3
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;That's all! Of course, if anything goes wrong, I have
&lt;a href="https://chown.me/iota/pics/IMG_0551.JPG"&gt;Jean Canard's Advanced Paws System (APS)&lt;/a&gt;
that checks for anything.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="pf"></category></entry><entry><title>Dumping pics</title><link href="https://oldblog.chown.me/blog/dumping-pics.html" rel="alternate"></link><published>2017-11-04T10:20:00-04:00</published><updated>2017-11-04T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2017-11-04:/blog/dumping-pics.html</id><summary type="html">&lt;p&gt;I finally dumped the pics I took with my phone&lt;/p&gt;</summary><content type="html">&lt;p&gt;A few years ago I bought a camera (a Canon 100D) and since that I take
pictures from time to time. I go through all the pics I take and I
pick the best then I enhance them a bit with rawtherapee and finally I
post them on &lt;a href="http://piks.chown.me"&gt;500px&lt;/a&gt;. This process is a bit
&lt;em&gt;relou&lt;/em&gt; so I don't often do it. Of course I don't always have my camera
with me, but I do have my phone most of the time.&lt;/p&gt;
&lt;p&gt;I take a lot of pictures with my phone and I sometimes post them on
some social networks. All these social networks I'm on, are based on
ephemeral publications so after a &lt;strong&gt;short&lt;/strong&gt; while, the stuff goes out
of your mind and you never see it again.&lt;/p&gt;
&lt;p&gt;I looked for a self-hostable solution. I found PHP-based software like
leetchi and piwigo but I wasn't fond of these. I looked at static
generators as I already use one (pelican) for this blog. Sadly, there
are maaaanyyyy of them for blogs and text-based publications but for
gallery there very few static generators. Finally I found
&lt;a href="https://github.com/saimn/sigal"&gt;sigal&lt;/a&gt; which is maintained, written
in python, quite nice and very straight forward to use.&lt;/p&gt;
&lt;p&gt;Here's the result: &lt;a href="https://pics.chown.me/"&gt;https://pics.chown.me/&lt;/a&gt; (with among other themes,
as of now, 229 pics of my delicious kitten &lt;em&gt;Jean Canard&lt;/em&gt;).&lt;/p&gt;</content><category term="autohébergement"></category></entry><entry><title>Playing with the pine64</title><link href="https://oldblog.chown.me/blog/playing-with-the-pine64.html" rel="alternate"></link><published>2017-10-19T10:20:00-04:00</published><updated>2017-10-19T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2017-10-19:/blog/playing-with-the-pine64.html</id><summary type="html">&lt;p&gt;Some notes about how to get started with OpenBSD on the pine64&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Finding something to install on it&lt;/h2&gt;
&lt;p&gt;6 weeks ago, I ordered two pine64 units. I didn't (and still don't)
have much plan for them, but I wanted to play with some cheap
boards. I finally received them this week. Initially I wanted to
install some Linux stuff on it, I didn't have much requirement so I
thought I would just look what seems to be easy and/or the best
supported systemd flavour. I headed over their
&lt;a href="http://wiki.pine64.org/index.php/Pine_A64_Software_Release"&gt;wiki&lt;/a&gt;. Everything
seems either not really maintained, done by some random people or
both. I am not saying random people do bad things, just that
installing some random things from the Internet is not really my cup
of tea.&lt;/p&gt;
&lt;p&gt;I heard about &lt;a href="https://www.armbian.com/pine64/"&gt;Armbian&lt;/a&gt; but the
server flavour seems to be experimental so I got scared of it. And
sadly, the whole things looks like to be alot undermanned.&lt;/p&gt;
&lt;p&gt;So I went for OpenBSD because I know the stuff and who to har^Wkindly
ask for help. Spoiler alert, it's boring because it just works.&lt;/p&gt;
&lt;h2&gt;Getting OpenBSD on it&lt;/h2&gt;
&lt;p&gt;I downloaded miniroot62.fs, dd'ed it on the micro SD card. I was
afraid I'd need to fiddle with some things like sysutils/dtb because I
don't know what I would have needed to do. That's because I don't know
what it does and for this precise reason I was wrong and I didn't need
to do anything. So just dd the miniroot62.fs and you can go to next
checkpoint.&lt;/p&gt;
&lt;p&gt;I plugged an HDMI cable, ethernet cable and the power, it booted, I
could read for 10 seconds but then it got dark. Of course it's because
you need a serial console. Of course I didn't have one.&lt;/p&gt;
&lt;p&gt;I thought about trying to install OpenBSD blindly, I could have
probably succeeded with autoinstall buuuuuut...&lt;/p&gt;
&lt;p&gt;Following some good pieces of advice from OpenBSD people I bought some
cp2102 (I didn't try to understand what it was or what were the other
possibilities, I just wanted something that would work :D).&lt;/p&gt;
&lt;p&gt;I looked how to plug the thing. It appears you can plug it on &lt;a href="http://linux-sunxi.org/File:Pine64_UART0.jpg"&gt;two
different places&lt;/a&gt; but
if you plug it on the &lt;em&gt;Euler bus&lt;/em&gt; it could power a bit the board so if
you try to reboot it, it would then mess with the power disruption and
could lead a unclean reboot.&lt;/p&gt;
&lt;p&gt;You just need to plug three cables: GND, TXD and RXD. Of course, the
TXD goes on the RXD pin from the picture and the RXD goes on the TXD
pin. Guess why I'm telling you that!&lt;/p&gt;
&lt;h2&gt;That's it&lt;/h2&gt;
&lt;p&gt;Then you can connect with the usual&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ cu -dl /dev/cuaU0 -s &lt;span class="m"&gt;115200&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;You can now install it and the reboot it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;PSCI&lt;/span&gt; &lt;span class="n"&gt;Affinity&lt;/span&gt; &lt;span class="nl"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="nl"&gt;AffInst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MPID&lt;/span&gt; &lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;ON&lt;/span&gt;
&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="nl"&gt;AffInst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MPID&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;OFF&lt;/span&gt;
&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="nl"&gt;AffInst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MPID&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;OFF&lt;/span&gt;
&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="nl"&gt;AffInst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Level&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MPID&lt;/span&gt; &lt;span class="mh"&gt;0x3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;OFF&lt;/span&gt;

&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Boot&lt;/span&gt; &lt;span class="n"&gt;SPL&lt;/span&gt; &lt;span class="mf"&gt;2017.09&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Sep&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="mi"&gt;2017&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mo"&gt;04&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nl"&gt;DRAM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt; &lt;span class="n"&gt;MiB&lt;/span&gt;
&lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;boot&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;MMC1&lt;/span&gt;
&lt;span class="nl"&gt;NOTICE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;BL3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Running&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;A64&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;H64&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1689&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;SRAM&lt;/span&gt; &lt;span class="n"&gt;A2&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;@0x44000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nl"&gt;NOTICE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;Configuring&lt;/span&gt; &lt;span class="n"&gt;SPC&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt;
&lt;span class="nl"&gt;NOTICE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;BL3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20170702&lt;/span&gt;
&lt;span class="nl"&gt;NOTICE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;BL3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;Built&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mo"&gt;04&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Sep&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="mi"&gt;2017&lt;/span&gt;
&lt;span class="nl"&gt;NOTICE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;Configuring&lt;/span&gt; &lt;span class="n"&gt;AXP&lt;/span&gt; &lt;span class="n"&gt;PMIC&lt;/span&gt;
&lt;span class="nl"&gt;NOTICE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nl"&gt;PMIC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt; &lt;span class="n"&gt;successful&lt;/span&gt;
&lt;span class="nl"&gt;NOTICE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nl"&gt;SCPI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dummy&lt;/span&gt; &lt;span class="n"&gt;stub&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="nl"&gt;level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mo"&gt;000000&lt;/span&gt;
&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;BL3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Initializing&lt;/span&gt; &lt;span class="n"&gt;runtime&lt;/span&gt; &lt;span class="n"&gt;services&lt;/span&gt;
&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;BL3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Preparing&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;EL3&lt;/span&gt; &lt;span class="n"&gt;exit&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;normal&lt;/span&gt; &lt;span class="n"&gt;world&lt;/span&gt;
&lt;span class="nl"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;BL3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Next&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="nl"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x4a000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;SPSR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x3c9&lt;/span&gt;


&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Boot&lt;/span&gt; &lt;span class="mf"&gt;2017.09&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Sep&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="mi"&gt;2017&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mo"&gt;04&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;0600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Allwinner&lt;/span&gt; &lt;span class="n"&gt;Technology&lt;/span&gt;

&lt;span class="nl"&gt;CPU&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;Allwinner&lt;/span&gt; &lt;span class="n"&gt;A64&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SUN50I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nl"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Pine64&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="nl"&gt;DRAM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;GiB&lt;/span&gt;
&lt;span class="nl"&gt;MMC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;SUNXI&lt;/span&gt; &lt;span class="n"&gt;SD&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nl"&gt;MMC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="o"&gt;***&lt;/span&gt; &lt;span class="n"&gt;Warning&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt; &lt;span class="n"&gt;CRC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt;

&lt;span class="nl"&gt;In&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;serial&lt;/span&gt;
&lt;span class="nl"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;serial&lt;/span&gt;
&lt;span class="nl"&gt;Err&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;serial&lt;/span&gt;
&lt;span class="nl"&gt;Net&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;phy&lt;/span&gt; &lt;span class="n"&gt;interface7&lt;/span&gt;
&lt;span class="nl"&gt;eth0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ethernet&lt;/span&gt;&lt;span class="mo"&gt;@01&lt;/span&gt;&lt;span class="n"&gt;c30000&lt;/span&gt;
&lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nl"&gt;USB0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;USB&lt;/span&gt; &lt;span class="n"&gt;EHCI&lt;/span&gt; &lt;span class="mf"&gt;1.00&lt;/span&gt;
&lt;span class="nl"&gt;USB1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;USB&lt;/span&gt; &lt;span class="n"&gt;OHCI&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
&lt;span class="n"&gt;scanning&lt;/span&gt; &lt;span class="n"&gt;bus&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;USB&lt;/span&gt; &lt;span class="n"&gt;Device&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;
       &lt;span class="n"&gt;scanning&lt;/span&gt; &lt;span class="n"&gt;usb&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;Storage&lt;/span&gt; &lt;span class="n"&gt;Device&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;
&lt;span class="n"&gt;Hit&lt;/span&gt; &lt;span class="n"&gt;any&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt; &lt;span class="nl"&gt;autoboot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;partitions&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OK&lt;/span&gt;
&lt;span class="n"&gt;mmc0&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="n"&gt;device&lt;/span&gt;
&lt;span class="n"&gt;Scanning&lt;/span&gt; &lt;span class="n"&gt;mmc&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;1.&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;
&lt;span class="n"&gt;Found&lt;/span&gt; &lt;span class="n"&gt;EFI&lt;/span&gt; &lt;span class="n"&gt;removable&lt;/span&gt; &lt;span class="n"&gt;media&lt;/span&gt; &lt;span class="n"&gt;binary&lt;/span&gt; &lt;span class="n"&gt;efi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;boot&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bootaa64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;efi&lt;/span&gt;
&lt;span class="n"&gt;reading&lt;/span&gt; &lt;span class="n"&gt;efi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;boot&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bootaa64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;efi&lt;/span&gt;
&lt;span class="mi"&gt;78335&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt; &lt;span class="n"&gt;ms&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.1&lt;/span&gt; &lt;span class="n"&gt;MiB&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;libfdt&lt;/span&gt; &lt;span class="n"&gt;fdt_check_header&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FDT_ERR_BADMAGIC&lt;/span&gt;
&lt;span class="cp"&gt;## Starting EFI application at 40080000 ...&lt;/span&gt;
&lt;span class="n"&gt;Scanning&lt;/span&gt; &lt;span class="n"&gt;disks&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;usb&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Scanning&lt;/span&gt; &lt;span class="n"&gt;disks&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;mmc&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;MMC&lt;/span&gt; &lt;span class="n"&gt;Device&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;
&lt;span class="n"&gt;MMC&lt;/span&gt; &lt;span class="n"&gt;Device&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;
&lt;span class="n"&gt;MMC&lt;/span&gt; &lt;span class="n"&gt;Device&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;
&lt;span class="n"&gt;Found&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="n"&gt;disks&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;OpenBSD&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;arm64&lt;/span&gt; &lt;span class="n"&gt;BOOTAA64&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;
&lt;span class="n"&gt;boot&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="n"&gt;booting&lt;/span&gt; &lt;span class="nl"&gt;sd0a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nl"&gt;bsd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3861360&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;574928&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;511472&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;807968&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;285863&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;451944&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;239980&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mh"&gt;0x831130&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0x40000000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0x40000000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4000&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x7&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0x44000000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0x40000000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4000&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0x48000000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0x48000000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;   
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x7&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0x48005000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0x40000000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x70832&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8837000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8837000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;    
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb883b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb883b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb883f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb883f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8843000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8843000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8847000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8847000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb884b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb884b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb884f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb884f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8853000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8853000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8857000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8857000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb885b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb885b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb885f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb885f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8863000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8863000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8867000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8867000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb886b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb886b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb886f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb886f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8873000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8873000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8877000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8877000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb887b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb887b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb887f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb887f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8883000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8883000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8887000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8887000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb888b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb888b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb888f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb888f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8893000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8893000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8897000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8897000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb889b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb889b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb889f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb889f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88a3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88a3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88a7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88a7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88ab000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88ab000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88af000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88af000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88b3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88b3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88b7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88b7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88bb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88bb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88bf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88bf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88c3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88c3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88c7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88c7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88cb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88cb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88cf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88cf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88d3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88d3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88d7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88d7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88db000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88db000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88df000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88df000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88e3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88e3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88e7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88e7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88eb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88eb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88ef000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88ef000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88f3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88f3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88f7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88f7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88fb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88fb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb88ff000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb88ff000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8903000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8903000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8907000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8907000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb890b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb890b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb890f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb890f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8913000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8913000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8917000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8917000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb891b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb891b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb891f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb891f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8923000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8923000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8927000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8927000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb892b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb892b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb892f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb892f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8933000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8933000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8937000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8937000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb893b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb893b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb893f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb893f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8943000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8943000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8947000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8947000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb894b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb894b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb894f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb894f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8953000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8953000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8957000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8957000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb895b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb895b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb895f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb895f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8963000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8963000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8967000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8967000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb896b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb896b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb896f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb896f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8973000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8973000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8977000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8977000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb897b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb897b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb897f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb897f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8983000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8983000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8987000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8987000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb898b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb898b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb898f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb898f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8993000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8993000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8997000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8997000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb899b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb899b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb899f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb899f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89a3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89a3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89a7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89a7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89ab000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89ab000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89af000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89af000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89b3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89b3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89b7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89b7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89bb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89bb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89bf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89bf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89c3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89c3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89c7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89c7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89cb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89cb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89cf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89cf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89d3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89d3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89d7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89d7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89db000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89db000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89df000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89df000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89e3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89e3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89e7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89e7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89eb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89eb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89ef000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89ef000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89f3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89f3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89f7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89f7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89fb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89fb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb89ff000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb89ff000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a03000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a03000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a07000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a07000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a0b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a0b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a0f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a0f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a13000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a13000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a17000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a17000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a1b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a1b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a1f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a1f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a23000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a23000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a27000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a27000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a2b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a2b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a2f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a2f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a33000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a33000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a37000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a37000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a3b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a3b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a3f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a3f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a43000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a43000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a47000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a47000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a4b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a4b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a4f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a4f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a53000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a53000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a57000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a57000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a5b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a5b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a5f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a5f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a63000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a63000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a67000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a67000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a6b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a6b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a6f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a6f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a73000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a73000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a77000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a77000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a7b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a7b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a7f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a7f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a83000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a83000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a87000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a87000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a8b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a8b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a8f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a8f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a93000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a93000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a97000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a97000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a9b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a9b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8a9f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8a9f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8aa3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8aa3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8aa7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8aa7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8aab000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8aab000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8aaf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8aaf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ab3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ab3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ab7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ab7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8abb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8abb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8abf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8abf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ac3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ac3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ac7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ac7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8acb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8acb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8acf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8acf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ad3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ad3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ad7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ad7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8adb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8adb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8adf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8adf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ae3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ae3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ae7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ae7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8aeb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8aeb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8aef000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8aef000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8af3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8af3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8af7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8af7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8afb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8afb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8aff000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8aff000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b03000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b03000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b07000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b07000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b0b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b0b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b0f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b0f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b13000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b13000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b17000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b17000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b1b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b1b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b1f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b1f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b23000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b23000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b27000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b27000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b2b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b2b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b2f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b2f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b33000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b33000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b37000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b37000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b3b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b3b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b3f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b3f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b43000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b43000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b47000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b47000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b4b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b4b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b4f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b4f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b53000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b53000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b57000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b57000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b5b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b5b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b5f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b5f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b63000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b63000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b67000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b67000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b6b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b6b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b6f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b6f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b73000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b73000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b77000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b77000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b7b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b7b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b7f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b7f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b83000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b83000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b87000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b87000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b8b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b8b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b8f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b8f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b93000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b93000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b97000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b97000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b9b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b9b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8b9f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8b9f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ba3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ba3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ba7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ba7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bab000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bab000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8baf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8baf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bb3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bb3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bb7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bb7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bbb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bbb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bbf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bbf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bc3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bc3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bc7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bc7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bcb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bcb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bcf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bcf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bd3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bd3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bd7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bd7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bdb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bdb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bdf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bdf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8be3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8be3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8be7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8be7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8beb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8beb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bef000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bef000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bf3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bf3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bf7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bf7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bfb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bfb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8bff000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8bff000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c03000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c03000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c07000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c07000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c0b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c0b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c0f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c0f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c13000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c13000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c17000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c17000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c1b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c1b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c1f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c1f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c23000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c23000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c27000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c27000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c2b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c2b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c2f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c2f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c33000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c33000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c37000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c37000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c3b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c3b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c3f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c3f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c43000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c43000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c47000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c47000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c4b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c4b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c4f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c4f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c53000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c53000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c57000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c57000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c5b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c5b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c5f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c5f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c63000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c63000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c67000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c67000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c6b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c6b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c6f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c6f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c73000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c73000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c77000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c77000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c7b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c7b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c7f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c7f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c83000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c83000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c87000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c87000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c8b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c8b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c8f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c8f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c93000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c93000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c97000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c97000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c9b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c9b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8c9f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8c9f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ca3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ca3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ca7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ca7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cab000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cab000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8caf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8caf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cb3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cb3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cb7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cb7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cbb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cbb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cbf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cbf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cc3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cc3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cc7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cc7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ccb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ccb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ccf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ccf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cd3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cd3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cd7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cd7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cdb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cdb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cdf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cdf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ce3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ce3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ce7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ce7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ceb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ceb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cef000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cef000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cf3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cf3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cf7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cf7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cfb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cfb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8cff000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8cff000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d03000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d03000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d07000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d07000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d0b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d0b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d0f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d0f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d13000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d13000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d17000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d17000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d1b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d1b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d1f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d1f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d23000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d23000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d27000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d27000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d2b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d2b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d2f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d2f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d33000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d33000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d37000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d37000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d3b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d3b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d3f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d3f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d43000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d43000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d47000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d47000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d4b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d4b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d4f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d4f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d53000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d53000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d57000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d57000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d5b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d5b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d5f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d5f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d63000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d63000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d67000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d67000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d6b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d6b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d6f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d6f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d73000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d73000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d77000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d77000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d7b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d7b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d7f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d7f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d83000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d83000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d87000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d87000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d8b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d8b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d8f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d8f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d93000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d93000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d97000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d97000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d9b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d9b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8d9f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8d9f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8da3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8da3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8da7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8da7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dab000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dab000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8daf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8daf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8db3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8db3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8db7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8db7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dbb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dbb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dbf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dbf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dc3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dc3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dc7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dc7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dcb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dcb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dcf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dcf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dd3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dd3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dd7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dd7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ddb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ddb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8ddf000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8ddf000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8de3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8de3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8de7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8de7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8deb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8deb000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8def000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8def000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8df3000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8df3000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8df7000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8df7000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8df8000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8df8000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dfc000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dfc000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dfe000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dfe000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8dff000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8dff000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e00000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e00000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e01000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e01000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e05000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e05000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e06000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e06000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e0a000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e0a000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e0b000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e0b000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e0f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e0f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e11000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e11000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e12000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e12000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e13000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e13000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e14000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e14000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e18000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e18000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e19000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e19000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e1d000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e1d000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e1f000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e1f000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e20000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e20000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8e21000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8e21000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x100&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x6&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8f21000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8f21000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8000000000000008&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8f22000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8f22000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x13&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;              
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xb8f35000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8f35000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x5085&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x5&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xbdfba000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xbdfba000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8000000000000008&lt;/span&gt;
&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt; &lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="mh"&gt;0xbdfbb000&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="mh"&gt;0xb8f35000&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="mh"&gt;0x2045&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;            
&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="mi"&gt;978720&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;bsd&lt;/span&gt; &lt;span class="n"&gt;ELF&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;            
&lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;1982&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1986&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1989&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1991&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1993&lt;/span&gt;    
    &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;Regents&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;University&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;California&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;  &lt;span class="n"&gt;All&lt;/span&gt; &lt;span class="n"&gt;rights&lt;/span&gt; &lt;span class="n"&gt;reserved&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;1995&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2017&lt;/span&gt; &lt;span class="n"&gt;OpenBSD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;All&lt;/span&gt; &lt;span class="n"&gt;rights&lt;/span&gt; &lt;span class="n"&gt;reserved&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;  &lt;span class="nl"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//www.OpenBSD.org&lt;/span&gt;

&lt;span class="n"&gt;OpenBSD&lt;/span&gt; &lt;span class="mf"&gt;6.2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GENERIC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;56&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt; &lt;span class="n"&gt;MDT&lt;/span&gt; &lt;span class="mi"&gt;2017&lt;/span&gt;
    &lt;span class="n"&gt;deraadt&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="n"&gt;arm64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;openbsd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;org&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;arch&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;arm64&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;compile&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;GENERIC&lt;/span&gt;
&lt;span class="n"&gt;real&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2021859328&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1928&lt;/span&gt;&lt;span class="n"&gt;MB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                      
&lt;span class="n"&gt;avail&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1935818752&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1846&lt;/span&gt;&lt;span class="n"&gt;MB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mainbus0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;root&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Pine64&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;      
&lt;span class="n"&gt;cpu0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;mainbus0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ARM&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;A53&lt;/span&gt; &lt;span class="n"&gt;r0p4&lt;/span&gt;
&lt;span class="n"&gt;psci0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;mainbus0&lt;/span&gt;                    
&lt;span class="n"&gt;agtimer0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;mainbus0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tick&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="mi"&gt;24000&lt;/span&gt; &lt;span class="n"&gt;KHz&lt;/span&gt;
&lt;span class="n"&gt;simplebus0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;mainbus0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;soc&amp;quot;&lt;/span&gt;            
&lt;span class="n"&gt;sxiccmu0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;simplebus0&lt;/span&gt;       
&lt;span class="n"&gt;sxipio0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;simplebus0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;103&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;sximmc0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;simplebus0&lt;/span&gt;          
&lt;span class="n"&gt;sdmmc0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sximmc0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sd&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mmc&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dma&lt;/span&gt;
&lt;span class="n"&gt;ehci0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;simplebus0&lt;/span&gt;                                         
&lt;span class="n"&gt;usb0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;ehci0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;USB&lt;/span&gt; &lt;span class="n"&gt;revision&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;
&lt;span class="n"&gt;uhub0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;usb0&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;interface&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Generic EHCI root hub&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;rev&lt;/span&gt; &lt;span class="mf"&gt;2.00&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;1.00&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;com0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;simplebus0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ns16550&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;working&lt;/span&gt; &lt;span class="n"&gt;fifo&lt;/span&gt;                                          
&lt;span class="nl"&gt;com0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;console&lt;/span&gt;                               
&lt;span class="n"&gt;ampintc0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;simplebus0&lt;/span&gt; &lt;span class="n"&gt;nirq&lt;/span&gt; &lt;span class="mi"&gt;224&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ncpu&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;interrupt-controller&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;sxirtc0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;simplebus0&lt;/span&gt;                                          
&lt;span class="n"&gt;dwxe0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;simplebus0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="mo"&gt;02&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;ba&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;b0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nl"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;de&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;
&lt;span class="n"&gt;rgephy0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;dwxe0&lt;/span&gt; &lt;span class="n"&gt;phy&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RTL8169S&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;8110&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;8211&lt;/span&gt; &lt;span class="n"&gt;PHY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;rgephy1&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;dwxe0&lt;/span&gt; &lt;span class="n"&gt;phy&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RTL8169S&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;8110&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;8211&lt;/span&gt; &lt;span class="n"&gt;PHY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;gpio0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;                              
&lt;span class="n"&gt;gpio1&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;gpio2&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;gpio3&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;gpio4&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;gpio5&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;gpio6&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;gpio7&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sxipio0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;pins&lt;/span&gt;
&lt;span class="n"&gt;scsibus0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;sdmmc0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;targets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;initiator&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;sd0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;scsibus0&lt;/span&gt; &lt;span class="n"&gt;targ&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;lun&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SD&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MMC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;USD00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mo"&gt;0010&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SCSI2&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;direct&lt;/span&gt; &lt;span class="n"&gt;removable&lt;/span&gt;
&lt;span class="nl"&gt;sd0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15080&lt;/span&gt;&lt;span class="n"&gt;MB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30883840&lt;/span&gt; &lt;span class="n"&gt;sectors&lt;/span&gt;                            
&lt;span class="n"&gt;vscsi0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;                                  
&lt;span class="n"&gt;scsibus1&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;vscsi0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt; &lt;span class="n"&gt;targets&lt;/span&gt;
&lt;span class="n"&gt;softraid0&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;              
&lt;span class="n"&gt;scsibus2&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nl"&gt;softraid0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt; &lt;span class="n"&gt;targets&lt;/span&gt;
&lt;span class="nl"&gt;bootfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;sd0a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bsd&lt;/span&gt;               
&lt;span class="n"&gt;boot&lt;/span&gt; &lt;span class="nl"&gt;device&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sd0&lt;/span&gt;   
&lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;sd0a&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;swap&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;sd0b&lt;/span&gt; &lt;span class="n"&gt;dump&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;sd0b&lt;/span&gt;
&lt;span class="n"&gt;Automatic&lt;/span&gt; &lt;span class="n"&gt;boot&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nl"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;   
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0a&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0l&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0d&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0f&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0g&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0h&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0k&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0j&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sd0e&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aad98897a9859bd0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;checking&lt;/span&gt;
&lt;span class="n"&gt;setting&lt;/span&gt; &lt;span class="n"&gt;tty&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;
&lt;span class="n"&gt;pf&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt;
&lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;network&lt;/span&gt;
&lt;span class="nl"&gt;dwxe0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DHCPREQUEST&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mf"&gt;255.255.255.255&lt;/span&gt;
&lt;span class="nl"&gt;dwxe0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DHCPNACK&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="mf"&gt;10.20.20.254&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;b9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;9f&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nl"&gt;dwxe0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DHCPDISCOVER&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nl"&gt;dwxe0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DHCPOFFER&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="mf"&gt;10.20.20.254&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;b9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;9f&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nl"&gt;dwxe0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DHCPREQUEST&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mf"&gt;255.255.255.255&lt;/span&gt;
&lt;span class="nl"&gt;dwxe0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DHCPACK&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="mf"&gt;10.20.20.254&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;b9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;9f&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nl"&gt;dwxe0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bound&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mf"&gt;10.20.20.15&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="n"&gt;renewal&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;21600&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;
&lt;span class="n"&gt;reordering&lt;/span&gt; &lt;span class="nl"&gt;libraries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="nl"&gt;openssl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;generating&lt;/span&gt; &lt;span class="n"&gt;isakmpd&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;iked&lt;/span&gt; &lt;span class="n"&gt;RSA&lt;/span&gt; &lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;keygen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;generating&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="nl"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RSA&lt;/span&gt; &lt;span class="n"&gt;DSA&lt;/span&gt; &lt;span class="n"&gt;ECDSA&lt;/span&gt; &lt;span class="n"&gt;ED25519&lt;/span&gt; 
&lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;early&lt;/span&gt; &lt;span class="nl"&gt;daemons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;syslogd&lt;/span&gt; &lt;span class="n"&gt;pflogd&lt;/span&gt; &lt;span class="n"&gt;ntpd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;RPC&lt;/span&gt; &lt;span class="nl"&gt;daemons&lt;/span&gt;&lt;span class="p"&gt;:.&lt;/span&gt;
&lt;span class="nl"&gt;savecore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;core&lt;/span&gt; &lt;span class="n"&gt;dump&lt;/span&gt;
&lt;span class="n"&gt;checking&lt;/span&gt; &lt;span class="nl"&gt;quotas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;clearing&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;
&lt;span class="n"&gt;kern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;securelevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;creating&lt;/span&gt; &lt;span class="n"&gt;runtime&lt;/span&gt; &lt;span class="n"&gt;link&lt;/span&gt; &lt;span class="n"&gt;editor&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;preserving&lt;/span&gt; &lt;span class="n"&gt;editor&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;network&lt;/span&gt; &lt;span class="nl"&gt;daemons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sshd&lt;/span&gt; &lt;span class="n"&gt;smtpd&lt;/span&gt; &lt;span class="n"&gt;sndiod&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;running&lt;/span&gt; &lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;firsttime&lt;/span&gt;
&lt;span class="n"&gt;Path&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="nl"&gt;firmware&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//firmware.openbsd.org/firmware/snapshots/&lt;/span&gt;
&lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="n"&gt;which&lt;/span&gt; &lt;span class="n"&gt;need&lt;/span&gt; &lt;span class="n"&gt;firmware&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;downloaded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;local&lt;/span&gt; &lt;span class="nl"&gt;daemons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Wed&lt;/span&gt; &lt;span class="n"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt; &lt;span class="n"&gt;MDT&lt;/span&gt; &lt;span class="mi"&gt;2017&lt;/span&gt;

&lt;span class="n"&gt;OpenBSD&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;arm64&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;alpaga&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chown&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nl"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And now, I just have to wait for
&lt;a href="https://chown.me/iota/pics/IMG_0675.JPG"&gt;Jean Canard&lt;/a&gt; to destroy the
whole thing.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="pine64"></category></entry><entry><title>Hackathon report - t2k17</title><link href="https://oldblog.chown.me/blog/t2k17.html" rel="alternate"></link><published>2017-08-21T10:20:00-04:00</published><updated>2017-08-21T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2017-08-21:/blog/t2k17.html</id><summary type="html">&lt;p&gt;I slacked so much that even &lt;a href="https://portroach.openbsd.org/"&gt;portroach&lt;/a&gt; stopped mailing the outdated ports I maintained as it noticed how pointless it was :-)&lt;/p&gt;</summary><content type="html">&lt;p&gt;I also wrote &lt;a href="http://undeadly.org/cgi?action=article&amp;amp;sid=20170821231153"&gt;a shorter and less personal report on undeadly&lt;/a&gt;, feel free
to read it rather than this one if you don't want to know about other things than
the hackathon.&lt;/p&gt;
&lt;p&gt;August was a busy month events-wise. I had the visit of coworkers who
work in France, because &lt;a href="https://debconf17.debconf.org/"&gt;this year's Debconf&lt;/a&gt; took place here, in Montreal.&lt;/p&gt;
&lt;p&gt;After a week of fun activities,
&lt;a href="https://twitter.com/Vigdis_/status/894318053093146624"&gt;I went to debconf&lt;/a&gt;
with them.
&lt;a href="https://twitter.com/Vigdis_/status/893877976235991042"&gt;With my badge&lt;/a&gt;,
people noticed I liked OpenBSD and during the 'Wine and Cheese' event,
someone came to me to talk about OpenBSD. In fact he was
&lt;a href="https://qa.debian.org/developer.php?login=sf"&gt;sf@debian.org&lt;/a&gt; who is also
&lt;a href="https://v4.freshbsd.org/search?committer=sf&amp;amp;project=openbsd"&gt;sf@openbsd.org&lt;/a&gt;. I
was very surprised to meet another OpenBSD developer at debconf!&lt;/p&gt;
&lt;p&gt;I finally left debconf on Tuesday evening because I had to take the
train on Wednesday morning with mpi@ to go to Toronto. In the train I
was slacking on the Internet when I noticed mpi@ was already hacking
with his $EDITOR. I felt guilty so I began to update
graphics/pqiv. Fortunately, jca@ was already in the hackroom so he was
available to help/review. It was cool to begin with that port because
it's a very simple port and I had to learn about the new COMPILER
variable, thus I could easily focus just on that.&lt;/p&gt;
&lt;p&gt;I also took the opportunity of the train journey to ask mpi@ questions
about networking stuff which leaded to more things I want to dig in.&lt;/p&gt;
&lt;p&gt;Once I arrived in the hackroom, I committed a duplicity update I had
in my tree for a long time. I also looked at a submission on ports@
which needed some help because of libressl vs openssl and once I
received some ok I put it in the tree.&lt;/p&gt;
&lt;p&gt;Over the last few weeks I've been looking at porting some OpenBGPD
check for nagios-like monitoring system to improve my &lt;a href="https://evolix.ca/"&gt;dayjob&lt;/a&gt;'s
monitoring system. I realized then that I didn't even check what we
already had in the ports tree. We had a check that I quickly tested
and it appeared to be broken. afresh1@, who is the check maintainer
and upstream hadn't arrived yet, I asked other developers that I know
they run BGPd in production what they use. I got to know about how
they did their monitoring which was pretty interesting!&lt;/p&gt;
&lt;p&gt;To look at something else than the ports tree, I began to look at
updating xkeyboard-config which is one of the tool used by xenocara. I
already did the last update but at the time I didn't notice we had
some local patches so I wanted to do it more carefully this time. I
had some troubles doing this update so I took care of writing some
notes about how I did it so next time should be easier.&lt;/p&gt;
&lt;p&gt;Finally afresh1@ arrived and I told him about the bgpd check problem
and in fact he had fixed it two years ago but forgot to update the
port. He quickly committed an update to close the case.&lt;/p&gt;
&lt;p&gt;One thing I wanted to do during this hackathon was updating
haproxy. A few months ago when they release the latest branch, I
didn't succeed to update our port to it because of libressl vs
openssl. It wasn't such a big deal because old-stable branch was still
supported. After waiting 9 months, I just grabbed
&lt;a href="https://github.com/trueos/freebsd-ports/blob/3745ead2e0f43985c3647e1e3aecae2751decfda/net/haproxy/files/patch-src_ssl__sock.c"&gt;the patch Bernard Spil did for TrueOS&lt;/a&gt;
and it just worked so I was really happy!&lt;/p&gt;
&lt;p&gt;In addition of that, I updated the other ports I maintained and I
finally reached a state where all the ports I maintained were up to
date \o/&lt;/p&gt;
&lt;p&gt;To sum up, I did everything I wanted during this hackaton, with more
ease than I thought. I had the opportunity to have really interesting
discussions with a lot of other developers (during &lt;a href="https://twitter.com/Vigdis_/status/895794041450897408"&gt;our social event&lt;/a&gt; but not only). Thanks a lot to the
University of Toronto for hosting us (in a
&lt;a href="https://twitter.com/Vigdis_/status/896356797988167681"&gt;very nice part of the city&lt;/a&gt;
and krw@ for organizing!&lt;/p&gt;</content><category term="OpenBSD"></category><category term="hackathon"></category><category term="dev"></category><category term="evolix"></category><category term="bgp"></category></entry><entry><title>My recent journey with 2FA</title><link href="https://oldblog.chown.me/blog/my-recent-journey-with-2FA.html" rel="alternate"></link><published>2017-02-26T10:20:00-05:00</published><updated>2017-02-26T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2017-02-26:/blog/my-recent-journey-with-2FA.html</id><summary type="html">&lt;p&gt;I recently begin to increase my use of 2FA so here's my report about it.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;2FA&lt;/h2&gt;
&lt;p&gt;Of course by 2FA I mean
&lt;a href="https://en.wikipedia.org/wiki/Multi-factor_authentication"&gt;two-factor authentication&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I've been using that for a long time for ssh with
&lt;a href="./yubikey-en.html"&gt;my yubikey on OpenBSD&lt;/a&gt; but I've never enabled 2FA
on the online services I use. The main reason for not doing it before was
that I thought that my phone had to play a central role (which in fact
is not much the case). While it's the most critical device I have, my
phone is the device I trust the least.&lt;/p&gt;
&lt;p&gt;However, yesterday I saw a comment on lobste.rs asking about
&lt;a href="https://lobste.rs/s/1cyltz/two_factor_authentication_now_available/comments/a9xvvg#c_a9xvvg"&gt;how to use TOTP on OpenBSD&lt;/a&gt;.
In addition to that, I guess seeing
&lt;a href="https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/"&gt;what happened to cloudflare&lt;/a&gt;
and everything what's happening if you want to cross the US border
made me more interested in 2FA than before.&lt;/p&gt;
&lt;p&gt;So I began to look into how it works.&lt;/p&gt;
&lt;h2&gt;How it works&lt;/h2&gt;
&lt;p&gt;The concept of 2FA is that you may lose your password (or your ssh
key) and in that case the person who takes control of it can
successfully impersonate you. The goal is that a login system will
require something else to verify that it's really you.&lt;/p&gt;
&lt;p&gt;One way to achieve this is to use SMS but that sucks: &lt;a href="http://www.baltimoresun.com/features/baltimore-insider-blog/bal-black-lives-matter-activist-deray-mckesson-s-twitter-hacked-friday-morning-20160610-story.html"&gt;circumventing it
is not even restricted to Nation State Actors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another can be something biometric but then users need to access to a
scanner which is quite impractical in every day life. Even if iPhones
have a fingerprint reader, it's not usable by third parties.&lt;/p&gt;
&lt;p&gt;It must be something that keeps changing otherwise it's both
subject to replay attack and it's just another password.&lt;/p&gt;
&lt;p&gt;Here comes the OTP.&lt;/p&gt;
&lt;h2&gt;One Time Password&lt;/h2&gt;
&lt;p&gt;One Time Password was defined in
&lt;a href="https://tools.ietf.org/html/rfc2289"&gt;RFC2289&lt;/a&gt; (which is quite old:
February 1998). Then they made HOTP (H is for &lt;em&gt;HMAC-Based&lt;/em&gt;) in
&lt;a href="https://tools.ietf.org/html/rfc4226"&gt;RFC4226&lt;/a&gt; and finally the TOTP (T
is for &lt;em&gt;Time-Based&lt;/em&gt;) in &lt;a href="https://tools.ietf.org/html/rfc6238"&gt;RFC&lt;/a&gt;
which is an extension of the HOTP to support the time-based moving
factor.&lt;/p&gt;
&lt;p&gt;To understand in more details you can either read in the RFC4226
&lt;a href="https://tools.ietf.org/html/rfc4226#page-7"&gt;5.4.  Example of HOTP Computation for Digit = 6&lt;/a&gt;
and then the short RFC6238 or you can just read this &lt;a href="https://pthree.org/2014/04/15/time-based-one-time-passwords-how-it-works/"&gt;random blog
article on the Internet which explains clearly the same thing&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;tl;dr&lt;/h3&gt;
&lt;p&gt;There's a secret shared and then you compute the HMAC-SHA1 of the
shared secret and epoch.&lt;/p&gt;
&lt;h3&gt;Wait, did you just say sha1?!?1?&lt;/h3&gt;
&lt;p&gt;Even if there's now a sha1 collision, it's not really a problem. To
quote Schneier: "[collision] pretty much puts a bullet into
SHA-1 as a hash function for digital signatures (although it doesn't
affect applications such as HMAC where collisions aren't important)."
(&lt;a href="https://www.schneier.com/blog/archives/2005/02/sha1_broken.html"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;And for a more complete answer, see this
&lt;a href="http://crypto.stackexchange.com/questions/26510/why-is-hmac-sha1-still-considered-secure"&gt;answer&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;How to use it&lt;/h2&gt;
&lt;h3&gt;Don't be locked out&lt;/h3&gt;
&lt;p&gt;I wanted to use my phone (something distinct that my computer to
compartment things a bit). Obviously the goal is to secure your
account without losing it so that means that losing your phone
shouldn't prevent you to retrieve access to your accounts. Unusable
security is unusable.&lt;/p&gt;
&lt;p&gt;If you read about 2FA, you'll see that some services that provide it,
give you some backup code to not to be locked out. But I don't want to
locked out from services don't provide backup codes either.&lt;/p&gt;
&lt;p&gt;So my phone must not be a single point of failure.&lt;/p&gt;
&lt;p&gt;We saw earlier that {T,H}OTP are based on a shared secret so let's
backup it.&lt;/p&gt;
&lt;h3&gt;Backuping shared secrets and backup codes&lt;/h3&gt;
&lt;p&gt;For my regular passwords, I use keepassx which is shared/backuped across my
different computers. I created another database to store those. Of
course you shouldn't use the same database to keep your passwords and the
other secrets in case of you leak one of the two database's password.&lt;/p&gt;
&lt;h3&gt;Clients&lt;/h3&gt;
&lt;h4&gt;Android phone&lt;/h4&gt;
&lt;p&gt;Now that I'm ready to activate 2FA, let's see how to use it. The plan
is to use my android phone. On the
&lt;a href="https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm"&gt;Time-based One-time Password Algorithm Wikipedia page&lt;/a&gt;
there was a list of clients but sadly it was deleted.
You can still find it
&lt;a href="https://en.wikipedia.org/w/index.php?title=Time-based_One-time_Password_Algorithm&amp;amp;oldid=724156353#Client_implementations"&gt;in the history&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I wanted a FOSS application and Google Authenticator is now closed
source so I went with FreeOTP which is not completely dead compared to
others (but it's not thriving either), so far it works good.&lt;/p&gt;
&lt;h4&gt;OpenBSD&lt;/h4&gt;
&lt;p&gt;In the case I don't have a phone, I still want to be able to
log in my different accounts. In the lobste.rs' link that I gave at the
beginning of this article, someone mentioned oath-toolkit which works
very easily:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ oathtool --totp -b deafcafe
&lt;span class="m"&gt;405723&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;(with deafcafe being the shared secret).&lt;/p&gt;
&lt;h2&gt;Activating it&lt;/h2&gt;
&lt;p&gt;Now that we're ready to use it, let's do it. So where to activate
it? Actually, there's &lt;a href="https://twofactorauth.org/"&gt;a cool site&lt;/a&gt; that
lists services that provide or not (and then you can shame them on
twitter) 2FA with a link to the service's documentation.&lt;/p&gt;
&lt;h3&gt;My Feedback&lt;/h3&gt;
&lt;p&gt;So far I activated 2FA on about half a dozen of website. The first one was
the &lt;a href="https://www.ripe.net/"&gt;RIPE NCC&lt;/a&gt; (if you don't want people to
steal your precious IP addresses and/or your atlas credit) and it was
actually a good one to try it.&lt;/p&gt;
&lt;p&gt;To activate it usually the website gives you a qrcode which is in fact
just a URL looking like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;otpauth://totp/Example:foo@example.com?secret=DEAFCAFE&amp;amp;issuer=Example
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;which is fine for my phone but sadly my eyes can't decode qrcode and I
need the shared secret to put it my keepassx. Most of the time
websites gives you by default the qrcode but also gives you the
possibility to access the shared secret.&lt;/p&gt;
&lt;p&gt;For now, everything works fine, I use my phone to unlock my different
accounts and if anything happens to it, I can just unlock my second
keepassx database and use oathtool (or use a backup code) to get my
account back.&lt;/p&gt;</content><category term="opsec"></category><category term="security"></category></entry><entry><title>Voir Morlaix et mourir</title><link href="https://oldblog.chown.me/blog/voir-Morlaix-et-mourir.html" rel="alternate"></link><published>2017-02-19T10:20:00-05:00</published><updated>2017-02-19T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2017-02-19:/blog/voir-Morlaix-et-mourir.html</id><summary type="html">&lt;p&gt;The fuck who knows&lt;/p&gt;</summary><content type="html">&lt;p&gt;Cet article est écrit le 22/11/16, je viens de quitter Rennes, je suis
dans le TGV pour Paris. Cet article est dans la catérogie Mylife, et
il est possible que tu le trouves ennuyeux. Si tu veux plutôt de
l'action clique &lt;a href="https://gfycat.com/WellgroomedFatalBrontosaurus"&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;2015&lt;/h2&gt;
&lt;p&gt;Je suis à Rouen. J'ai envie de partir à l'étranger, voir si l'herbe
est plus verte ailleurs. J'ai même trouvé une offre d'emploi (à
Amsterdam) et l'offre parle même d'OpenBSD. Je ne postule pas, mais je
regarde de temps en temps si l'offre est toujours là.&lt;/p&gt;
&lt;p&gt;Peu après je vais au Jardin Entropique (fin juin 2015, Rennes). J'y
rencontre une délicieuse jeune femme. On tombe amoureux l'un de
l'autre. Partir à l'étranger serait la quitter. Such nope.&lt;/p&gt;
&lt;p&gt;Je vais donc m'installer à Rennes pour me rapprocher d'elle et parce
que Rennes a l'air d'être une chouette ville. Je trouve assez
facilement un taf. Tout va bien.&lt;/p&gt;
&lt;h2&gt;Fast forward.&lt;/h2&gt;
&lt;p&gt;Les prises de tête ont pris la place des papillons dans le ventre. La
séparation arrive doucement comme la seule issue possible.&lt;/p&gt;
&lt;p&gt;L'idée de partir à l'étranger n'a jamais vraiment disparu. Quelques
mois avant, à un &lt;a href="http://actux.eu.org/apero-du-libre/"&gt;apéro du libre&lt;/a&gt;,
&lt;a href="https://twitter.com/AmarOk1412"&gt;AmarOk&lt;/a&gt; m'annonce qu'il part
au Canada, j'imagine que cela a beaucoup joué inconsciemment. Fun
fact, c'est ce même AmarOk qui m'a hébergé quand je suis allé au
Jardin Entropique.&lt;/p&gt;
&lt;p&gt;J'aime Rennes, c'est une ville cool mais j'ai pas plus d'attache que
ça. J'envisage à nouveau de partir à l'étranger. Cette fois, l'Europe
ne me dit plus trop. Je me dis pourquoi pas le Canada.&lt;/p&gt;
&lt;p&gt;En plus d'être un male, blanc, cis genre, hétéro, potent et ayant un
diplôme d'ingé en info, la vie n'est pas trop difficile. Mais en plus
j'ai la nationalité Canadienne (bien que je n'y sois jamais allé).&lt;/p&gt;
&lt;p&gt;Point de visa, de PVT, de je ne sais quoi.&lt;/p&gt;
&lt;p&gt;Je me pose quand même des questions, "est ce que je peux vraiment y
aller ?" "est ce qu'il ne me faut pas des papiers quand même ?" en
plus de mon passeport etc. Bien évidemment qui se pose ce genre de
question ? Du coup le site de l'immigration n'a bien évidemment pas de
réponse pour moi.&lt;/p&gt;
&lt;p&gt;Je me dis que si j'allais à l'étranger et que j'y rencontrais
quelqu'un qui me dit "je suis d'ici, mais j'ai la nationalité
Française, tu crois que je peux venir travailler en France ?", ma
réaction serait "t'es con ? bah oui, c'est bon".&lt;/p&gt;
&lt;h2&gt;Let's fucking do it.&lt;/h2&gt;
&lt;p&gt;De toute façon mes préavis pour le taf et pour mon appartement (dont
soit dit en passant, j'étais totalement fan) sont donnés. Je n'ai donc
plus qu'à tenter ma chance au Canada.&lt;/p&gt;
&lt;h2&gt;Et c'est le drame&lt;/h2&gt;
&lt;p&gt;Tout doucement, je commence à faire du tri, virer les affaires dont je
n'ai plus besoin. Un jour, j'ouvre un placard pour regarder ce que
j'ai dans ma cuisine (dans l'optique de savoir ce que je vais devoir
jeter etc). Et là gros pincement au coeur. Me dire que tout ça va
prendre fin m'attriste fortement.&lt;/p&gt;
&lt;h3&gt;Mes affaires chéries&lt;/h3&gt;
&lt;p&gt;Je vends deux choses dont je sais consciemment que je les aime, ma
&lt;a href="https://twitter.com/Vigdis_/status/627153939771838465"&gt;machine&lt;/a&gt; à
&lt;a href="https://twitter.com/Vigdis_/status/795698555726000128"&gt;écrire&lt;/a&gt; et mon
&lt;a href="https://twitter.com/Vigdis_/status/696614633730400256"&gt;single&lt;/a&gt;
&lt;a href="https://twitter.com/Vigdis_/status/799994595161600000"&gt;speed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sauf qu'en fait, c'est tout mon cadre dont je ne pensais pas tellement
être attaché auquel je le suis pourtant.&lt;/p&gt;
&lt;p&gt;Je vends aussi ma tour. Je l'ai eu à Noël quand j'étais en classe de
seconde. Bien qu'elle a subi plusieurs changements internes, c'est
toujours "ma tour" puisque le boitier n'a pas changé. Une fois en
faisant des trucs, je me dis que ça fait longtemps que je n'ai pas
joué à CSS (ça tourne bien sur lolbuntu et ça me détend). Et non. Je
n'ai plus la possibilité de jouer à CSS puisque je n'ai plus ma tour.&lt;/p&gt;
&lt;h3&gt;Ce qui rentre dans les valises.&lt;/h3&gt;
&lt;p&gt;Peu de temps avant de faire mes valises, je contemple toutes* mes
affaires. Plein de trucs que je ne pense pas prendre. Puis au fur et à
mesure, je réfléchis, je me dis que tel ou tel truc peut être utile là
bas. Voir même que ça serait bien que je les prenne. J'arrive à me
convaincre qu'il faut que je les prenne.&lt;/p&gt;
&lt;p&gt;*ou pas....&lt;/p&gt;
&lt;p&gt;Puis arrive le temps des valises, et là tu vois qu'en fait il y a
plein d'autres affaires. Et que tout ne va pas du tout
rentrer. &lt;em&gt;Vigdis, le spécialiste de l'ascenseur émotionnel.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Enfin, tu te rends compte que tu as tellement plus de place, que même
ton gel douche et ton shampoing, ça sera plus simple d'en toper ici et
là jusqu'à ce que tu ais de nouveau un «chez moi».&lt;/p&gt;
&lt;p&gt;Je suis toujours dans mon train. Et la seule chose dont vers laquelle
je me dirige est l'incertitude.&lt;/p&gt;</content><category term="Canada"></category></entry><entry><title>Hackathon report - b2k16</title><link href="https://oldblog.chown.me/blog/b2k16.html" rel="alternate"></link><published>2016-11-12T10:20:00-05:00</published><updated>2016-11-12T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2016-11-12:/blog/b2k16.html</id><summary type="html">&lt;p&gt;I just assisted to b2k16, here's my report&lt;/p&gt;</summary><content type="html">&lt;h2&gt;tl;dr&lt;/h2&gt;
&lt;p&gt;This post is quite long, I wrote &lt;a href="http://undeadly.org/cgi?action=article&amp;amp;sid=20161112141429"&gt;another report much shorter for
undeadly&lt;/a&gt;
so pick the one you prefer.&lt;/p&gt;
&lt;h2&gt;Setuptools&lt;/h2&gt;
&lt;p&gt;For me hacking stuff began a bit earlier. In september I sent a diff
to update py-setuptools, it even got in a bulk but the update was
discussed a bit slowly so it never hit the tree. py-setuptools is the
package used to create most of python packages. Currently 635 ports have
py-setuptools as a build depends. Serious sh^Htuff.&lt;/p&gt;
&lt;p&gt;So, on the week before going to Budapest, I took another shot at
updating this port. naddy@ kindly put my diff in a bulk. Two ports
got their py3 flavors broken. In their py3 flavor, for these two ports
the .so now would have an abi tag. Fixing them was very simple though
it took me quite a long time (compared to how simple the fix was) to
understand the proposal by sthen@. I hope I'll do better next time...&lt;/p&gt;
&lt;p&gt;The update diff and fixes were committed on saturday evening, that was
a good appetizer!&lt;/p&gt;
&lt;h2&gt;In Paris&lt;/h2&gt;
&lt;p&gt;On sunday evening I met with landry@ at a RER B (our lovely rail
system to go the airport) station so we could talk during the journey.
At the airport we met with
&lt;a href="https://twitter.com/Vigdis_/status/792806986727456768"&gt;ajacoutot@ and espie@&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;In Budapest&lt;/h2&gt;
&lt;p&gt;Going to the hackroom from the hotel, was quite easy, you just had to
cross the street.&lt;/p&gt;
&lt;h3&gt;Monday&lt;/h3&gt;
&lt;p&gt;I began the hackathon with updating a few ports that I often update
though I'm not listed as maintainer (hidden maintainer). Scapy had
released a new version the week before and so I began to work on it.&lt;/p&gt;
&lt;p&gt;Scapy usually publishes a new release more or less around every
Christmas. This year they released it a bit early. I already did the
previous upgrade back in January so I already knew the port and
upstream (while taking care of a port, I really mind about the ease to
work with upstream) and scapy's contributors are cool!&lt;/p&gt;
&lt;p&gt;Scapy is not a random port regarding OpenBSD. Under /usr/src/regress,
65 files do "import" something from scapy. I asked bluhm@ to test my
diff as he has some setups do it automatically. I had a few issues,
one was a bit frustrating because the problem came from a dependency
and I solved it with &lt;code&gt;make uninstall &amp;amp;&amp;amp; doas pkg_add matplotlib&lt;/code&gt;. I
reported the other issues to upstream and they nicely helped me. For
now the diff is still on ports@ as I'm waiting for the feedback
armani@ (he's the maintainer).&lt;/p&gt;
&lt;p&gt;But, secretly I was slacking about my main goal for this hackathon.&lt;/p&gt;
&lt;h3&gt;Tuesday&lt;/h3&gt;
&lt;p&gt;My main goal for this hackathon was updating py-flask. Flask is a
python web framework very easy to use and to get your hands on. For three
years they didn't create any new release but finally at the end of May
they released a new version. I sent a diff to update it but I only got
reluctant answer for the update.&lt;/p&gt;
&lt;p&gt;This time, I really wanted to get it in. Getting a diff was quite easy
as I already did most of the work back in June. I improved it a bit
and sent it back to ports@. While waiting for some feedback I updated
some other ports I'm familiar with.&lt;/p&gt;
&lt;h3&gt;Wednesday&lt;/h3&gt;
&lt;p&gt;A few weeks ago, I noticed in the commit message that czarkoff@ added
a py3 flavor to a port which the name isn't py-foobar but just
foobar, this doesn't work as the port system creates py3-foobar in
the py3 flavor. He pointed out that puppetboard was in the same case
and fixed the port but nothing changed regarding puppetboard. I raised
the issue to jasper@ and sebastia@ (previous and current
maintainers). Finally I sent two diffs to sebastia@ one to move to
py2, the other to move to py3 but in either case dropping the useless
flavor.&lt;/p&gt;
&lt;p&gt;As sebastia@ didn't mind, he followed my preference and tried the py3
diff, he noticed that the rcscript provided by the port needed to be
updated (not because of this change, it was overlooked when the py3
flavor was added: if you installed puppetboard through the port to
have the py3 flavor, it would have installed py3-gunicorn but the
rcscript called the binary provided by the py2 gunicorn).&lt;/p&gt;
&lt;p&gt;Finally my py-flask diff went in, partly because I traded a review from
rpointel@: he reviewed my flask diff and I reviewed his django diff :D&lt;/p&gt;
&lt;p&gt;As ajacoutot@ was working on syspatch, he wanted to make an &lt;a href="https://asciinema.org/a/4mp06buzc9wetwv5qwn7tt59w"&gt;asciinema
of a demo&lt;/a&gt;, so he
created a port and he asked me to review it. He's often giving me ok
and testing diff in bulk builds, so I was happy to help him back.&lt;/p&gt;
&lt;p&gt;I also reviewed a couple of updates sent by florian@ for ports related
to the &lt;a href="https://atlas.ripe.net"&gt;RIPE atlas&lt;/a&gt;, I'm always happy to help
src hackers in the ports tree because I think the less time they spend
in the ports tree, the more time they have to hack in src.&lt;/p&gt;
&lt;p&gt;A long time ago, I had a python3 project with these ports, so I wanted
to add a py3 flavor to all of them. I added py3 flavors to their
dependencies, they went in; but the diffs for py-ripe.atlas.* were never
committed for some reasons. I took another shot and now libraries
supports both python versions and the tools package uses python3
(because it's 2016).&lt;/p&gt;
&lt;p&gt;During the day some of us went to
&lt;a href="http://www.szechenyibath.hu/"&gt;the bath&lt;/a&gt; so for the evening we ordered
pizzas and watched some funny videos on youtube. While watching the
videos, I updated another of low hanging fruits.&lt;/p&gt;
&lt;h3&gt;Thursday&lt;/h3&gt;
&lt;p&gt;To find the low hanging fruits that need some love, I extensively use
&lt;a href="http://portroach.openbsd.org"&gt;portroach&lt;/a&gt;. Some maintainers' name were
noted with non-ascii characters, I noticed that because portroach
didn't like it. I talked about it with other hackers and eventually
removed non-ascii characters.&lt;/p&gt;
&lt;p&gt;After that, I found another reason to bother landry@. We have a port
geo/openbsd-developers where developers can put their locations. With
the data, landry@ created
&lt;a href="https://rhaalovely.net/openbsd-developers.html"&gt;a map&lt;/a&gt; which is cool
but sometimes it doesn't get updated and the technology behind are
quite old. A few months ago he created
&lt;a href="https://umap.openstreetmap.fr/en/map/openbsd-developers-map_89555#2/40.6/-3.2"&gt;a new map&lt;/a&gt;
that uses more a up to date OSM frontend. I told him that the map were
using old data from the port so he fixed that and he also added the
link on &lt;a href="https://rhaalovely.net/"&gt;its webpage&lt;/a&gt; so I can find the map
easily. Thanks Landry!&lt;/p&gt;
&lt;p&gt;Then I updated another python port. This port was doing something
weird regarding the dependencies it needs. I patched the setup.py file
but... naddy@ told me that it broke during the bulk.&lt;/p&gt;
&lt;p&gt;It was a very good thing that different people were always running bulk
builds along the whole week so whenever you broke something, you
quickly knew it. Landry really appreciated! :D&lt;/p&gt;
&lt;h3&gt;Friday&lt;/h3&gt;
&lt;p&gt;I had my plane on the afternoon, so the day was short. I was slacking
a bit on twitter when I saw a tweet about a newer version of py-pip. I
already updated a couple of times in the past. So I looked at it and
quickly cooked a diff which was, shortly after ok'ed by shadchin@ \o/&lt;/p&gt;
&lt;p&gt;I asked ajacoutot to put a diff for cython in a bulk, so I was often
looking for any possible breakage.&lt;/p&gt;
&lt;h3&gt;Saturday&lt;/h3&gt;
&lt;p&gt;Back in France, the bulk finally finished without problem and I could
commit my cython update.&lt;/p&gt;
&lt;h2&gt;Sum up&lt;/h2&gt;
&lt;p&gt;I had a really good time, I talked quite a lot with all the different
people. Thanks to all people who made it possible!&lt;/p&gt;</content><category term="OpenBSD"></category><category term="hackathon"></category><category term="dev"></category><category term="python"></category></entry><entry><title>How to update an OpenBSD port</title><link href="https://oldblog.chown.me/blog/how-to-update-an-openbsd-port.html" rel="alternate"></link><published>2016-08-26T10:20:00-04:00</published><updated>2016-08-26T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2016-08-26:/blog/how-to-update-an-openbsd-port.html</id><summary type="html">&lt;p&gt;Here's the guide I follow to update/verify an OpenBSD port&lt;/p&gt;</summary><content type="html">&lt;p&gt;Here's a quick summary of what I do to update a port. This
will be enough for simple updates. For more complicated ones, you may have to find your own way. This guide is only directed toward
non-library ports, except for python ports. I've
never updated a perl or ruby port, so some details may not apply. (I
simply don't know).&lt;/p&gt;
&lt;h2&gt;Collect some tools&lt;/h2&gt;
&lt;p&gt;I created a bunch of tools to help me with ports work. They are published on
&lt;a href="https://github.com/danieljakots/obsd-ports-tools/"&gt;github&lt;/a&gt;. You can
remove or update the portscp script if it suits your need.&lt;/p&gt;
&lt;p&gt;Put two things in /etc/mk.conf :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;SUDO=/usr/bin/doas
PATCH_DEBUG=Yes
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The first one allows you do do all the work with your user, becoming root as needed. Such easy, much secure, wow.&lt;/p&gt;
&lt;h2&gt;Keep your ports tree clean&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd /usr/ports &amp;amp;&amp;amp; mkdir mystuff
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then you'll have to create the category directory of the port you
want to update. If you want to update devel/foo ports :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd /usr/ports/mystuff &amp;amp;&amp;amp; mkdir devel &amp;amp;&amp;amp; cd devel
# copy the ports directory
cp -R /usr/ports/devel/foo .
cd foo
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now you have a directory you can safely trash. &lt;/p&gt;
&lt;h2&gt;Find out what you're going to need&lt;/h2&gt;
&lt;p&gt;Take a look at the Changelog from upstream and see what sort of developments there have been. You should check, also, whether the port needs new dependencies that
you may have to port first. For python ports, I usually read setup.py
and look for "req," and then I follow the white rabbit to see where it
leads.&lt;/p&gt;
&lt;h2&gt;Update the port&lt;/h2&gt;
&lt;p&gt;First, bump the version in Makefile to the one you to which you're updating. Then, run make makesum. It will fetch the distfiles (upstream
code) and update distinfo (size and checksum of the distfiles).&lt;/p&gt;
&lt;p&gt;If there's a REVISION, remove it (or them, in case of subpackages), but
don't touch EPOCH.&lt;/p&gt;
&lt;p&gt;Check whether the patch needed to be regenerated. (That's why PATCH_DEBUG is
needed):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;make patch
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and look for "offset". If there is some, you have to run &lt;code&gt;make
update-patches&lt;/code&gt; (and possibly edit the file getting patched). You
can run &lt;code&gt;portsdiff&lt;/code&gt; to verify that there were no substitutions made that you will have to undo by hand.&lt;/p&gt;
&lt;h2&gt;Simulate the port installation&lt;/h2&gt;
&lt;p&gt;Just run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;make fake
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;If it doesn't succeed, you'll have to debug this. I have no special advice
for that.&lt;/p&gt;
&lt;h2&gt;Update the plist if needed&lt;/h2&gt;
&lt;p&gt;For non-python ports:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;make update-plist
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;For a python2-only port:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;make REVISION=999 plist
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;For a python ports with a py3 flavor:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;portspy3plist
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;It sets everything how it needs to be thanks to a regex (so be
careful ;)).&lt;/p&gt;
&lt;p&gt;Use portsdiff again to check for anything unusual. &lt;code&gt;make plist&lt;/code&gt; is not
perfect; you'll probably have to correct it by hand.&lt;/p&gt;
&lt;h2&gt;Check WANTLIB is ok&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;portsldc
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;If there's something missing, one possible solution is to comment everything
then run &lt;code&gt;portsldc&lt;/code&gt; again and copy the WANTLIB += lines.&lt;/p&gt;
&lt;h2&gt;SHARED_LIBS ?&lt;/h2&gt;
&lt;p&gt;Just follow the
&lt;a href="https://openbsd.org/faq/ports/specialtopics.html#SharedLibs"&gt;FAQ&lt;/a&gt;, it's
very clear and easy.&lt;/p&gt;
&lt;p&gt;What I usually do is just &lt;code&gt;make fake&lt;/code&gt; in both /usr/ports/foo/bar
and /usr/ports/mystuff/foo/bar, and then &lt;code&gt;cd
/usr/ports/pobj/whatever-before-update/fake-amd64/usr/local/lib&lt;/code&gt; run
the nm command from the FAQ, redirecting the output into
/tmp/before and doing the same &lt;code&gt;cd
/usr/ports/pobj/whatever-after-update/fake-amd64/usr/local/lib&lt;/code&gt; then
run nm again, redirecting the output into /tmp/after and finally
&lt;code&gt;diff -up /tmp/before /tmp/after&lt;/code&gt; should show you whether functions
were added or removed.&lt;/p&gt;
&lt;h2&gt;Test it&lt;/h2&gt;
&lt;p&gt;If the port comes with a test suite, the best thing you can do is to
run it on the port before and after the update to see the changes. A
failing test doesn't mean the software won't work, and a working test
doesn't mean the software will work either, but these results can be interesting.&lt;/p&gt;
&lt;p&gt;Also, the goal of a port is that the software be usable, so
you can either test it yourself, or you can ask on ports@ for users of this
software to test it for you.&lt;/p&gt;
&lt;p&gt;If the port is used by other ports, you'd better verify that your
update doesn't break anything. How can you tell which ports depend on the
one you're updating? I created a small python script that uses sqlports
to find them. It's called "showvictims.py" for obvious reasons and
you can find it on the github repository I linked at the beginning of
this article.&lt;/p&gt;
&lt;h2&gt;Comparing Makefiles&lt;/h2&gt;
&lt;p&gt;grep is my friend. I mean if I see something in particular, I won't try
to be clever. I just search to see whether a similar case exists in the
ports tree (hint: it surely did) and just do the same thing. Feel free
to do the same.&lt;/p&gt;
&lt;h2&gt;Everything looks good&lt;/h2&gt;
&lt;p&gt;When you're satisfied with the status of the port, just send the
update to ports@ (if there is a maintainer, you must at least Cc them
). Wait for a committer to pick it up. If there has been no progress after a week, send a ping to the mailing list.&lt;/p&gt;
&lt;h2&gt;Why this guide and not the OpenBSD FAQ?&lt;/h2&gt;
&lt;p&gt;Because they're my personal notes. You can send a diff to ports@ if
you want to.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="ports"></category></entry><entry><title>Hackathon report - p2k16</title><link href="https://oldblog.chown.me/blog/p2k16.html" rel="alternate"></link><published>2016-08-11T10:20:00-04:00</published><updated>2016-08-11T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2016-08-11:/blog/p2k16.html</id><summary type="html">&lt;p&gt;A few months ago I was at an OpenBSD hackathon, here's my ((very) late) report for it.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Getting an account&lt;/h2&gt;
&lt;p&gt;Since end of March I have had an OpenBSD account which means that I can do
some commits on my own, the login I use is &lt;em&gt;danj&lt;/em&gt;. I was then invited
to &lt;a href="https://www.openbsd.org/images/hackathons/p2k16.gif"&gt;p2k16&lt;/a&gt; which
took place in Nantes, about 100kms from where I live (Rennes).&lt;/p&gt;
&lt;h2&gt;Planning&lt;/h2&gt;
&lt;p&gt;I read most of hackathons report (if not all) on undeadly, and people
often says that they had plans. So I thought I was going to do the
same. Finally I did only a few things that I planned and other things
I didn't plan at all :)&lt;/p&gt;
&lt;h2&gt;Meeting people&lt;/h2&gt;
&lt;p&gt;Since 2013 I've been talking with jca@ (mainly about OpenBSD but not only),
though I never had the chance to meet him. Finally at p2k16 I could
finally meet him.&lt;/p&gt;
&lt;p&gt;I've also been talking on irc with landry@ for quite a long time, I
was eager to meet him as I really appreciate him because we laugh
together.&lt;/p&gt;
&lt;p&gt;I could also see again mpi@, who I didn't saw since my
&lt;a href="./some-news-from-my-internship.html"&gt;internship&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;During the hackathon I could also talk with people that I had never
talked to, before like espie@ or eric@. It was both funny and
interesting as I learnt a couple of things while I was chatting with
them.&lt;/p&gt;
&lt;h2&gt;Even teaching people&lt;/h2&gt;
&lt;p&gt;I was still heavily learning at lot of things, whatever I was doing,
though I was looking forward to share my (little) knowledge. I could
show some tricks to tsg@ who was porting some python ports and at the
same time working on
&lt;a href="http://man.openbsd.org/OpenBSD-current/man1/portgen.1"&gt;portgen&lt;/a&gt; to
teach it to handle python ports. I was really happy/proud to be able to
help him.&lt;/p&gt;
&lt;p&gt;I even could teach eric@ how to use cvs again :D. He didn't touch cvs
for a while and in the mean time, new tools were created to help us like
&lt;a href="http://man.openbsd.org/OpenBSD-current/man1/portimport.1"&gt;portimport&lt;/a&gt;
and he didn't know its existence so I showed him thus he could use it
rather than importing his port (that I reviewed as it was a python
port :3) manually.&lt;/p&gt;
&lt;h2&gt;The work&lt;/h2&gt;
&lt;p&gt;I begun the week with committing an update to legit and its chains of
*_DEPS, it was quite a pain so I was happy to be over. After that, I
updated a bunch of little ports. I reviewed a few ports for
shadchin@. Python ports are usually easy (IMO) but the problem is
that there are always tons of *_DEPS which quickly sums up.&lt;/p&gt;
&lt;p&gt;I left a bit the python ports to update osm2pgsql. They switched their
build system from autotools to cmake. Some people don't like
autotools, other don't like cmake and many hate both but in my case I
don't know them well so it doesn't make a lot of difference. At first
I didn't succeed to make the test pass (but of course osm2pgsql was
tested to be working), but after being home I worked on it again, and
I was glad of my work.&lt;/p&gt;
&lt;p&gt;One of my plan was to port py-tox as it's used by nearly all python
software for the tests. jca@ told me to look into
&lt;a href="https://github.com/jasperla/openbsd-wip"&gt;openbsd-wip&lt;/a&gt; and indeed it
was already done by shadchin@, I bring it to ports@ and ok'ed it so he
imported it.&lt;/p&gt;
&lt;p&gt;Finally, I begin to work on poezio, a python3 xmpp client. I needed
some directions as some of its *_DEPS were python3-only and currently
the port infrastructure for python ports is mainly axed towards
python2, and sthen@ kindly helped me.&lt;/p&gt;
&lt;h2&gt;The end&lt;/h2&gt;
&lt;p&gt;Of course, I was sad when it ended, seeing people leaving
gradually. I was really happy of the whole week, meeting people I was
quite fond of. The meals were goods, with lots of
&lt;a href="https://fr.wikipedia.org/wiki/Galette_de_sarrasin"&gt;galettes&lt;/a&gt; and
&lt;a href="https://en.wikipedia.org/wiki/Cr%C3%AApe"&gt;crepes&lt;/a&gt; (even though we
were not in Brittany). Thanks to all who made it possible! Would
definitely do again.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="dev"></category><category term="hackathon"></category><category term="python"></category></entry><entry><title>Stop losing interesting links</title><link href="https://oldblog.chown.me/blog/stop-losing-interesting-links.html" rel="alternate"></link><published>2016-07-16T10:20:00-04:00</published><updated>2016-07-16T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2016-07-16:/blog/stop-losing-interesting-links.html</id><summary type="html">&lt;p&gt;I set up a shaarli instace&lt;/p&gt;</summary><content type="html">&lt;h2&gt;EBADMEM&lt;/h2&gt;
&lt;p&gt;When I was younger, I had a very good memory. When I read something
interesting, I would remember what was I reading and where was I reading
it (some blog, some newspaper etc). But as time passes, I have more
and more difficulties to remember where I read things (and it makes me
sad :().&lt;/p&gt;
&lt;h2&gt;Twitter and fav/likes&lt;/h2&gt;
&lt;p&gt;I spend a lot of time on twitter (at least too much for a closed
platforms). I find a lot of good reads there and as I don't always have time
to read them at the moment, I just like the tweet and when I have time, I go to my
liked tweets and depending on my mood I read such and such articles.&lt;/p&gt;
&lt;p&gt;And once I read it, I usually unlike the tweet so I don't have
thousands likes that I've already read. But I'd better remember where I
read it because I won't really be able to find it again (at least at
will) and that sucks.&lt;/p&gt;
&lt;h2&gt;Shaarli&lt;/h2&gt;
&lt;p&gt;Here comes
&lt;a href="http://sebsauvage.net/wiki/doku.php?id=php:shaarli"&gt;shaarli&lt;/a&gt;. I won't
describe everything it does (you can read the page) but basically you
put a link, give a title and a description and done (and you can tag them).&lt;/p&gt;
&lt;p&gt;So now whenever I read interesting things, I put them there and if I
need to read it again, I know where to find it.&lt;/p&gt;
&lt;p&gt;Of course, the goal is to share my valuable reading so
&lt;a href="https://ln.chown.me"&gt;you can access it&lt;/a&gt;. Right now there are not many
links but I'll keep adding then gradually.&lt;/p&gt;</content><category term="shaarli"></category></entry><entry><title>Le refactoring</title><link href="https://oldblog.chown.me/blog/le-refactoring.html" rel="alternate"></link><published>2016-01-06T10:20:00-05:00</published><updated>2016-01-06T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2016-01-06:/blog/le-refactoring.html</id><summary type="html">&lt;p&gt;Qu'est ce que le refactoring ?&lt;/p&gt;</summary><content type="html">&lt;p&gt;Mon amoureuse m'a demandé ce week-end ce qu'était le refactoring. Je
lui ai donné une réponse mais elle n'était que partielle. La vraie
réponse est :&lt;/p&gt;
&lt;p&gt;Tu commences un projet. Tu es jeune insouciant, tu découvres un peu ce
que tu fais - c'est ta première fois. Tu tentes des trucs, jusqu'à ce
qu'ils finissent par marcher. Et ça continue. Et ça continue jusqu'à
ce que tu aies un tel tas de boue que tu te dis "&lt;strong&gt;stop&lt;/strong&gt;".&lt;/p&gt;
&lt;p&gt;Là, c'est le début de la fin ou la fin du début. Tu commences par y
aller tout doucement. Puis tu te dis "fuck, je refactorise ou quoi
?". Et là tu commences à changer tout, pour que ça prenne forme comme
tu l'avais imaginé avant de commencer à refactorer. Tu arrives à un
point que tu as des trucs partout, tu ne sais plus qui va avec quoi
mais osef, tu te dis que c'est bientôt fini.&lt;/p&gt;
&lt;p&gt;Puis tu commences par attraper le bout. Tu commences par y voir de
plus en plus clair. Un peu comme si tu jouais avec une pelotte de
laine dont le gros était démêlé et que tu voyais la fin.&lt;/p&gt;
&lt;p&gt;Enfin tu te dis que tu as fini. Tu t'apprêtes à relancer pour voir ce
que tu as oublié. Tu as un peu peur d'avoir foiré un truc même si au
fond de toi tu te dis que ça devrait être bon.&lt;/p&gt;
&lt;p&gt;Tu le lances, et &lt;strong&gt;paf&lt;/strong&gt;, du premier coup c'est passé : &lt;em&gt;le bonheur&lt;/em&gt;.&lt;/p&gt;</content><category term="dev"></category><category term="Ansible"></category></entry><entry><title>Sortie de Let's Encrypt</title><link href="https://oldblog.chown.me/blog/sortie-de-lets-encrypt.html" rel="alternate"></link><published>2015-12-05T10:20:00-05:00</published><updated>2015-12-05T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2015-12-05:/blog/sortie-de-lets-encrypt.html</id><summary type="html">&lt;p&gt;Enfin, Let's Encrypt est dispo. Bien que toujours en beta, elle est néanmoins ouverte à tous.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;\o/&lt;/h2&gt;
&lt;p&gt;Enfin. On l'attendait depuis longtemps. À chaque message publié sur leur
blog, je lisais vite pour voir s'illes parlent d'une date de sortie. Il
y avait d'abord eu une beta fermée (avec inscription sur un google docs),
puis avant-hier, jeudi 3 décembre la beta a été ouverte à
tou⋅te⋅s. Enfin.&lt;/p&gt;
&lt;h2&gt;Les révélations de Snowden&lt;/h2&gt;
&lt;p&gt;Snowden a révélé l'espionnage massif des télécommunications. On entend
parfois certaines personnes dire "moui, ça n'a rien changé". Et
pourtant il y a eu plein de changements. Certains ne sont pas du tout
visible, tels que le chiffrement des connexions entre les datacenters
de Google (vous vous souvenez peut-être du "&lt;em&gt;SSL added and removed
here&lt;/em&gt;"). Il y en a aussi moins visibles (enfin surtout "vues") pour le
profane, comme le travail qui est en train d'être fait pour chiffrer
les requêtes DNS (non je ne parle pas de dnscrypt). Enfin il y a
&lt;em&gt;let's encrypt&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Le nombre de fois que j'ai dû accepter des certificats parce que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CAcert&lt;/li&gt;
&lt;li&gt;la personne fait sa propre PKI&lt;/li&gt;
&lt;li&gt;auto-signé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y avait déjà des méthodes pour avoir des certificats pas cher voire
gratuit mais elles n'étaient pas forcément utilisable par tout le
monde.&lt;/p&gt;
&lt;p&gt;J'espère vraiment que ces conneries vont rapidement être terminées.&lt;/p&gt;
&lt;h2&gt;Puis Let's encrypt est arrivé&lt;/h2&gt;
&lt;p&gt;Maintenant Let's Encrypt est là et avec un nouveau protocole, ACME. Il y a une
page sur le site qui explique plutôt bien
&lt;a href="https://letsencrypt.org/howitworks/technology/"&gt;comment ça marche&lt;/a&gt;. Ce
protocole permet de simplifier grandement le fait de se faire signer
son certificat par une autorité de certification.&lt;/p&gt;
&lt;h3&gt;La durée de validité des certificats Let's Encrypt&lt;/h3&gt;
&lt;p&gt;La durée des certificats délivrés par Let's encrypt est de 90
jours. Pour certaines personnes, cela est trop court. Néanmoins je
trouve ça plutôt positif.&lt;/p&gt;
&lt;p&gt;Parfois il arrive qu'on ne veuille plus qu'un certificat puisse
fonctionner (car on a perdu le contrôle de la clé privée par exemple).&lt;/p&gt;
&lt;p&gt;Il y a alors deux moyens que le certificat ne soit plus valide. La
première est de le révoquer. Mais comme l'explique
&lt;a href="https://twitter.com/agl__"&gt;Adam Langley&lt;/a&gt;,
&lt;a href="https://www.imperialviolet.org/2011/03/18/revocation.html"&gt;cela&lt;/a&gt;
&lt;a href="https://www.imperialviolet.org/2011/04/29/filters.html"&gt;ne&lt;/a&gt;
&lt;a href="https://www.imperialviolet.org/2012/02/05/crlsets.html"&gt;marche&lt;/a&gt;
&lt;a href="https://www.imperialviolet.org/2014/04/19/revchecking.html"&gt;pas&lt;/a&gt;
(et encore
&lt;a href="https://www.imperialviolet.org/2014/04/29/revocationagain.html"&gt;un autre article pour la route&lt;/a&gt;).
Pour la petite anecdote, j'ai révoqué une clé gpg il y a 6+ mois, y a
deux semaines j'ai encore reçu un mail chiffré avec...&lt;/p&gt;
&lt;p&gt;L'autre moyen, c'est tout simplement que le certificat arrive à
expiration et donc un temps de validité restreint permet de réduire la
durée du problème, s'il se passe quelque chose.&lt;/p&gt;
&lt;h2&gt;Les clients&lt;/h2&gt;
&lt;p&gt;Ils ont donc créé une autorité de certification et afin de distribuer
les certificats, illes ont créé le protocole ACME, il a fallu donc un
client pour utiliser ce nouveau protocole. Illes ont donc développé un
&lt;a href="https://github.com/letsencrypt/letsencrypt"&gt;client&lt;/a&gt; qui a l'air
d'être assez complexe (#alerteeuphémisme).&lt;/p&gt;
&lt;p&gt;J'ai préféré utiliser un
&lt;a href="https://github.com/diafygi/acme-tiny/"&gt;petit client&lt;/a&gt; (200 lignes de
python2.7). Il suffit de suivre le README tout simple et ça marche
plutôt bien.&lt;/p&gt;
&lt;p&gt;J'ai écrit un petit script (en gros copié/collé des commandes du
readme :o).&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/bin:/usr/bin:/usr/local/bin&amp;#39;&lt;/span&gt;

&lt;span class="c1"&gt;# needs https://github.com/diafygi/acme-tiny/&lt;/span&gt;

&lt;span class="c1"&gt;# if it&amp;#39;s the first time&lt;/span&gt;
&lt;span class="c1"&gt;# openssl genrsa 4096 &amp;gt; master.key&lt;/span&gt;
&lt;span class="c1"&gt;# ftp -o - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem \&lt;/span&gt;
&lt;span class="c1"&gt;#       &amp;gt; intermediate.pem&lt;/span&gt;

&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/danj/LE
&lt;span class="nv"&gt;ACME_TINY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/danj/acme-tiny/acme_tiny.py

&lt;span class="nv"&gt;_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;date &lt;span class="s2"&gt;&amp;quot;+%Y-%m-%d&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -z &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; -z &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;usage: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="p"&gt;##*/&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; FQDN new&amp;quot;&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;       &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="p"&gt;##*/&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; FQDN update&amp;quot;&lt;/span&gt;
        &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_mode&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; new &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;new domain&amp;quot;&lt;/span&gt;

        &lt;span class="c1"&gt;# generate a domain private key (if you haven&amp;#39;t already)&lt;/span&gt;
        openssl genrsa &lt;span class="m"&gt;4096&lt;/span&gt; &amp;gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/key/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.key&amp;quot;&lt;/span&gt;

        &lt;span class="c1"&gt;# for a single domain&lt;/span&gt;
        openssl req -new -sha256 &lt;span class="se"&gt;\&lt;/span&gt;
                -key &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/key/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.key&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                -subj &lt;span class="s2"&gt;&amp;quot;/CN=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &amp;gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/csr/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.csr&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_mode&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; update &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;update&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;which mode?&amp;quot;&lt;/span&gt;
        &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c1"&gt;# make some challenge folder (modify to suit your needs)&lt;/span&gt;
mkdir -p &lt;span class="s2"&gt;&amp;quot;/var/www/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.well-known/acme-challenge/&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;# run the script on your server&lt;/span&gt;
python2.7 &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACME_TINY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        --account-key &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/key/master.key&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        --csr &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/csr/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.csr&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        --acme-dir &lt;span class="s2"&gt;&amp;quot;/var/www/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.well-known/acme-challenge/&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &amp;gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/cert/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_date&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.crt&amp;quot;&lt;/span&gt;

&lt;span class="o"&gt;[[&lt;/span&gt; -d &lt;span class="s2"&gt;&amp;quot;/var/www/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.well-known&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm -rf &lt;span class="s2"&gt;&amp;quot;/var/www/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.well-known&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_mode&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; update &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        cp &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/pem/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pem&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/pem/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pem.old&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

cat &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/cert/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_date&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.crt&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/pem/intermediate.pem&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/key/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.key&amp;quot;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &amp;gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LEdir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/pem/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_FQDN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;_date&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pem&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;L'exécution du script se fait tout simplement (il suffit comme vous
pouvez le lire de lui donner le domaine).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ ksh script.sh chown.me new
new domain
Generating RSA private key, &lt;span class="m"&gt;4096&lt;/span&gt; bit long modulus
.............++
..................................................++
e is &lt;span class="m"&gt;65537&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;0x10001&lt;span class="o"&gt;)&lt;/span&gt;
Parsing account key...
Parsing CSR...
Registering account...
Already registered!
Verifying chown.me...
chown.me verified!
Signing certificate...
Certificate signed!
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On rajoute ensuite ce qu'il faut dans le soft qui va gérer la
connexion TLS (dans mon cas haproxy) et &lt;a href="https://test.chown.me"&gt;ça marche&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il ne reste plus qu'à faire en sorte de renouveler le certificat tous
les deux mois, comme il est valide trois mois et qu'on veut se donner
de la marge.&lt;/p&gt;
&lt;p&gt;Gros bisous et prenez soin de vous.&lt;/p&gt;</content><category term="xmpp"></category><category term="mail"></category><category term="tls"></category></entry><entry><title>Passage du blog en https-only</title><link href="https://oldblog.chown.me/blog/passage-du-blog-en-https-only.html" rel="alternate"></link><published>2015-05-15T10:21:00-04:00</published><updated>2015-05-15T10:21:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2015-05-15:/blog/passage-du-blog-en-https-only.html</id><summary type="html">&lt;p&gt;Les configs que j'ai faites pour passer mon blog en https-only.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;Cet article est la suite du &lt;a href="./migration-du-blog.html"&gt;précédent&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Création du certificat&lt;/h2&gt;
&lt;h3&gt;fichier de conf&lt;/h3&gt;
&lt;p&gt;J'ai crée un fichier de conf .cnf principalement basé sur &lt;a href="https://www.eff.org/deeplinks/2015/04/effs-updated-ssl-configuration"&gt;les conseils
de l'EFF&lt;/a&gt;
mais aussi en prenant des trucs chez
&lt;a href="https://www.jeveuxhttps.fr/Obtenir_un_certificat_SSL_chez_Gandi"&gt;jeveuxhttps.fr&lt;/a&gt;
:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[req]&lt;/span&gt;
&lt;span class="na"&gt;distinguished_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;req_distinguished_name&lt;/span&gt;
&lt;span class="na"&gt;req_extensions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;v3_req&lt;/span&gt;
&lt;span class="na"&gt;default_md&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;sha256&lt;/span&gt;
&lt;span class="na"&gt;default_bits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;4096&lt;/span&gt;

&lt;span class="k"&gt;[req_distinguished_name]&lt;/span&gt;
&lt;span class="na"&gt;countryName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;FR&lt;/span&gt;
&lt;span class="na"&gt;countryName_default&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;FR&lt;/span&gt;
&lt;span class="na"&gt;stateOrProvinceName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;France&lt;/span&gt;
&lt;span class="na"&gt;stateOrProvinceName_default&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;France&lt;/span&gt;
&lt;span class="na"&gt;localityName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;France&lt;/span&gt;
&lt;span class="na"&gt;localityName_default&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;France&lt;/span&gt;
&lt;span class="na"&gt;organizationalUnitName&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;Vigdis&lt;/span&gt;
&lt;span class="na"&gt;organizationalUnitName_default&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;Vigdis&lt;/span&gt;
&lt;span class="na"&gt;commonName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;chown.me&lt;/span&gt;
&lt;span class="na"&gt;commonName_default&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;chown.me&lt;/span&gt;
&lt;span class="na"&gt;commonName_max&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;64&lt;/span&gt;

&lt;span class="k"&gt;[ v3_req ]&lt;/span&gt;
&lt;span class="na"&gt;basicConstraints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;CA:FALSE&lt;/span&gt;
&lt;span class="na"&gt;keyUsage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;digitalSignature, keyEncipherment&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Toutes les options sont données comme ça lors qu'on génère le cert on
a plus qu'à appuyer sur &lt;em&gt;entrée&lt;/em&gt; de manière répétitive (un peu comme
quand on installe/upgrade une OpenBSD :p)&lt;/p&gt;
&lt;h3&gt;création de la clé&lt;/h3&gt;
&lt;p&gt;Il ne reste plus à créer une clé puis générer une demande de signature
de certificat (le .csr) qu'on peut vérifier avant de la donner à gandi.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;openssl genrsa -out chown.key 4096
openssl req -new -out chown.csr -key chown.key -config chown.cnf
openssl req -in chown.csr -noout -text |less
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Obtention du certificat chez gandi&lt;/h3&gt;
&lt;p&gt;C'est vraiment simple à suivre, et sinon c'est bien expliqué sur la
page de jeveuxhttps.&lt;/p&gt;
&lt;h2&gt;modification de httpd.conf&lt;/h2&gt;
&lt;p&gt;Comme je n'ai plus qu'un domaine, j'ai transformé les domaines en
"location" : coincoin.chown.me devient donc chown.me/coincoin :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;    location &amp;quot;/blog*&amp;quot; {
            root &amp;quot;/blog&amp;quot;
            root strip 1
    }

    location &amp;quot;/iota*&amp;quot; {
            root &amp;quot;/iota&amp;quot;
            root strip 1
            directory auto index
    }

    location &amp;quot;/obsd*&amp;quot; {
            root &amp;quot;/obsd/www&amp;quot;
            root strip 1
    }
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;etc.&lt;/p&gt;
&lt;p&gt;Merci à quinq pour son aide sur ce point j'ai du mal à cause d'une
erreur de jugement :p&lt;/p&gt;
&lt;h2&gt;Un petit coup de neuf sur haproxy&lt;/h2&gt;
&lt;p&gt;J'ai lu
&lt;a href="https://certsimple.com/blog/chrome-outdated-cryptography"&gt;Why your A grade SSL is 'outdated cryptography' on Chrome&lt;/a&gt;
qui dit du bien du
&lt;a href="https://mozilla.github.io/server-side-tls/ssl-config-generator/"&gt;générateur de config de mozilla&lt;/a&gt;. J'ai
donc modifié légèrement ma conf de haproxy pour prendre celle de
&lt;a href="https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy-2.2.15&amp;amp;openssl=1.0.1e&amp;amp;hsts=yes&amp;amp;profile=modern"&gt;&lt;em&gt;modern&lt;/em&gt;&lt;/a&gt;. C'est
cool, ça désactive le tls 1.0 :) (et j'ai un A+ sur ssllabs mais pas
la peine d'essayer, je ratelimit mes connexions http donc l'ip de
ssllabs va se faire bannir et le test ne pourra pas finir).&lt;/p&gt;</content><category term="blog"></category><category term="tls"></category><category term="https"></category></entry><entry><title>Migration du blog</title><link href="https://oldblog.chown.me/blog/migration-du-blog.html" rel="alternate"></link><published>2015-05-15T10:20:00-04:00</published><updated>2015-05-15T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2015-05-15:/blog/migration-du-blog.html</id><summary type="html">&lt;p&gt;Mon blog ne sera plus joignable à l'adresse blog.chown.me.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;https&lt;/h2&gt;
&lt;p&gt;Cela fait un moment que je rêve de passer mes sites au full https
(le contenu est servi uniquement avec l'utilisation de TLS),
malheureusement pour des mauvaises raisons je ne m'en suis jamais
occupé.&lt;/p&gt;
&lt;p&gt;Le projet de loi renseignement m'a motivé à le faire pour de bon.&lt;/p&gt;
&lt;h3&gt;Certificats reconnus ou non&lt;/h3&gt;
&lt;p&gt;Mes sites/services ont toujours été accessibles via https mais les certificats
étaient signés par
&lt;a href="./pika-pika-pki.html"&gt;ma propre autorité de certification (AC)&lt;/a&gt; donc
comme je me fais confiance, je l'ajoutais sur mes pc donc je n'ai pas
de messages d'alertes. Bien évidemment, les gens n'ajoutaient pas mon AC
donc s'ils tentaient d'utiliser du TLS, illes allaient avoir un message
d'erreur.&lt;/p&gt;
&lt;p&gt;Certaines personnes redirigent automatiquement leurs sites vers https avec un
certificat signé par une AC non reconnue par mon navigateur
(auto-signé ou CACert) et je sais que ça me gonfle d'avoir à valider
manuellement, donc je n'ai jamais imposé ce genre de chose à mes
lecteurs.&lt;/p&gt;
&lt;p&gt;La solution est donc d'avoir un certificat signé par une AC reconnue
par la majorité des navigateurs.&lt;/p&gt;
&lt;h3&gt;Gandi&lt;/h3&gt;
&lt;p&gt;Gandi propose gratuitement pour les domaines qu'on a chez eux de
signer un certificat pour le domaine qu'on a, et l'AC est reconnue.&lt;/p&gt;
&lt;h3&gt;Un seul domaine&lt;/h3&gt;
&lt;p&gt;Le problème c'est que l'AC signe un seul domaine. Bien sûr c'est
possible d'avoir plusieurs domaines ou un wildcard, mais ce n'est plus
gratuit.&lt;/p&gt;
&lt;p&gt;Jusqu'à maintenant j'utilisais un sous-domaine pour chaque site. Dont
un pour ce blog. Comme je ne peux faire signer qu'un domaine, j'ai
migré chaque domaine : coincoin.chown.me devient chown.me/coincoin.&lt;/p&gt;
&lt;p&gt;L'adresse du blog devient donc
&lt;a href="https://chown.me/blog"&gt;https://chown.me/blog&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;un article pour ça ???&lt;/h2&gt;
&lt;p&gt;En fait, j'ai pas mal de personnes qui se sont abonné⋅e⋅s au feed atom
et donc cet article sert à les (vous) prévenir de migrer.&lt;/p&gt;
&lt;p&gt;Pour vous donner envie de changer le lien dans votre lecteur de flux,
j'ai déjà écrit un autre article qui n'est disponible qu'à la nouvelle
adresse :)&lt;/p&gt;
&lt;p&gt;Pour l'instant cette version du blog reste là, mais je vais la
supprimer sous peu.&lt;/p&gt;</content><category term="blog"></category><category term="tls"></category><category term="https"></category></entry><entry><title>Bring SNI to OpenBSD's httpd</title><link href="https://oldblog.chown.me/blog/bring-sni-to-openbsd-httpd.html" rel="alternate"></link><published>2015-04-25T10:20:00-04:00</published><updated>2015-04-25T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2015-04-25:/blog/bring-sni-to-openbsd-httpd.html</id><summary type="html">&lt;p&gt;httpd doesn't support (yet) SNI, so I'll show you how to use haproxy to bring SNI and more.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;What is this language?!&lt;/h2&gt;
&lt;p&gt;Yeah, I usually write my blog posts in French but this time as I
think the people who can be interested by this topic are more to be
English readers than French readers, it's in English.&lt;/p&gt;
&lt;h2&gt;What's the problem?&lt;/h2&gt;
&lt;p&gt;nginx for several reasons has been removed from base between 5.6 and
5.7, and like many people I prefer to use software present in base
rather than in ports/package. So the replacement is httpd. My problem,
mmmh I mean my first problem (:p) was that
&lt;a href="http://www.openbsd.org/papers/httpd-slides-asiabsdcon2015.pdf"&gt;httpd doesn't support SNI&lt;/a&gt;
and as I have two certificates for all my vhost, it couldn't work.&lt;/p&gt;
&lt;h2&gt;The solution&lt;/h2&gt;
&lt;p&gt;The solution I wanted was something which would terminate the TLS
connection then forward it to the httpd.&lt;/p&gt;
&lt;h3&gt;relayd !!!&lt;/h3&gt;
&lt;p&gt;As httpd code base comes for a big part from relayd, if httpd doesn't
support it yet, you can guess that relayd doesn't neither. As for httpd,
&lt;a href="https://www.mail-archive.com/misc@openbsd.org/msg130738.html"&gt;support is planned though&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;nginx in reverse proxy&lt;/h3&gt;
&lt;p&gt;If I don't want to use it anymore for the http daemon part, it's
mainly to not to have it on my system.&lt;/p&gt;
&lt;h3&gt;haproxy&lt;/h3&gt;
&lt;p&gt;I've heard many times that it was a cool piece of software so I wanted
to use it for a while but I never had any reason to use it.&lt;/p&gt;
&lt;p&gt;I read that haproxy works fine as a TLS termination proxy so this is
the one I chose.&lt;/p&gt;
&lt;h2&gt;Use haproxy&lt;/h2&gt;
&lt;h3&gt;Or try to&lt;/h3&gt;
&lt;p&gt;I installed haproxy on my system, tried to have a config parsable but
it didn't want the keyword ssl. After looking at the
net/haproxy/Makefile, I saw that haproxy wasn't compiled with
libressl.&lt;/p&gt;
&lt;h4&gt;Patch the port&lt;/h4&gt;
&lt;p&gt;jca@ gave me some advice to make a diff I could post to ports@
to add tls support. By the time gonzalo@ (who isn't marked as
maintainer but who has been updating haproxy for a while) sent
another diff that took in account my diff and updated haproxy to
1.5.11 the latest stable version.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://marc.info/?l=openbsd-ports-cvs&amp;amp;m=142953858009713&amp;amp;w=2"&gt;It has been commited in -current&lt;/a&gt;
though I backported the diff to 5.7 -stable and it works fine.&lt;/p&gt;
&lt;h3&gt;Write haproxy.cfg&lt;/h3&gt;
&lt;h4&gt;General part&lt;/h4&gt;
&lt;p&gt;There are a couple of general things fine for the two use-cases I'll
talk about. They're mainly from the haproxy.cfg that comes with the
port.&lt;/p&gt;
&lt;pre&gt;
global
        log 127.0.0.1   local0 debug
        maxconn 1024
        chroot /var/haproxy
        uid 604
        gid 604
        daemon
        pidfile /var/run/haproxy.pid
        tune.ssl.default-dh-param 2048
        ssl-default-bind-options no-sslv3 no-tls-tickets
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-server-options no-sslv3 no-tls-tickets
        ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

defaults
        log     global
        mode    http
        option  httplog
        log-format %ci:%cp\ %ft\ %b/%s\ %ST\ %hr\ %hs\ %{+Q}r
        option  dontlognull
        option  redispatch
        retries 3
        maxconn 2000

&lt;/pre&gt;

&lt;p&gt;I added some ssl-default options with some cipherlists I found
somewhere on the web. I tested it with ssllabs and got an &lt;em&gt;A&lt;/em&gt; (if I
ignore my self-signed cert otherwise it's a &lt;em&gt;T&lt;/em&gt; yeah). I have no doubt
that you can find something better :)&lt;/p&gt;
&lt;p&gt;I tweaked the log-format so it's not too verbose.&lt;/p&gt;
&lt;h4&gt;First use case (basic)&lt;/h4&gt;
&lt;p&gt;My first use case was I have httpd which will answer to http request
and haproxy which will terminate the TLS connection if needed. Before
that I have &lt;a href="./https-sslh-et-bypass-de-proxy.html"&gt;sslh&lt;/a&gt; which listens
to the 443 to enable me ssh my server on port 443 while running an
httpd server on that port too.&lt;/p&gt;
&lt;p&gt;Here's a schema:&lt;/p&gt;
&lt;pre&gt;

      80    +                        +------------+       +----------+
            |                     80 |            |  8080 |          |
   +---------------------------------&gt;            +-------&gt;  httpd   |
            |                        |  haproxy   |       |          |
            |  +--------------+      |            |       |          |
            |  |              | 8443 |            |       +----------+
   +-----------&gt;     sslh     +------&gt;            |                   
            |  |              |      |            |                   
      443   +  +-----+--------+      +------------+                   
                     |                                                
                  22 |                                                
                +----v-----+                                          
                |          |                                          
                |  sshd    |                                          
                |          |                                          
                |          |                                          
                +----------+                                          

&lt;/pre&gt;

&lt;p&gt;In addition to the &lt;em&gt;global&lt;/em&gt; and &lt;em&gt;default&lt;/em&gt; section, I had:&lt;/p&gt;
&lt;pre&gt;
frontend http
        bind *:80
        bind 2001:910:1322:1:dead:beef:cafe:1:80
        http-request redirect scheme https if { hdr(host) -i somesikritdomain.chown.me } !{ ssl_fc }
        default_backend httpd

frontend https
        bind *:8443 ssl crt /etc/ssl/pki/server-haproxy.pem crt /etc/ssl/pki/wild-haproxy.pem accept-proxy
        rspadd Strict-Transport-Security:\ max-age=31536000
        default_backend httpd

backend httpd
        option forwardfor
        option httpchk GET /check/index.html HTTP/1.0
        server www 127.0.0.1:8080 check
&lt;/pre&gt;

&lt;p&gt;Haproxy listens both on http port 80 and https port 8443 (because that's
the port I used with sslh, 443 is perfectly fine if there's nothing
between) and then it forwards the traffic to httpd.&lt;/p&gt;
&lt;p&gt;I also added some HSTS header for https. For a specific domain I
redirect automatically to https (because the page has an
authentication method and I don't want my password to be sent on
clear).&lt;/p&gt;
&lt;p&gt;To get the &lt;em&gt;server.pem&lt;/em&gt; it's just &lt;code&gt;cat server.crt server.key &amp;gt; server.pem&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Second use case&lt;/h4&gt;
&lt;p&gt;While I was setting up the first use case, someone pasted
&lt;a href="http://blog.manty.net/2014/12/haproxy-as-very-very-overloaded-sslh.html"&gt;a link&lt;/a&gt;
on irc from someone's blog saying that he used haproxy as a
replacement for sslh. So let's try to remove another package from the
server.&lt;/p&gt;
&lt;p&gt;What I wanted to achieve this time:&lt;/p&gt;
&lt;pre&gt;

   80  +           +------------+       +----------+
       |           |            |  8080 |          |
+------------------&gt;            +-------&gt;  httpd   |
       |           |  haproxy   |       |          |
       |           |            |       |          |
       |           |            |       +----------+
+------------------&gt;            |                   
       |           |            |                   
  443  +           +------+-----+                   
                          |                         
                       22 |                         
                   +------+------+                  
                   |             |                  
                   |    sshd     |                  
                   |             |                  
                   +-------------+    

&lt;/pre&gt;

&lt;p&gt;So in addition to the &lt;em&gt;global&lt;/em&gt; and &lt;em&gt;default&lt;/em&gt; section, I added:&lt;/p&gt;
&lt;pre&gt;
listen front
        bind *:443
        bind 2001:910:1322:1:dead:beef:cafe:1:443
        mode tcp
        option tcplog
        tcp-request inspect-delay 2s
        acl is_ssl req.ssl_ver gt 0
        tcp-request content accept if is_ssl
        use_backend loop_ssl if is_ssl
        server local 127.0.0.1:22

backend loop_ssl
        mode tcp
        server ssl 127.0.0.1:1443 send-proxy

frontend http
        bind *:80
        bind 2001:910:1322:1:dead:beef:cafe:1:80
        http-request redirect scheme https if { hdr(host) -i somesikritdomain.chown.me } !{ ssl_fc }
        default_backend httpd

frontend https
        bind 127.0.0.1:1443 ssl crt /etc/ssl/pki/server-haproxy.pem crt /etc/ssl/pki/wild-haproxy.pem accept-proxy
        rspadd Strict-Transport-Security:\ max-age=31536000
        default_backend httpd

backend httpd
        option forwardfor
        option httpchk GET /check/index.html HTTP/1.0
        server www 127.0.0.1:8080 check
&lt;/pre&gt;

&lt;p&gt;A listen section is equal to a duo backend/frontend. The listen
section here listens for connections and then checks if it's a TLS
one. If it is, it will send it to the backend &lt;em&gt;loop_ssl&lt;/em&gt;. If it's not a
TLS connection, then it assumes it's an SSH one and forward it to
&lt;em&gt;sshd&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;From the backend &lt;em&gt;loop_ssl&lt;/em&gt; we forward it to the frontend &lt;em&gt;https&lt;/em&gt; with
the
&lt;a href="http://blog.haproxy.com/haproxy/proxy-protocol/"&gt;"PROXY" protocol&lt;/a&gt;
(that's what the two keyworkds &lt;em&gt;send-proxy&lt;/em&gt; and &lt;em&gt;accept-proxy&lt;/em&gt; are
there for). The backend &lt;em&gt;loop_ssl&lt;/em&gt; is here because we can't go
directly from a listen to a frontend, it should first go to a backend,
seems logical, doesn't it?&lt;/p&gt;
&lt;h4&gt;What about the check?&lt;/h4&gt;
&lt;p&gt;Of course, they're not mandatory but I prefer to have some.&lt;/p&gt;
&lt;p&gt;There's two type of check: tcp and http. There's a bug in httpd of 5.7 which
will make it segfault if the check is tcp. I reported it and it has
been fixed so if you plan to use tcp check, you should backport
&lt;a href="https://marc.info/?l=openbsd-cvs&amp;amp;m=142980842022822&amp;amp;w=2"&gt;this commit&lt;/a&gt;. &lt;strong&gt;Edit:&lt;/strong&gt;
&lt;a href="http://ftp.openbsd.org/pub/OpenBSD/patches/5.7/common/005_httpd.patch.sig"&gt;an errata was finally released&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Since I had this problem, I moved to http check. Then, as &lt;em&gt;haproxy&lt;/em&gt;
accesses every two seconds the httpd, &lt;em&gt;access.log&lt;/em&gt; get filled. So I
simply added in the vhost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;location &amp;quot;/check/*&amp;quot; {
    no log
}
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;The end.&lt;/h2&gt;
&lt;p&gt;I'm not talking about everything, so if you can't find something, go read
&lt;a href="https://cbonte.github.io/haproxy-dconv/configuration-1.5.html"&gt;the documentation&lt;/a&gt;
it's pretty eye-candy but stays handy.&lt;/p&gt;
&lt;p&gt;Many thanks to &lt;a href="https://twitter.com/vihaire"&gt;vr&lt;/a&gt; for his kind help
setting up this and for all the explanations he provided me.&lt;/p&gt;
&lt;p&gt;And please remember that if you backport any diff from -current to
-stable, you do it at your own risk.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="haproxy"></category><category term="httpd"></category><category term="nginx"></category><category term="https"></category><category term="tls"></category></entry><entry><title>Des nouvelles de wonderlan</title><link href="https://oldblog.chown.me/blog/des-nouvelles-de-wonderlan.html" rel="alternate"></link><published>2015-04-06T10:20:00-04:00</published><updated>2015-04-06T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2015-04-06:/blog/des-nouvelles-de-wonderlan.html</id><summary type="html">&lt;p&gt;Upgrade de mon routeur&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Wonderlan ?&lt;/h2&gt;
&lt;h3&gt;Old OpenBSD is old&lt;/h3&gt;
&lt;p&gt;Il y a quasi deux ans,
&lt;a href="./alice-in-wonderlan.html"&gt;je vous avais parlé&lt;/a&gt; de la mise en place
d'une Alix sous OpenBSD comme routeur. J'avais un certain nombre de
limitation avec cette carte, comme le fait qu'elle est mon routeur
donc si j'upgrade je n'ai plus de réseau. De plus, elle est en i386
et c'est la seule machine de mon lan avec cette architecture donc je ne
peux pas compiler sur une autre pour lui donner des binaires ; avec
les perfs du CPU et la carte CF pour la mémoire, je ne voulais/pouvais
pas compiler avec et comme le projet ne fournit pas des patchs binaires
.... Résultat des courses, j'ai pas upgradé pendant longtemps j'avais
pas mal de patchs de sécu non appliqués (je sais, c'est mal :().&lt;/p&gt;
&lt;p&gt;Je suis quand même arrivé à 255 jours d'uptime, ce qui en dit long
aussi sur la stabilité de la machine (et non, l'uptime n'est pas codé
sur 8 bits :p).&lt;/p&gt;
&lt;h3&gt;Des envies de jouer&lt;/h3&gt;
&lt;p&gt;Cela fait un moment que j'ai envie de jouer avec diverses choses
présentes dans OpenBSD, tel que vlan(4), trunk(4) (j'veux dire,
davantage que
&lt;a href="./de-la-haute-dispo-sur-mon-lappy.html"&gt;sur un laptop&lt;/a&gt;), carp(4),
toute la stack ipsec et les daemons de routage openbgpd et ospfd. Mon
réseau était trop limité pour faire tout ça.&lt;/p&gt;
&lt;h2&gt;Quel hardware ?&lt;/h2&gt;
&lt;h3&gt;Pour le switch&lt;/h3&gt;
&lt;p&gt;J'ai donc acheté un switch TL-SG3424 pour avoir plein de ports et
arrêter de passer mon temps à brancher/débrancher des
&lt;a href="./pages/machines.html"&gt;machines&lt;/a&gt;. Le switch est aussi manageable,
contrairement à mon switch précédent et me permet de faire des vlans,
du trunk lacp etc.&lt;/p&gt;
&lt;h3&gt;Pour le routeur&lt;/h3&gt;
&lt;p&gt;A vrai dire, la question ne s'est pas vraiment posée, j'ai toujours
été satisfait de l'alix donc je me suis naturellement dirigé vers son
successeur, l'apu. La machine est plus puissante, a des NIC gigabit et
supporte même le boot usb. Quand je repense à l'installation de l'alix
qui avait du se faire via le pxe, le boot usb devrait faciliter quand
même les débutants à franchir le pas :p
Et surtout son architecture est de l'amd64, donc ça me permet
d'homogénéiser mon lan \o/&lt;/p&gt;
&lt;h2&gt;Ok ok, et concrètement&lt;/h2&gt;
&lt;h3&gt;On installe -stable&lt;/h3&gt;
&lt;p&gt;Je vais éviter de compiler dessus, j'ai des machines plus rapides dans
mon lan. Même si 5.7 sort dans même pas un mois, je voulais du -stable
donc j'ai choisi 5.6. 5.6 ayant pas mal de patchs de sécu à appliquer,
j'ai donc commencé par builder une -stable afin de partir avec du
neuf.&lt;/p&gt;
&lt;p&gt;On crée la clé usb bootable avec &lt;code&gt;dd if=$RELEASEDIR/miniroot56.fs
of=/dev/rsd2c&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour se connecter en serial à la machine, on utilise&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cu -s 115200 -l /dev/ttyU0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On devrait voir les messages de boot. On peut appuyer sur F12 pour
avoir la liste des périphériques USB puis on boote sur la clé USB. Au
prompt &lt;code&gt;boot&amp;gt;&lt;/code&gt; on indique à OpenBSD qu'on est sur une console serial
avec une vitesse de 115200 bauds&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;stty com0 115200
set tty com0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Puis on installe OpenBSD, comme d'hab.&lt;/p&gt;
&lt;h3&gt;On choisit comment on va faire son réseau&lt;/h3&gt;
&lt;h4&gt;Répartition des interfaces&lt;/h4&gt;
&lt;p&gt;J'ai dit précédemment que je voulais jouer avec du trunk(4) et des
vlan(4). Sur l'alix j'avais sur les trois interfaces :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un switch pour mon lan&lt;/li&gt;
&lt;li&gt;un ap wifi pour mon wifi et faire mes trunk(4) failover sur mes
lappy&lt;/li&gt;
&lt;li&gt;mon modem en mode bridge pour monter une session pppoe pour mon adsl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sur les trois interfaces, je ne sais jamais laquelle est la 0 et
laquelle est la 2, seule la 1 étant au milieu je sais avec certitude
laquelle c'est.&lt;/p&gt;
&lt;p&gt;Mon but étant de faire un trunk(4) avec deux interfaces et de connecter la
troisième au modem, j'ai choisi de faire le trunk(4) sur les
interfaces 0 et 2, et d'utiliser la 1 pour le modem car l'ordre des
interfaces pour un trunk lacp n'a pas d'importance (malin comme un
singe, t'as vu).&lt;/p&gt;
&lt;h4&gt;Les vlans&lt;/h4&gt;
&lt;p&gt;J'avais donc deux réseaux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un pour mon lan&lt;/li&gt;
&lt;li&gt;un pour mon wifi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J'ai donc décidé de mettre ces deux réseaux sous forme de
vlan(4). Hébergeant aussi
&lt;a href="https://atlas.ripe.net/probes/17564/"&gt;une probe atlas&lt;/a&gt;, je me suis
dit que ça pouvait être mieux de la mettre dans un vlan(4) séparé &lt;em&gt;for
moar fun&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Donc cela donne :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lan = vlan 10&lt;/li&gt;
&lt;li&gt;wifi = vlan 20&lt;/li&gt;
&lt;li&gt;probe atlas = vlan 30&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;non mais j'ai dit concrètement&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# ls hostname*
hostname.pppoe0 hostname.re0    hostname.re1    hostname.re2    hostname.trunk0 hostname.vlan10 hostname.vlan20 hostname.vlan30
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dans l'ordre (du plus simple au plus compliqué), re1 c'est donc celle pour le modem, rien ne change sur celle-là. re0
et re2 servent à faire le trunk(4) lacp et ne contiennent donc
seulement : &lt;code&gt;up&lt;/code&gt;. Le trunk(4) lacp :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;trunkproto lacp trunkport re0 trunkport re2
up
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Maintenant, on peut mettre les vlans avec les adresses
IP. hostname.vlan10 est simplement un copié collé de
hostname.vrmachin de l'alix, préfixé de &lt;code&gt;vlandev
trunk0&lt;/code&gt;. hostname.vlan20 pareil, copié/collé de hostname.vrautremachin
de l'alix préfixé de &lt;code&gt;vlandev trunk0&lt;/code&gt;. Un exemple concret avec hostname.vlan30 :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;vlandev trunk0
inet 10.250.250.1/24
inet6 2001:910:1322:250::1 64
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;les autres confs&lt;/h3&gt;
&lt;p&gt;On récupère de l'alix :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/etc/pf.conf&lt;/li&gt;
&lt;li&gt;/etc/dhcpd.conf&lt;/li&gt;
&lt;li&gt;toutes les merdes qu'il y a dans les $HOME&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On installe tout ça sur l'apu, on reboot en la branchant comme il
faut, et on debug ce qui ne marche pas.&lt;/p&gt;
&lt;h3&gt;Mais tout ça c'est vraiment utile ?&lt;/h3&gt;
&lt;p&gt;Typiquement le trunk(4) lacp, ne me sert pas à grand chose, mais comme
dit au début de l'article mon but est de jouer :)&lt;/p&gt;
&lt;p&gt;Et ça ne fait que commencer. J'espère.&lt;/p&gt;</content><category term="autohébergement"></category><category term="apu"></category><category term="alix"></category><category term="pf"></category><category term="OpenBSD"></category></entry><entry><title>Installer OpenBSD sur une octane SGI</title><link href="https://oldblog.chown.me/blog/installer-openbsd-octane-sgi.html" rel="alternate"></link><published>2015-03-11T10:20:00-04:00</published><updated>2015-03-11T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2015-03-11:/blog/installer-openbsd-octane-sgi.html</id><summary type="html">&lt;p&gt;On m'a donné une Octane SGI pour jouer avec OpenBSD, j'ai donc installé OpenBSD&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Une octane ? en 2015 ?&lt;/h2&gt;
&lt;p&gt;Oui, c'est rigolo de jouer avec des vieilles machines. Un grand merci
à &lt;a href="https://twitter.com/MiodVallat"&gt;Miod Vallat&lt;/a&gt; pour me l'avoir donnée.&lt;/p&gt;
&lt;h2&gt;Mais tu penses que ça va me servir cette doc ?&lt;/h2&gt;
&lt;p&gt;Non, mais à moi certainement. Vu que j'ai un peu eu du mal à
l'installer.&lt;/p&gt;
&lt;p&gt;On commence par essayer de booter, forcément elle arrive pas à booter
sur le disque on a un menu avec 5 options qui sont :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Boot sur le disque&lt;/li&gt;
&lt;li&gt;On&lt;/li&gt;
&lt;li&gt;S'en&lt;/li&gt;
&lt;li&gt;Fout&lt;/li&gt;
&lt;li&gt;Config&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On commence par préparer la machine donc on choisit l'option 5. On
obtient un prompt "&amp;gt;&amp;gt;". On découvre quel modèle exacte d'Octane on a
avec &lt;code&gt;version&lt;/code&gt;. Ce sera nécessaire pour télécharger les bons noyaux
correspondants.&lt;/p&gt;
&lt;p&gt;Il est possible qu'on doive enlever la valeur de la variable "netaddr"
(on peut vérifier avec &lt;code&gt;printenv&lt;/code&gt; si c'est le cas) : &lt;code&gt;unsetenv netaddr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite on monte un tftp (qu'on indiquera avec 'next-server' dans
dhcpd.conf). On pensera à autoriser les connexions avec pf. Et pas que
pour tcp hein (protip). Si on est frileux on lance &lt;code&gt;sysctl
net.inet.ip.portlast&lt;/code&gt;, on note la valeur pour la remettre après et on
lance &lt;code&gt;sysctl net.inet.ip.portlast=32767&lt;/code&gt;. Ensuite on debug avec
tcpdump tout ce qu'on aurait pu oublier en lançant simultanément
&lt;code&gt;bootp()bsd.rd.IP30&lt;/code&gt; avec bien sûr la bonne version de votre kernel.&lt;/p&gt;
&lt;p&gt;Finalement ça boot, une fois que bsd.rd est lancé, c'est comme d'hab.&lt;/p&gt;
&lt;p&gt;Une fois l'installation faite, on reboot mais la machine ne va sans
doute pas réussir à booter à cause des options. Il faut vérifier que
"OSLoader" vaut bien "boot" avec &lt;code&gt;printenv&lt;/code&gt;. Si ce n'est pas le cas,
il suffit de  &lt;code&gt;setenv OSLoader boot&lt;/code&gt;, on peut vérifier avec &lt;code&gt;printenv&lt;/code&gt;
que c'est bon.&lt;/p&gt;
&lt;p&gt;Le kernel qui est lancé est dans la variable "OSLoadFilename". C'est
avec cette variable qu'on indique si on prend &lt;code&gt;/bsd&lt;/code&gt; ou &lt;code&gt;/bsd.rd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Enfin, il y a la variable "AutoLoad" pour que la machine boot toute
seule comme une grande sans qu'on ait besoin du serial.&lt;/p&gt;
&lt;h2&gt;Mais euh ... t'inventes rien en fait, tout est dans INSTALL.sgi&lt;/h2&gt;
&lt;p&gt;Exactement. &lt;a href="http://ftp.fr.openbsd.org/pub/OpenBSD/5.6/sgi/INSTALL.sgi"&gt;Source&lt;/a&gt;&lt;/p&gt;</content><category term="OpenBSD"></category></entry><entry><title>Monter automatiquement un disque chiffré sur OpenBSD au boot</title><link href="https://oldblog.chown.me/blog/monter-automatiquement-un-disque-chiffre-sur-OpenBSD-au-boot.html" rel="alternate"></link><published>2014-11-09T10:20:00-05:00</published><updated>2014-11-09T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-11-09:/blog/monter-automatiquement-un-disque-chiffre-sur-OpenBSD-au-boot.html</id><summary type="html">&lt;p&gt;Comment monter automatiquement lors du boot un disque chiffré avec softraid&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Ce que je veux faire&lt;/h2&gt;
&lt;p&gt;J'ai récemment changé mon desktop de xubuntu à OpenBSD car suite à
l'achat d'un clavier mécanique, je l'utilise plus sérieusement. Je
compte utiliser un disque de 500 Go pour le système et un disque d'1
To pour les données. Bien évidemment les deux disques sont chiffrés
avec softraid.&lt;/p&gt;
&lt;p&gt;Mon but est que le deuxième disque soit monté automatiquement au boot,
sans même me demander la phrase de passe.&lt;/p&gt;
&lt;h2&gt;On formate le disque&lt;/h2&gt;
&lt;p&gt;On commence par chiffrer le nouveau disque. On suppose que c'est
wd1. Je suppose que les commandes données sont connues :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ fdisk -e wd1
$ disklabel -E wd1 &lt;span class="c1"&gt;# on créé juste la partition p en RAID&lt;/span&gt;
$ bioctl -c C -l /dev/wd1p softraid0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;à ce moment là, le disque chiffré va être monté sur (supposons) sd1.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ dd &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/zero &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/rsd1c &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1m &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
$ fdisk -e sd1 &lt;span class="c1"&gt;# on créé la partition a&lt;/span&gt;
$ disklabel -E sd1
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Mais ça c'est dans la FAQ sinon.&lt;/p&gt;
&lt;h2&gt;L'automount.&lt;/h2&gt;
&lt;h3&gt;la phrase de passe&lt;/h3&gt;
&lt;p&gt;On commence par mettre la phrase de passe dans un fichier sur le
disque. On s'en fiche car 1) le disque est chiffré 2) c'est pas des
données vraiment confidentielles (on a rien à cacher, n'est ce pas ?).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;92915934093122c04f4711291f8fae282ef56022&amp;quot;&lt;/span&gt; &amp;gt; /etc/passphrase
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite on utilise chown(8) et chmod(8) pour arriver à&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;-rw-------  1 root  wheel    123 Nov  8 17:59 /etc/passphrase
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;(sinon de toute façon, bioctl va râler).&lt;/p&gt;
&lt;h3&gt;Identifions les disques&lt;/h3&gt;
&lt;p&gt;À partir de maintenant, on va utiliser des
&lt;a href="http://openbsd.org/faq/faq14.html#intro"&gt;DUIDs&lt;/a&gt; et non plus le device
car les disques et les volumes créés par softraid peuvent changer,
mais pas les DUIDs.&lt;/p&gt;
&lt;p&gt;Il y a deux volumes, le physique &lt;code&gt;/dev/wd1&lt;/code&gt; et le logique
&lt;code&gt;/dev/sd1&lt;/code&gt;. Les deux ont bien évidemment chacun leur propre DUID.&lt;/p&gt;
&lt;p&gt;Pour trouver le DUID d'un disque, c'est dans disklabel(8) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ disklabel wd1 &lt;span class="p"&gt;|&lt;/span&gt; grep duid
duid: 4d498d4248c8d056
$ disklabel sd1 &lt;span class="p"&gt;|&lt;/span&gt; grep duid
duid: 384c27964f6e987d
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;On choisit comment on va le monter&lt;/h3&gt;
&lt;p&gt;On indique dans &lt;code&gt;/etc/fstab&lt;/code&gt; comment on veut le monter. Dans mon cas à
la fin du fichier c'est :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ tail -n &lt;span class="m"&gt;1&lt;/span&gt; /etc/fstab
b1e264fc29000110.a /dataporn ffs rw,nodev,nosuid,softdep,noauto &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On voit au début de la ligne le DUID suivi de la lettre "a" car j'ai
utilisé (à tort, c'est réservé pour / normalement) la partition "a"
pour mes données. Par contre attention, c'est &lt;strong&gt;le DUID du volume monté
par softraid&lt;/strong&gt;, pas celui du volume physique.&lt;/p&gt;
&lt;p&gt;Je vous laisse lire les mans de mount(8) et de fstab(5) si vous ne
comprenez pas les options. On termine par "0 0" pour dire ne pas
tenter de le fsck pour la même raison qu'on le met en noauto, car au
boot le volume n'a pas encore été monté donc pour le système il
n'existe pas (vous pouvez essayer, &lt;a href="https://twitter.com/Vigdis_/status/531042628625002497"&gt;je l'ai
fait&lt;/a&gt; :p).&lt;/p&gt;
&lt;h3&gt;On déchiffre et on monte le disque&lt;/h3&gt;
&lt;p&gt;On va donc utiliser le fichier &lt;code&gt;/etc/rc.local&lt;/code&gt; pour déchiffrer et monter
le disque et il puisera les informations dans &lt;code&gt;/etc/fstab&lt;/code&gt; pour monter
le volume au bon endroit.&lt;/p&gt;
&lt;p&gt;La différence entre -current et -stable est que le script
&lt;code&gt;/etc/rc.local&lt;/code&gt; n'est plus dans &lt;code&gt;/etc&lt;/code&gt; mais dans &lt;code&gt;/etc/examples&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On rajoute dans ce fichier les lignes :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;bioctl -c C -l 4d498d4248c8d056.p -p /etc/passphrase  softraid0
echo &amp;quot;check /dataporn&amp;quot;; fsck -p /dataporn; mount -s /dataporn
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Cette fois, c'est &lt;strong&gt;le DUID du volume physique&lt;/strong&gt;. On monte le volume
chiffré puis on lance un petit fsck (comme le fait le système au boot)
et enfin, on monte le volume suivant &lt;code&gt;/etc/fstab&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On peut lancer les commandes à la main pour vérifier que ça se passe
bien puis on reboot pour tester et ça devrait marcher.&lt;/p&gt;
&lt;h2&gt;Les bisous&lt;/h2&gt;
&lt;p&gt;Merci à &lt;a href="https://twitter.com/_semarie"&gt;semarie&lt;/a&gt; et landry@ pour l'aide
et les conseils.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="softraid"></category><category term="opsec"></category></entry><entry><title>Some news from my internship</title><link href="https://oldblog.chown.me/blog/some-news-from-my-internship.html" rel="alternate"></link><published>2014-09-25T10:20:00-04:00</published><updated>2014-09-25T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-09-25:/blog/some-news-from-my-internship.html</id><summary type="html">&lt;p&gt;I just finished a two-month internship, so here's the story.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I don't often write my articles in English (yeah, there are some in
English), but as this time some people concerned don't speak French,
it makes more sense to write it in English.&lt;/p&gt;
&lt;h2&gt;Why this internship?&lt;/h2&gt;
&lt;p&gt;To graduate my engineering school, I have to do a two-month internship
abroad (so anywhere but not in France).&lt;/p&gt;
&lt;h3&gt;Why THIS internship?&lt;/h3&gt;
&lt;p&gt;Because as you may be aware, I &lt;strong&gt;really&lt;/strong&gt; like OpenBSD so what's
better than doing it with OpenBSD developpers?&lt;/p&gt;
&lt;h3&gt;OpenBSD developpers?&lt;/h3&gt;
&lt;p&gt;I did the internship at vantronix/Compumatica where mpi@, mikeb@ and
(former) mickey@ work. (I can't say if a first name beginning with the
letter "m" is mandatory or not :p).&lt;/p&gt;
&lt;h3&gt;Where?&lt;/h3&gt;
&lt;p&gt;So it was in Aachen (or known as Aix la Chapelle for French people) in
Germany. The city is really nice. A huge and nice park was at only ten
minutes on foot with a bunch of cute squirrels and it was really cool
to go there when the run shone (yeah, it happened sometimes).&lt;/p&gt;
&lt;h2&gt;What did you do?&lt;/h2&gt;
&lt;h3&gt;Working on a OpenBSD computer &amp;lt;3&lt;/h3&gt;
&lt;p&gt;The first thing I did was installing OpenBSD on the laptop they
provided me (which was a x201, as the one I own). I copied my ~/.config
on the freshly installed laptop (and it just worked, I was amazed) so
it was configured exactly as I like.&lt;/p&gt;
&lt;p&gt;I really appreciated to work on an OpenBSD computer with the settings
I want. I'm so fed up to use windows as well in school that in my
apprenticeship.&lt;/p&gt;
&lt;h3&gt;Showing some love to the documentation&lt;/h3&gt;
&lt;p&gt;I then fixed and updated the documentation they provide to customers
for the products the company sells. The patchs related to OpenBSD
(like for man pages) were merged upstream, of course.&lt;/p&gt;
&lt;h3&gt;Establishing IPSEC tunnels&lt;/h3&gt;
&lt;p&gt;Mike asked me to set up some ipsec tunnels (both with isakmpd and
iked) because he wanted to see something. I was scared because I know
how complicate ipsec standards are, but it just worked. Quite
astonished.&lt;/p&gt;
&lt;h3&gt;xkeyboard&lt;/h3&gt;
&lt;p&gt;At first I thought there was a bug laying in OpenBSD xkeyboard because
when I used Debian on my laptop I saw a difference. It was just
because they don't have the same layout by default.&lt;/p&gt;
&lt;p&gt;I mailed the Xorg maintener to know why the difference and why not
choose a better default for every one. I try to argue why fr-oss would
be better but after being answered a couple of times "we should do as
Windows do", I stop replying to not to be rude.&lt;/p&gt;
&lt;p&gt;I finally did the change on my computers. I noticed that there was a
bug which was fixed upstream, so I looked for the git repo then looked
for the patch and then tried it on OpenBSD xenocara, it was a great
experience.&lt;/p&gt;
&lt;h3&gt;sikrit project&lt;/h3&gt;
&lt;p&gt;I begin to work on a project but as long it's not finished, I don't
want to talk about it. :)&lt;/p&gt;
&lt;h3&gt;Preview of mpi's talk to EuroBSDcon&lt;/h3&gt;
&lt;p&gt;He did a talk to show his slides and have feedback, mainly from mikeb@
and mickey@, for the talk he's doing at EuroBSDcon in Sofia. It was
interesting to attend.&lt;/p&gt;
&lt;h2&gt;Sum up&lt;/h2&gt;
&lt;p&gt;I learnt a lot of things, had a couple of really interesting
discussions (about OpenBSD, private stuff (aka life), free software and
so on). I also had a lot of fun because they're funny guys like when
mpi@ did his pre-talk or in various occasion.&lt;/p&gt;
&lt;p&gt;One time I remember is when
&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=140851530004726&amp;amp;w=2"&gt;mikeb unlinked crypto(4)&lt;/a&gt;. He
said "oh, it wasn't present on Vax, I know, I'll call that the
&lt;a href="https://en.wikipedia.org/wiki/Vaccination"&gt;vaxination&lt;/a&gt;" :D&lt;/p&gt;
&lt;p&gt;I think how much I'm sad right now is pretty meaningful about how much I
loved it.&lt;/p&gt;
&lt;h2&gt;Thanks&lt;/h2&gt;
&lt;p&gt;This internship wouldn't have happened without the help of
&lt;a href="https://twitter.com/lucilefalg_"&gt;Lucile&lt;/a&gt; and stsp@. I'm really
grateful for their help.&lt;/p&gt;
&lt;p&gt;Obviously, I'd like to thank mikeb@, mpi@ and mickey@ for their
reception, their support, all the things they taught me and making me
go ahead. And also, mikeb for his advice to what to order for lunch, I
usually followed it blindly even I didn't know what I would get, but
I've never been disappointed :D&lt;/p&gt;
&lt;p&gt;And in broader way, to all the staff of Compumatica for all their
welcome, their tries to talk with me in French (that was funny).&lt;/p&gt;
&lt;h2&gt;Some links&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=140725646723662&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=140725646723662&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=140725660023766&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=140725660023766&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=140746716804227&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=140746716804227&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=140952023712487&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=140952023712487&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=141043410332344&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=141043410332344&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=141097034506575&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=141097034506575&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=141091440819059&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=141091440819059&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marc.info/?l=openbsd-cvs&amp;amp;m=141091837920339&amp;amp;w=2"&gt;http://marc.info/?l=openbsd-cvs&amp;amp;m=141091837920339&amp;amp;w=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(they may not all be there).&lt;/p&gt;</content><category term="OpenBSD"></category><category term="IPSEC"></category></entry><entry><title>xmpp-client sur OpenBSD</title><link href="https://oldblog.chown.me/blog/xmpp-client-sur-OpenBSD.html" rel="alternate"></link><published>2014-09-21T10:20:00-04:00</published><updated>2014-09-21T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-09-21:/blog/xmpp-client-sur-OpenBSD.html</id><summary type="html">&lt;p&gt;Utilisation d'un remplaçant à pidgin : xmpp-client&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Comment elle commence ton histoire ?&lt;/h2&gt;
&lt;p&gt;Pidgin est cassé. C'est pas nouveau, c'est régulièrement
répété. L'avant dernière fois que je l'ai lu, c'était dans le très bon
article everything is
broken (&lt;a href="https://medium.com/message/everything-is-broken-81e5f33a24e1"&gt;en&lt;/a&gt;|&lt;a href="http://www.framablog.org/index.php/post/plus-rien-ne-marche-que-faire"&gt;fr&lt;/a&gt;)
de Quinn Norton.&lt;/p&gt;
&lt;p&gt;Sur OpenBSD, régulièrement, quand OTR intervient pour générer une clé
ou authentifier un contact, pouf, il segfault. Rassurant, non ?&lt;/p&gt;
&lt;p&gt;La dernière fois, c'était dans
&lt;a href="https://twitter.com/csoghoian/status/510812616630206464"&gt;un tweet de Christopher Soghoian&lt;/a&gt;
et dans lequel, il dit du bien (dire qu'il peut être utilisé par des
journaleux, c'est dire du bien :)) de xmpp-client d'Adam Langley (dev
qui bosse chez google, qui bosse sur la sécurité de chrome pour la
stack SSL/TLS, qui a forké openssl en boringssl etc).&lt;/p&gt;
&lt;p&gt;J'ai eu envie de tester, d'où cet article.&lt;/p&gt;
&lt;h2&gt;Mais pourquoi ce client, y a plein de client xmpp&lt;/h2&gt;
&lt;p&gt;Mon besoin est simple "&lt;a href="https://otr.cypherpunks.ca/"&gt;OTR&lt;/a&gt;". Lecteur, tu rigoles
peut-être, mais juste ces trois lettres en enlèvent une grosse partie.&lt;/p&gt;
&lt;p&gt;C'est pour ça par exemple, que &lt;a href="https://twitter.com/falzm/status/510885976068333568"&gt;je n'utilise pas bitlbee&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Et ne pas utiliser OTR ?&lt;/h3&gt;
&lt;p&gt;Nope, nope nope.&lt;/p&gt;
&lt;p&gt;Je ne fais pas confiance à tls/ssl pour xmpp. Pas dans un cas général,
mais dans mon cas. Parce que la version de prosody que j'utilise est
vieille, que ceci que cela, que le s2s est sujet à du mitm etc.&lt;/p&gt;
&lt;p&gt;Mais bon, c'est pas une nouveauté que le chiffrement bout à bout, est
une nécessité.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; “Encryption works. Properly implemented strong crypto systems are
 one of the few things that you can rely on. Unfortunately,
 endpoint security is so terrifically weak that NSA can frequently
 find ways around it.”
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;D'ailleurs, on en revient à ce que je disais avant "endpoint security
is so terrifically weak" COUCOU PIDGIN §§§.&lt;/p&gt;
&lt;p&gt;Donc ceinture, bretelle, toussa toussa. Je veux OTR.&lt;/p&gt;
&lt;h3&gt;ok ok, mais y a plus d'un client xmpp qui gère OTR&lt;/h3&gt;
&lt;p&gt;On va lister ceux qui gèrent OTR d'après
&lt;a href="https://otr.cypherpunks.ca/software.php"&gt;https://otr.cypherpunks.ca/software.php&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;adium == libpurple, donc même chose que pidgin&lt;/li&gt;
&lt;li&gt;climm, mcabber, centerim et profanity j'avoue j'ai pas testé, mais de ce que je
  vois sur leurs sites, ça ne me fait pas rêver&lt;/li&gt;
&lt;li&gt;kopete ouais ça marchouille, avec le plaisir que comme tous softs
  kde/gnome tu bouffes trois brouettes de dépendances, merci bisous&lt;/li&gt;
&lt;li&gt;jitsi == java ... désolé, firefox a déjà pris toute la ram&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;via plugins :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pidgin, ouais, on sait ce que ça vaut&lt;/li&gt;
&lt;li&gt;irssi euh ouais, j'ai tenté d'utiliser, mmmh j'ai pas
  particulièrement aimé, je ne sais plus trop pourquoi&lt;/li&gt;
&lt;li&gt;psi j'ai testé y a longtemps, la gui n'était pas intuitive,
  j'arrivais à rien&lt;/li&gt;
&lt;li&gt;gajim euh, &lt;a href="https://en.wikipedia.org/wiki/Gajim#Security"&gt;hum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je suis sans doute difficile.&lt;/p&gt;
&lt;h2&gt;Donc xmpp-client&lt;/h2&gt;
&lt;p&gt;C'est un client cli-only, donc pas d'interface graphique.&lt;/p&gt;
&lt;p&gt;On commence par installer les paquets nécessaires :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pkg_add go mercurial
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On set un GOPATH, dans mon cas :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;export GOPATH=/home/myuser/gocode
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite on applique la commande magique :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;go get github.com/agl/xmpp-client
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;on se retrouve avec dans le gopath :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ ls gocode/
bin/ pkg/ src/
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;dans bin il y a l'éxécutable qu'on va lancer.&lt;/p&gt;
&lt;p&gt;Une fois l'exécutable lancé, il nous pose des questions et génère le
fichier de config dans &lt;code&gt;~/.xmpp-client&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On va modifier deux choses.&lt;/p&gt;
&lt;h3&gt;La première&lt;/h3&gt;
&lt;p&gt;La première est l'ajout du mot de passe. agl ne le fait pas pour être
sûr que la personne qui le fait sait qu'il met son mot de passe en
clair dans un fichier sur son disque. Mais si quelqu'un a accès à ce
fichier, j'aurais bien d'autres problèmes avant. Et de toute façon
&lt;a href="http://blog.chown.me/utiliser-openbsd-sur-un-laptop.html"&gt;j'ai du FDE&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On ajoute donc la ligne&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;quot;Password&amp;quot;: &amp;quot;f6fab8747331ca8fc8b7fdabf81f822f256d647e&amp;quot;,
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Hahaha tu as vu, il est trop con, il a mis son vrai mot de passe !!1!
&lt;code&gt;openssl rand -hex 20&lt;/code&gt; est ton ami.&lt;/p&gt;
&lt;h3&gt;La deuxième&lt;/h3&gt;
&lt;p&gt;La deuxième chose,
&lt;a href="http://blog.chown.me/pika-pika-pki.html"&gt;j'utilise ma propre maf^WAC&lt;/a&gt;,
et donc avec xmpp-client, s'il ne trouve pas l'AC dans
/etc/ssl/jesaispasquelfichieràlacon, il ne veut pas se
connecter. Soit, on jette un rapide coup d'oeil dans les sources&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ServerCertificateSHA256 string `json:&amp;quot;,omitempty&amp;quot;`
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ça tombe bien,
&lt;a href="https://chown.me/iota/fingerprint.asc.txt"&gt;je les donne&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On rajoute donc (dans mon cas, tu es invité·e à changer les valeurs
chez toi) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;quot;ServerCertificateSHA256&amp;quot;: &amp;quot;5c5f28ea20b09c71fca7442569b8d56f11907a1ab0ce2ada998755b1d755b207&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et voilà ça se connecte.
On parle qqn en mettant sont adresse par exemple randomuser@chown.me
et le prompt va passer de "&amp;gt;" à "randomuser@chown.me"&lt;/p&gt;
&lt;p&gt;Le client permet de faire pas mal de chose :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; /help
* (9:51PM) /add &amp;lt;user&amp;gt;                            Request a subscription to another user&amp;#39;s presence
* (9:51PM) /away                                  Set your status to Away
* (9:51PM) /chat                                  Set your status to Available for Chat
* (9:51PM) /confirm &amp;lt;user&amp;gt;                        Confirm an inbound subscription request
* (9:51PM) /deny &amp;lt;user&amp;gt;                           Deny an inbound subscription request
* (9:51PM) /dnd                                   Set your status to Busy / Do Not Disturb
* (9:51PM) /help                                  List known commands
* (9:51PM) /nopaste                               Stop interpreting text verbatim
* (9:51PM) /online                                Set your status to Available / Online
* (9:51PM) /otr-auth &amp;lt;user&amp;gt; &amp;lt;secret&amp;gt;              Authenticate a secure peer with a mutual, shared secret
* (9:51PM) /otr-authoob &amp;lt;user&amp;gt; &amp;lt;fingerprint&amp;gt;      Authenticate a secure peer with out-of-band fingerprint verification
* (9:51PM) /otr-authqa &amp;lt;user&amp;gt; &amp;lt;question&amp;gt; &amp;lt;secret&amp;gt; Authenticate a secure peer with a question and answer
* (9:51PM) /otr-end &amp;lt;user&amp;gt;                        End an OTR session
* (9:51PM) /otr-info                              Print OTR information such as OTR fingerprint
* (9:51PM) /otr-start &amp;lt;user&amp;gt;                      Start an OTR session with the given user
* (9:51PM) /paste                                 Start interpreting text verbatim
* (9:51PM) /quit                                  Quit the program
* (9:51PM) /rostereditdone                        Load the edited roster from disk
* (9:51PM) /rosteredit                            Write the roster to disk
* (9:51PM) /roster [--online]                     Display the current roster
* (9:51PM) /statusupdates                         Toggle if status updates are displayed
* (9:51PM) /version &amp;lt;user&amp;gt;                        Ask a Jabber client for its version
* (9:51PM) /xa                                    Set your status to Extended Away
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;La troisième&lt;/h3&gt;
&lt;p&gt;Et la troisième chose, c'est juste
&lt;a href="http://martinfowler.com/bliki/TwoHardThings.html"&gt;une erreur off-by-one&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Et l'utilisation ?&lt;/h2&gt;
&lt;p&gt;Déjà ça change de mon client graphique. Avec pidgin, l'icone se met en
haut à droite dans ma barre des tâches de xfce et l'avantage c'est que
quand je reçois un message, l'icone change. Le problème c'est quand
j'utilise une application en plein-écran (à peu près toute, en fait),
je ne la vois pas.&lt;/p&gt;
&lt;p&gt;Avec xmpp-client, le problème sera le même, parce que je le lance dans
un onglet du terminal et même si avec xfce la couleur des titres des term
changent selon l'activité de ce dernier, si je ne suis pas dans mon
espace de travail consacré au terminal je ne le verrais pas. Cela dit,
je ne crois pas que mes contacts doivent me contacter en toute
urgence.&lt;/p&gt;
&lt;p&gt;Par rapport à pidgin où une fenêtre est dédiée à l'affichage des
contacts et une fenêtre pour les conversations (chaque conversation a
lieu dans un onglet), sur xmpp-client, tout se passe au même endroit,
ce qui est un peu surprenant : on peut avoir à la suite des messages
de différentes personnes, les réponses qu'on envoie et les changements
de statuts des gens (connectés, déconnectés et away).&lt;/p&gt;</content><category term="Tor"></category><category term="xmpp"></category><category term="opsec"></category><category term="otr"></category><category term="OpenBSD"></category><category term="tls"></category></entry><entry><title>JE fais ce que JE veux avec MA vie privée</title><link href="https://oldblog.chown.me/blog/je-fais-ce-que-je-veux-avec-ma-vie-privee.html" rel="alternate"></link><published>2014-06-24T10:20:00-04:00</published><updated>2014-06-24T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-06-24:/blog/je-fais-ce-que-je-veux-avec-ma-vie-privee.html</id><summary type="html">&lt;p&gt;Que quelqu'un accepte de sacrifier sa vie privée auprès des GAFA ne vous autorise pas à l'exploiter&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;Hier soir en organisant &lt;a href="http://gitoyen.net/"&gt;un truc&lt;/a&gt; pour ce week-end (parallèlement à PSES), j'ai regardé la page "&lt;a href="http://www.passageenseine.org/Passage/le-spot"&gt;Le Spot&lt;/a&gt;" du site passageenseine.org pour savoir où ont lieu les confs. Il y avait l'adresse, la station de métro .... et un plan google map.&lt;/p&gt;
&lt;p&gt;Un peu amusé je &lt;a href="https://twitter.com/Vigdis_/status/481132195789426688"&gt;tweet&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce week end @passageenseine avec plein de conf pour t'expliquer la surveillance et pour s'y rendre un plan google map http://www.passageenseine.org/Passage/le-spot&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ce message était sarcastique mais avec la limite des 140 caractères, j'ai pas réussi à le tourner de manière à ce que ce soit claire.&lt;/p&gt;
&lt;p&gt;Le compte twitter de PSES met en copie &lt;a href="https://twitter.com/bluetouff"&gt;bluetouff&lt;/a&gt; qui me répond (entre autre) 3 tweets (du plus récent au plus vieux) :&lt;/p&gt;
&lt;!--![twitter](https://poolp.org/~vigdis/twitter.png)--&gt;

&lt;p&gt;&lt;img alt="twitter" src="https://chown.me/iota/twitter.png"&gt;&lt;/p&gt;
&lt;p&gt;Sur le premier tweet (le plus vieux), c'est une imprim'écran du code source de twitter.&lt;/p&gt;
&lt;h2&gt;Pourquoi ces tweets sont stupides&lt;/h2&gt;
&lt;p&gt;Déjà parce qu'ils ont changé le plan, donc ça montre que j'ai raison mais que non, fallait quand même qu'il fasse le beau sur twitter.&lt;/p&gt;
&lt;h3&gt;OpenBSD et javascript&lt;/h3&gt;
&lt;p&gt;Elle est amusante sa blague non ? Même venant de la part de quelqu'un qui gère &lt;a href="http://reflets.info/apple-brevete-le-kill-switch-dans-votre-poche/"&gt;un média qui dénonce la politique d'Apple&lt;/a&gt; et qui utilise un mac ? (tant qu'à parler des OS des uns, parlons des OS des autres)&lt;/p&gt;
&lt;h3&gt;Le CMS fait par un mec ayant travaillé chez Google&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Le développeur du CMS sur lequel est réalisé le site de PSES a même bossé chez Google&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ah donc ça veut dire quoi ? Il y a d'autres surprises sur le site ?&lt;/p&gt;
&lt;p&gt;J'sais pas, un des devs d'OpenSSH travaille chez google ça veut dire que je dois arrêter d'utiliser OpenSSH ? ....&lt;/p&gt;
&lt;h3&gt;On est sur twitter&lt;/h3&gt;
&lt;p&gt;Je prends la peine de détailler ce point, car c'est visiblement pas clair pour tout le monde (j'en ai encore discuté récemment avec Orphée).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(ps : on est sur twitter là)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ce propos est stupide. C'est moi qui ai choisi d'être sur twitter, je l'ai fait de mon plein gré en toute connaissance de cause, et c'est tout à fait mon droit. Par contre que lorsque je me renseigne sur un évènement avec un certain nombre de conf qui parlent à propos de la surveillance de masse, ça me fait doucement rire d'utiliser (sauf si tu as une panoplie de plugins sur ton browser qui va bloquer) un des partenaires clés de la NSA.&lt;/p&gt;
&lt;p&gt;Quitte à faire une analogie douteuse, si une fille couche avec plein de mecs, vous la forcez sous prétexte qu'elle couche avec des gens en pensant que ça rend légitime ce rapport ? Non, c'est un &lt;strong&gt;viol&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="./pages/blog.html"&gt;Pour moi&lt;/a&gt; c'est juste une question de respect que de ne pas utiliser des services qui vont espionner mes visiteurs, peu importe s'ils utilisent facebook ou google + ou autre, tout simplement ça ne me regarde pas.&lt;/p&gt;
&lt;h2&gt;Bref&lt;/h2&gt;
&lt;p&gt;Mais bon, je sais qu'on parle des gens qui ont dénoncé la surveillance tout en utilisant les serveurs mails de gmail et qui vont jusqu'à t'&lt;a href="http://cypherpunk.fr/la-nouvelle-boite-p0rn-de-reflets-info/"&gt;expliquer que ce n'est pas grave&lt;/a&gt;, mais en les changeant quand même ... (même si on peut me répondre que c'est toujours mieux que le parti pirate qui utilise toujours les serveurs de gmail).&lt;/p&gt;</content><category term="blog"></category></entry><entry><title>De la haute dispo sur ton lappy</title><link href="https://oldblog.chown.me/blog/de-la-haute-dispo-sur-mon-lappy.html" rel="alternate"></link><published>2014-06-07T10:20:00-04:00</published><updated>2014-06-07T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-06-07:/blog/de-la-haute-dispo-sur-mon-lappy.html</id><summary type="html">&lt;p&gt;Comment faire du failover sur son laptop entre les interfaces filaire et wifi&lt;/p&gt;</summary><content type="html">&lt;h2&gt;De la haute dispo ?&lt;/h2&gt;
&lt;p&gt;Le titre est un peu accrocheur et t'a peut-être fait remplir une case de ton &lt;a href="https://en.wikipedia.org/wiki/Buzzword_bingo"&gt;&lt;em&gt;bullshit bingo&lt;/em&gt;&lt;/a&gt;, certes.&lt;/p&gt;
&lt;p&gt;Mais du trunk failover est quand même de la "haute dispo".&lt;/p&gt;
&lt;h2&gt;Hein ? du trunk failover ?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;man 4 trunk&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;trunk&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; The trunk interface allows aggregation of multiple network interfaces as
 one virtual trunk interface.
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;failover&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; failover     Sends and receives traffic only through the master port.  If
              the master port becomes unavailable, the next active port is
              used.  The first interface added is the master port; any
              interfaces added after that are used as failover devices.
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;mmmh, j'ai pas tout compris&lt;/h3&gt;
&lt;p&gt;aka le relou qui ne va pas me laisser m'en tirer juste en copiant/collant des bouts de la man page&lt;/p&gt;
&lt;p&gt;Un trunk est une interface (virtuelle) qui va aggréger plusieurs interfaces. Un failover est un des modes de trunk.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; The driver currently supports the trunk protocols broadcast, failover,
 lacp, loadbalance, none, and roundrobin (the default).
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dans notre cas les autres modes ne sont pas utiles donc je n'en parlerai pas. Le failover, comme dit la man, consiste à lister des interfaces. Si lors de l'utilisation de &lt;em&gt;cette liste&lt;/em&gt; d'interfaces, celle actuelle n'est plus active, on essaie la suivante et ainsi de suite tant qu'il y en a. Cela permet de redonder une interface (mais c'est la solution du pauvre, car le riche redonde toute la machine avec &lt;a href="http://www.openbsd.org/faq/faq6.html#CARP"&gt;carp&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Tes explications ne sont que moyennement claires, concrètement ?&lt;/h3&gt;
&lt;p&gt;Concrètement, le but recheché c'est que si un cable ethernet est branché sur mon laptop celui-ci utilise l'interface filaire, sinon il utilise le wifi.&lt;/p&gt;
&lt;p&gt;Concrètement si je fais la commande &lt;code&gt;ifconfig trunk0&lt;/code&gt; elle donne entre autre&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ ifconfig trunk0 
trunk0: &lt;span class="nv"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8843&lt;/span&gt;&amp;lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&amp;gt; mtu &lt;span class="m"&gt;1500&lt;/span&gt;
        lladdr f0:de:f1:09:c7:94
        priority: &lt;span class="m"&gt;0&lt;/span&gt;
        trunk: trunkproto failover
                trunkport iwn0 
                trunkport em0 master,active
        groups: trunk egress
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ou dans l'autre cas&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ ifconfig trunk0
trunk0: &lt;span class="nv"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8843&lt;/span&gt;&amp;lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&amp;gt; mtu &lt;span class="m"&gt;1500&lt;/span&gt;
        lladdr f0:de:f1:09:c7:94
        priority: &lt;span class="m"&gt;0&lt;/span&gt;
        trunk: trunkproto failover
                trunkport iwn0 active
                trunkport em0 master
        groups: trunk egress
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;La seule différence entre les deux, c'est quelle interface qui est active, dans la première c'est &lt;code&gt;em0&lt;/code&gt; la filaire et dans la deuxième &lt;code&gt;iwn0&lt;/code&gt; mon wifi.&lt;/p&gt;
&lt;h2&gt;C'est bien rigolo mais si tu me racontais ta vie&lt;/h2&gt;
&lt;p&gt;Habituellement, en plus du clavier/souris et de l'écran de ma tour, j'ai mon laptop sur mon bureau (à défaut de faire du multi-écrans on fait du multi pc :p). Sauf que quand ma chérie est là faut que je vire le laptop parce que &lt;a href="https://fr.wiktionary.org/wiki/étudiant"&gt;ce bureau est accessoirement ma table à manger&lt;/a&gt;. Et donc rapidement les cables ethernet sont ingérables et donc je passe en wifi. Sauf que c'est chiant, entre ma route ipv6 qui expire rapidement (tu veux les détails ? t'as qu'à lire misc@), les priorités des routes qui font que c'est plus simple de redémarrer le laptop pour tout nettoyer plutôt que de se prendre la tête avec les différentes commandes et le débit asthmatique en wifi.&lt;/p&gt;
&lt;p&gt;Comme dit dans &lt;a href="./du-wifi-sur-l-alix.html"&gt;mon article à propos du wifi sur mon routeur&lt;/a&gt;, j'utilise une clé USB wifi et dont le débit est limité à 100ko/s en down (en up c'est l'inverse) et dont je n'ai jamais trouvé la cause.&lt;/p&gt;
&lt;p&gt;J'ai vu récemment que dans la &lt;a href="http://www.openbsd.org/faq/index.html"&gt;FAQ d'OpenBSD&lt;/a&gt; ils expliquent comment faire un trunk failover entre les interfaces filaire et wifi d'un laptop.&lt;/p&gt;
&lt;p&gt;Sauf que, contrairement à ce que font les modem-routeurs des FAIs commerciaux, mon réseau filaire n'est pas le même que le réseau wifi. Non pas pour des raisons de sécurités (les règles pf sont quasi identiques pour les deux interfaces) juste que je suis pas chaud pour les bridger. Et donc de ce fait, je ne pouvais pas me faire un trunk puisqu'un trunk se fait forcément avec des interfaces présentes sur un même réseau.&lt;/p&gt;
&lt;p&gt;Je me suis donc acheté une borne wifi avec un switch intégré.&lt;/p&gt;
&lt;p&gt;Sur les conseils de zorun, je me suis acheté un TP-Link TL-WR841N (pour moins de 20€) afin de remplacer ma NIC USB. Après m'être lancé sans réfléchir et avoir tenté de désactiver le routage, le nat et les autres cochonneries dont je n'ai pas besoin (je préfère quand même gérer tout ça avec pf, étonnant hein) je me suis dit "et si je n'utilisais pas le port wan du machin, et seulement ceux du switchs". Bingo. Ensuite j'ai juste dû configurer les options du wifi (clé wep, filtrage mac etc ... (je déconne hein)). &lt;/p&gt;
&lt;h2&gt;Bon et sinon ça se configure comment ?&lt;/h2&gt;
&lt;p&gt;Je vais me contenter de copier coller les fichiers de conf de la FAQ :&lt;/p&gt;
&lt;h3&gt;L'interface filaire&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# cat /etc/hostname.em0 # l&amp;#39;interface filaire
up
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Celle du wifi&lt;/h3&gt;
&lt;p&gt;On lui indique le nom du wifi et le mot de passe.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# cat /etc/hostname.iwn0
nwid puffynet
wpakey mysecretkey
up
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;On mélange le tout&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# cat /etc/hostname.trunk0
trunkproto failover trunkport em0
trunkport iwn0
dhcp
rtsol # on est en 2014 quand même
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On a mis en premier l'interface filaire parce que c'est elle la master.&lt;/p&gt;
&lt;h2&gt;Et dans les faits ?&lt;/h2&gt;
&lt;p&gt;Bah comme d'hab sur OpenBSD, &lt;em&gt;it just works&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Si j'en crois les secondes qui défilent dans mon irssi qui tourne dans mon tmux, lors d'un (dé)branchement du cable ethernet, y a un petit flop de 3-4 secondes (sachant que ça doit être probablement la reconnexion ssh) je trouve ça &lt;strong&gt;plus&lt;/strong&gt; que &lt;strong&gt;bien&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;C'est ça ton article ? Des copiés-collés de la FAQ et des man ???&lt;/h2&gt;
&lt;p&gt;J'en conviens, cet article n'est pas folichon niveau originalité du contenu, mais c'est juste un rappel pour ceux qui croient qu'OpenBSD est compliqué et pas à la portée des débutants.&lt;/p&gt;
&lt;p&gt;Je ne parle pas du fait que c'est génial, car tout le monde sait qu'OpenBSD est génial, non ?&lt;/p&gt;</content><category term="OpenBSD"></category><category term="pf"></category><category term="ssh"></category></entry><entry><title>Réponse à la "lettre aux barbus"</title><link href="https://oldblog.chown.me/blog/reponse-a-la-lettre-aux-barbus.html" rel="alternate"></link><published>2014-06-07T10:20:00-04:00</published><updated>2014-06-07T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-06-07:/blog/reponse-a-la-lettre-aux-barbus.html</id><summary type="html">&lt;p&gt;Article pour répondre à la lettre aux barbus de Laurent Chemla&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Hein ? quelle lettre ?&lt;/h2&gt;
&lt;p&gt;Il y a quelques jours, reflets.info a publié un article de &lt;a href="https://twitter.com/laurentchemla"&gt;Laurent Chemla&lt;/a&gt; qui s'intitule &lt;a href="http://reflets.info/lettre-aux-barbus/"&gt;Lettre aux barbus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cet article me pose un certain nombre de problèmes et je préfère éviter de commenter sur le site, mes commentaires que j'y ai fait par le passé ne constituent pas une expérience que j'estime concluante.&lt;/p&gt;
&lt;h2&gt;So what ?&lt;/h2&gt;
&lt;p&gt;J'ai relevé divers points avec lesquels je ne suis pas d'accord, ils seront une mise en bouche pour le point important abordé ensuite.&lt;/p&gt;
&lt;h3&gt;Le trafic Tor&lt;/h3&gt;
&lt;p&gt;Je cite :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le trafic de TOR a augmenté considérablement juste après les révélations de Snowden, mais décroit depuis pour revenir à un niveau d’a peine deux fois plus qu’avant. Même à son maximum (6 millions), le nombre d’utilisateurs de TOR restait négligeable par rapport aux utilisateurs d’Internet (plusieurs milliards).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alors là j'ai bien ri. J'adore quand on parle de quelques choses sans s'être renseigné préalablement dessus.&lt;/p&gt;
&lt;p&gt;On parle de quoi exactement ? &lt;a href="https://metrics.torproject.org/userstats-relay-country.png?start=2013-03-09&amp;amp;events=off&amp;amp;end=2014-06-07&amp;amp;country=all"&gt;D'un pic de connexions Tor&lt;/a&gt;. Parler de pic d'utilisateurs est pas vraiment précis car les mesures consistent à compter le nombre de connexions et à diviser par le nombre moyen de connexions qu'un utilisateur de Tor génère. Cela permet de donner des chiffres mais il faut bien comprendre que c'est un indice, le nombre n'est pas précis (et c'est tant mieux).&lt;/p&gt;
&lt;h4&gt;Bah et alors ? Y a bien un pic non ?&lt;/h4&gt;
&lt;p&gt;Certes, mais de dire que ce sont des utilisateurs &lt;em&gt;humains&lt;/em&gt; qui sont responsables est faux tout comme dire que ce sont les révélations de Snowden la cause. Pourquoi ? Regardez &lt;a href="https://metrics.torproject.org/users.html?graph=userstats-relay-country&amp;amp;start=2013-07-09&amp;amp;end=2013-09-07&amp;amp;country=all&amp;amp;events=off#userstats-relay-country"&gt;le pic précisément&lt;/a&gt;. Le pic a commencé à mi-aout (&lt;a href="https://lists.torproject.org/pipermail/tor-talk/2013-August/029582.html"&gt;un des devs parle du 19 août&lt;/a&gt;). Les révélations de Snowden le 5 (?) Juin. Donc deux mois après, sursaut des gens paf, ils se mettent à utiliser Tor. Tellement crédible. &lt;/p&gt;
&lt;p&gt;Pour plus d'info, je vous invite à lire &lt;a href="https://blog.torproject.org/blog/how-to-handle-millions-new-tor-clients"&gt;l'article du même dev Tor&lt;/a&gt; et à regarder autour du &lt;a href="http://blogs.technet.com/b/mmpc/archive/2014/01/09/tackling-the-sefnit-botnet-tor-hazard.aspx"&gt;botnet Sefnit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour info, &lt;a href="https://nos-oignons.net/Donnez/index.fr.html"&gt;ça m'aurait vraiment fait plaisir&lt;/a&gt; de voir que les gens se réveillent et se mettent à utiliser Tor, mais juste ce n'est pas ce qu'il s'est passé.&lt;/p&gt;
&lt;p&gt;J'aborde longuement ce point, mais c'est aussi pour en parler une bonne fois pour toute.&lt;/p&gt;
&lt;h3&gt;Les nouveaux outils qui ont vu le jour et qui sont des succès&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;De nombreux projets d’outils de protection de la vie privée ont vu le jour. Rien que dans le domaine de la messagerie, Mailpile, BitMessage, la Dark Mail Alliance… La plupart sont des succès, mais restent largement réservés à un public très restreint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="lolwut" src="https://poolp.org/~vigdis/lolwut.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Alors on va les prendre dans l'ordre.&lt;/p&gt;
&lt;h4&gt;Mailpile&lt;/h4&gt;
&lt;p&gt;Ouais, ils ont sorti une alpha, que ... personne (ouais à 15 personnes près) n'a installé ... succès ?&lt;/p&gt;
&lt;h4&gt;BitMessage&lt;/h4&gt;
&lt;p&gt;Quand c'est sorti j'en ai entendu beaucoup parlé, depuis euh ... plus rien ... succès ?&lt;/p&gt;
&lt;p&gt;Je sais pas, ptet que tout le monde l'utilise et que je suis à côté de la plaque, juste je n'en ai pas l'impression.&lt;/p&gt;
&lt;h4&gt;Dark Mail Alliance&lt;/h4&gt;
&lt;p&gt;Marrant, j'avais vu le truc à la sortie et j'avais complètement oublié ça (à tel point qu'en lisant l'article je ne savais même plus ce que c'était). Là en regardant un peu j'ai l'impression que c'est autant un succès que la FreedomBox (ouais je voulais publier l'article hier).&lt;/p&gt;
&lt;p&gt;Bref pour reprendre la phrase de Laurent Chemla&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La plupart sont des succès, mais restent largement réservés à un public très restreint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;je ne sais pas, j'ai compris son article comme un appel à faire en sorte que les gens, tous, utilisent des logiciels qui protègent leurs vies privées, par conséquent je ne vois pas comment ça peut-être un succès alors que seul un public restreint l'utilise ?&lt;/p&gt;
&lt;h3&gt;Security ? Not my problem&lt;/h3&gt;
&lt;p&gt;(Les geeks auront reconnus l'accronyme trollesque de &lt;a href="https://en.wikipedia.org/wiki/Snmp"&gt;SNMP&lt;/a&gt;.)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nous avons laissé faire. Trop longtemps. Nous avons négligé la sécurité, remis
« ça » à plus tard, oublié de nous en occuper.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ça me fait rire cette phrase. Pendant des années les gens se sont moqués &lt;a href="http://www.openbsd.org"&gt;des paranos&lt;/a&gt; mais là depuis Snowden les "bah ils avaient raison en fait" me procurent un mélange de joie et de tristesse, tout dépend à qui je pense.&lt;/p&gt;
&lt;h2&gt;Le vrai problème&lt;/h2&gt;
&lt;p&gt;J'arrive au point qui me gène vraiment dans l'article.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lettre aux barbus&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nous avons laissé faire. Trop longtemps. Nous avons négligé la sécurité, remis « ça » à plus tard, oublié de nous en occuper.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nous ne sommes pas les seuls: chacun, à son niveau, partout dans nos sociétés, nous sommes responsables d’avoir laissé faire, d’avoir accepté la surveillance. Pour quelques euros de réduction mensuelle, pour une sécurité théorique, par paresse ou parce que « ça ne nous concerne pas », nous avons accepté les cartes de réduction nominatives, les moyens de paiement électroniques, les caméras et le reste.&lt;/p&gt;
&lt;p&gt;Revenir à une société un peu moins folle ne se fera pas en un jour. Il y faudra du temps, de l’énergie, et de l’espoir. De la pédagogie, des scandales, et quelques autres héros de la trempe de Snowden. Ce sera long, difficile et c’est un combat presque perdu d’avance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;:(&lt;/p&gt;
&lt;p&gt;Le fait d'appeler son article "Lettre aux barbus" fait qu'à chaque fois les "nous", les "on" signifient "nous les barbus".&lt;/p&gt;
&lt;p&gt;Or c'est tout le problème. Les barbus, les geeks (peu importe comment on les appelle) ne règleront pas la situation.&lt;/p&gt;
&lt;p&gt;C'est d'ailleurs la conclusion de l'article (qui est &amp;lt;3) de Quinn Norton (&lt;a href="https://medium.com/message/81e5f33a24e1"&gt;VO&lt;/a&gt; et &lt;a href="http://www.framablog.org/index.php/post/plus-rien-ne-marche-que-faire"&gt;VF&lt;/a&gt;) :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mais le plus gros de tous les problèmes culturels repose toujours sur les épaules du seul groupe que je n’aie pas encore pris à partie – les gens normaux, qui vivent leurs vies dans cette situation démentielle. Le problème des gens normaux avec la technologie est le même qu’avec la politique, ou la société en général. Les gens pensent être isolés et sans pouvoir, mais la seule chose qui maintient les gens seuls et sans pouvoir est cette même croyance. Ceux qui travaillent ensemble ont un énorme et terrible pouvoir. Il existe certainement une limite à ce que peut faire un mouvement organisé de personnes qui partagent un rêve commun, mais nous ne l’avons pas encore trouvée.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour commencer, le terme "barbus" donc les filles font quoi ? elles restent dans la cuisine ? C'est ça ? .........&lt;/p&gt;
&lt;p&gt;Il faut vraiment que les gens arrêtent de se reposer sur d'autres personnes et se prennent en main. &lt;a href="http://blog.spyou.org/wordpress-mu/2014/04/08/pffff-cest-complique/"&gt;Surtout pour la technologie&lt;/a&gt; (lisez cet article, vraiment).&lt;/p&gt;
&lt;p&gt;Il suffit d'être membre d'une asso pour se rendre compte en deux minutes que si tu veux que quelchose soit fait, tu as plus vite fait de le faire toi-même et ça se passera mieux ainsi pour tout le monde.&lt;/p&gt;
&lt;p&gt;Juste un exemple, ma copine ne se doutait pas qu'utiliser des services gérés (ex: gmail) par des tiers pouvait poser des problèmes de confidentialité, qu'elle m'envoie des &lt;em&gt;photos&lt;/em&gt; sur gmail ne lui posait aucun problème. Moi ça me posait problème.&lt;/p&gt;
&lt;p&gt;Bah au lieu de me lamenter, je lui ai expliqué, j'ai pris son pc, j'ai installé les logiciels qu'il faut et je les ai configuré pour qu'on utilise &lt;a href="./tag/auto-hebergement.html"&gt;les services fournis par mon serveur&lt;/a&gt; et que ça les chiffre par défaut et le tout de manière transparente pour elle. Maintenant à la place d'ouvrir son chrome pourri puis d'aller sur gmail, elle ouvre Claws-mail qui est tout configuré bien comme il faut. Non je n'ai pas attendu que quelqu'un propose un super truc trop bien et qu'elle l'installe &lt;em&gt;(rêve toujours pour ça)&lt;/em&gt;. Juste ma copine a d'autres passions que l'informatique et qu'elle n'aime pas ça alors je fais avec. (Non je ne suis pas un héros, je me prends juste en main.)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fr.wiktionary.org/wiki/imberbe"&gt;Et tout ça, alors que je ne me considère même pas comme barbu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bref, croire que les geeks sont superhéros et qu'ils vont vous sauver est la pire erreur que vous puissiez faire, sans vous, rien ne se passera.&lt;/p&gt;</content><category term="Tor"></category></entry><entry><title>Utiliser OpenBSD sur un laptop</title><link href="https://oldblog.chown.me/blog/utiliser-openbsd-sur-un-laptop.html" rel="alternate"></link><published>2014-04-06T10:20:00-04:00</published><updated>2014-04-06T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-04-06:/blog/utiliser-openbsd-sur-un-laptop.html</id><summary type="html">&lt;p&gt;Les différentes étapes pour utiliser OpenBSD sur un laptop&lt;/p&gt;</summary><content type="html">&lt;h2&gt;De la doc, encore de la doc \o/&lt;/h2&gt;
&lt;p&gt;La raison de cet article est que j'ai installé OpenBSD sur un laptop
récemment et que ça m'aurait été pratique d'avoir cet article pour
être sûr de ne rien oublier. Au moins pour la prochaine fois, j'aurais
déjà ça.&lt;/p&gt;
&lt;p&gt;Je fais certains choix car je pense que ce sont les meilleurs, libre à
vous d'en faire d'autres (et
&lt;a href="./pages/Contact.html"&gt;je suis ouvert à la discussion&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Ce que je veux&lt;/h2&gt;
&lt;p&gt;Le but est d'arriver à un laptop avec OpenBSD avec les logiciels
courants (web, mail, office etc), avec un système facile à maintenir
et avec du chiffrement de disque.&lt;/p&gt;
&lt;h2&gt;Pré-installation d'OpenBSD&lt;/h2&gt;
&lt;h3&gt;Le media d'installation&lt;/h3&gt;
&lt;p&gt;Soit on grave un CD, soit on peut
&lt;a href="http://undeadly.org/cgi?action=article&amp;amp;sid=20140228231258"&gt;utiliser une clé USB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite on boot sur le media, on arrive rapidement au choix, on
choisit de prendre un shell.&lt;/p&gt;
&lt;h3&gt;Le chiffrement de disque&lt;/h3&gt;
&lt;p&gt;Le swap sur OpenBSD est chiffré par défaut. J'ai pris le parti de le
rechiffrer. Principalement parce que le moins je touche à
disklabel(8), le mieux je me porte et de toute façon mon CPU a du
&lt;em&gt;AES-NI&lt;/em&gt; d'Intel donc ça ne va ajouter que très peu de charge en
plus.&lt;/p&gt;
&lt;p&gt;On commence par trouver le nom du disque, puis on crée la MBR.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;dmesg | grep wd
dmesg | grep sd
fdisk -i sd0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On partitionne le disque (je pars du principe que le disque est sd0)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;disklabel -E sd0
a # on crée un nouvelle partition
p # on prend la lettre p
# on laisse l&amp;#39;offset par défaut
# on prend tout le disque
RAID
w
q
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On chiffre alors le disque dur avec&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;bioctl -c C -l sd0p softraid0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Il va demander d'entrer une passphrase, on en choisit une de courte et
qu'on utilise partout afin d'être gentil avec
&lt;a href="https://fr.wikipedia.org/wiki/DCRI"&gt;les gens qui ne veulent que &lt;strong&gt;notre&lt;/strong&gt; bien et &lt;strong&gt;notre&lt;/strong&gt; sécurité&lt;/a&gt;. Ou
pas.&lt;/p&gt;
&lt;p&gt;Le système va nous dire sur quoi il a attaché le nouveau volume. Je
vais supposer que c'est &lt;em&gt;sd1&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Voilà, le disque est chiffré, on tape &lt;code&gt;exit&lt;/code&gt; et on tape i pour
installer.&lt;/p&gt;
&lt;h2&gt;Installation d'OpenBSD&lt;/h2&gt;
&lt;p&gt;L'installation se fait comme d'habitude (facilement quoi), faut juste
choisir comme disque &lt;em&gt;sd1&lt;/em&gt; (ou celui sur lequel softraid a attaché le
nouveau volume).&lt;/p&gt;
&lt;p&gt;Puis on redémarre.&lt;/p&gt;
&lt;h2&gt;Installation des paquets utiles.&lt;/h2&gt;
&lt;p&gt;J'utilise &lt;a href="//iota.chown.me/capture-ardoine.png"&gt;XFCE 4&lt;/a&gt; sur toutes mes machines.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pkg_add xfce xfce-extras
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;J'utilise un ensemble de logiciels qui sont plus ou moins nécessaires.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pkg_add claws-mail emacs evince firefox keepassx libreoffice mplayer mumble nmap pidgin pidgin-otr vim vlc youtube-dl
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Bien sûr cette liste n'est pas exhaustive mais c'est un bon début.&lt;/p&gt;
&lt;h2&gt;Dotfiles&lt;/h2&gt;
&lt;p&gt;J'utilise &lt;a href="https://chown.me/iota/util/"&gt;plusieurs dotfiles&lt;/a&gt; pour améliorer
l'ergonomie du système. Rien de bien magique, mais ça me permet de
bien me simplifier la vie.&lt;/p&gt;
&lt;p&gt;Il y a certainement des choses qui peuvent être améliorables,
n'hésitez pas à
&lt;a href="./pages/Contact.html"&gt;me faire part de vos remarques&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il y a vraiment plein de choses dedans, comme des fonctions qui me
permettent d'installer le snapshot suivant sans retenir l'enchainement
des commandes qu'il faudrait taper. vie_facilitee++&lt;/p&gt;
&lt;h2&gt;Les petites modifs ici et là&lt;/h2&gt;
&lt;p&gt;Il y a pas mal de choses à changer ici et là&lt;/p&gt;
&lt;h3&gt;machdep.allowaperture&lt;/h3&gt;
&lt;p&gt;Avant, si on voulait utiliser X sur OpenBSD, il fallait mettre
machdep.allowaperture à 2 (sauf quand 1 suffisait). Cette distinction
est expliquée par Theo dans
&lt;a href="http://marc.info/?l=openbsd-misc&amp;amp;m=114233317926101"&gt;ce mail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sauf que grâce au travail des devs
&lt;a href="http://undeadly.org/cgi?action=article&amp;amp;sid=20140223112426"&gt;c'est plus nécessaire&lt;/a&gt;
\o/&lt;/p&gt;
&lt;p&gt;On peut donc repasser la valeur à 0 et ainsi on ne fait pas tourner X
en root.&lt;/p&gt;
&lt;h3&gt;softdep, noatime&lt;/h3&gt;
&lt;p&gt;Ce sont deux options à rajouter dans &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La première sert à améliorer les perfs du stockages (HDD, SSD, CF etc).&lt;/p&gt;
&lt;p&gt;La deuxième est importante quand on utilise un SSD (ou une carte CF)
afin de ne pas diminuer la durée de vie avec des écritures inutiles.&lt;/p&gt;
&lt;p&gt;Pour plus d'info,
&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=mount&amp;amp;apropos=0&amp;amp;sektion=0&amp;amp;manpath=OpenBSD+Current&amp;amp;arch=i386&amp;amp;format=html"&gt;man mount(8)&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;apmd&lt;/h3&gt;
&lt;p&gt;On peut utiliser apmd pour réduire la chaleur, le bruit et la conso
électrique :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;echo &amp;quot;apmd_flags=\&amp;quot;-C\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/rc.conf.local
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;verrouiller l'écran lors de la mise en veille&lt;/h3&gt;
&lt;p&gt;Ce qu'il faut avoir :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;canouan@ardoine:/etc/apm$ ls -l
total 4
-rwxr--r--  1 canouan  canouan  86 Mar 26 07:44 suspend*
canouan@ardoine:/etc/apm$ cat suspend
#!/bin/sh
sudo -u canouan env DISPLAY=:0 XAUTHORITY=/home/canouan/.Xauthority xlock &amp;amp;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;et il faut que &lt;code&gt;machdep.lidsuspend&lt;/code&gt; soit à 1 pour qu'en fermant le
laptop, celui-ci se mette en veille.&lt;/p&gt;
&lt;h2&gt;Le reste&lt;/h2&gt;
&lt;p&gt;Il reste plein de choses à faire (créer une nouvelle clé ssh,
récupérer l'ancienne clé gpg, configurer les logiciels installés etc)
mais ce n'est pas spécifique à OpenBSD donc je ne vais pas en parler.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="softraid"></category></entry><entry><title>Avoir de l'IPv6 via un tunnel VPN</title><link href="https://oldblog.chown.me/blog/avoir-de-l-ipv6-via-un-tunnel-vpn.html" rel="alternate"></link><published>2014-03-28T10:20:00-04:00</published><updated>2014-03-28T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-03-28:/blog/avoir-de-l-ipv6-via-un-tunnel-vpn.html</id><summary type="html">&lt;p&gt;J'ai depuis quelques temps de l'IPv6 chez moi via un tunnel vpn, voici donc l'article récapitulatif.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Note avant propos&lt;/h2&gt;
&lt;p&gt;J'ai pour habitude d'écrire un article sur un setup une fois qu'il est propre. Ce n'est pas le cas de celui-ci (j'ai encore plusieurs choses que je voudrais résoudre). Mais &lt;a href="https://twitter.com/tristanpilat"&gt;Tristan&lt;/a&gt; m'a harcelé (:p) pour que je publie cet article donc le voilà.&lt;/p&gt;
&lt;p&gt;Cela faisait un moment que je voulais avoir de l'IPv6, &lt;a href="http://imil.net/wp/2013/01/05/ipv6-je-taime-mais-tout-le-monde-sen-fout/"&gt;certains s'en foutent&lt;/a&gt;, &lt;a href="https://www.bidon.ca/files/tmp/WorldIPv6Congress-IPv6_LH_v2.pdf"&gt;d'autres non&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Comment&lt;/h2&gt;
&lt;h3&gt;Via un tunnel ?&lt;/h3&gt;
&lt;p&gt;Oui je suis chez OVH, ils m'en fournissent, mais depuis que j'ai passé ma 'box' en mode bridge (puisque &lt;a href="./alice-in-wonderlan.html"&gt;je route avec l'Alix&lt;/a&gt;) je n'ai jamais réussi à faire marcher l'IPv6 d'OVH dessus. J'ai pas trop longtemps essayé certes.&lt;/p&gt;
&lt;h3&gt;Ah donc tu as pris ton tunnel chez HE&lt;/h3&gt;
&lt;p&gt;Non (ni chez sixxs), principalement parce que je n'ai pas réussi à le faire marcher non plus, sans doute une raison conne, mais idem pas motivé à chercher d'avantage.&lt;/p&gt;
&lt;h3&gt;Chez qui alors ??&lt;/h3&gt;
&lt;p&gt;Chez FDN. Depuis un petit moment (même s'ils n'en font pas la pub) &lt;a href="http://www.fdn.fr/-VPN-.html"&gt;ils proposent un service de VPN&lt;/a&gt;. Le service n'est pas là juste pour de l'IPv6, ils fournissent aussi une IPv4. L'avantage comme c'est de l'openvpn c'est que la connexion est chiffrée jusqu'à eux, donc par exemple si OVH écoutait mon trafic, ils ne pourraient voir ce que je fais. (c'est pas un gros avantage vu la quantité d'IPv6 qui circule chez moi).&lt;/p&gt;
&lt;h2&gt;Comment on fait alors ?&lt;/h2&gt;
&lt;h3&gt;Sur quelle machine ?&lt;/h3&gt;
&lt;p&gt;Étant donné que je veux pouvoir faire profiter du tunnel à l'ensemble de mes machines, tout va se faire sur mon routeur, ma p'tite Alice.&lt;/p&gt;
&lt;h3&gt;On monte le VPN&lt;/h3&gt;
&lt;p&gt;FDN donne un fichier de configuration pour le client d'OpenVPN. On commence donc par installer le client avec un habituel &lt;code&gt;pkg_add openvpn&lt;/code&gt;. Ensuite on lit les commentaires dans le fichier de configuration, on configure ce dont on a besoin, c'est vraiment pas compliqué et si jamais vous avez un doute vous pouvez demander sur leur chan (#fdn, geeknode), vous devriez avoir une réponse rapidement.&lt;/p&gt;
&lt;p&gt;Une fois qu'il est installé et que le fichier de conf est réglé aux petits oignons, on lance openvpn avec la commande&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo openvpn /root/ovpn.fdn
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Côté réseau&lt;/h3&gt;
&lt;h4&gt;On calcule son bloc&lt;/h4&gt;
&lt;p&gt;La configuration n'est pas encore automatique pour l'IPv6, il va donc falloir le monter à la main. Il faut aussi calculer son bloc IPv6 (un /48) en prenant le dernier chiffre de son adresse IPv4 et en le passant en hexadécimal.&lt;/p&gt;
&lt;p&gt;Par exemple, mon IPv4 est &lt;em&gt;80.67.179.34&lt;/em&gt;, 34 = 0x22, sachant qu'on rajoute avant &lt;em&gt;2001:910:13&lt;/em&gt;, mon range va être 2001:910:1322::/48.&lt;/p&gt;
&lt;h4&gt;On découpe son bloc&lt;/h4&gt;
&lt;p&gt;Comme on a plusieurs interfaces, à moins de bridger ça comme un goret, on va avoir plusieurs réseaux. J'ai par exemple 3 réseaux chez moi&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un tout petit, l'interface OpenVPN (parait qu'on peut faire sans, mais en tout cas avec, ça marche)&lt;/li&gt;
&lt;li&gt;mon lan&lt;/li&gt;
&lt;li&gt;mon wifi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je ne me suis pas pris la tête, 2001:910:1322::1 sera l'IPv6 de l'interface du VPN, 2001:910:1322:1::/64 pour mon lan et 2001:910:1322:2::/64 pour mon wifi.&lt;/p&gt;
&lt;h4&gt;On s'occupe de l'IPv6 sur le routeur&lt;/h4&gt;
&lt;p&gt;On ajoute l'adresse IPv6 sur l'interface puis on ajoute la route par défaut :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ifconfig tun0 inet6 2001:910:1322::1/128
route add -inet6 -iface default 2001:910:1322::1
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;A partir de ce moment là, on doit pouvoir ping6 -I tun0 www.kame.net.&lt;/p&gt;
&lt;h4&gt;Cool, mais moi je veux de l'IPv6 sur mon lan&lt;/h4&gt;
&lt;h5&gt;Côté serveur&lt;/h5&gt;
&lt;p&gt;Comme il n'y a pas de &lt;a href="http://www.openbsdfoundation.org/gsoc2014.html#dhcp6-server"&gt;dhcp6d dans base&lt;/a&gt; (&lt;a href="http://www.openbsdfoundation.org/gsoc2014.html#dhcp6-client"&gt;ni de client t'façon&lt;/a&gt;) et que l'autoconf me va bien, je me suis contenté de l'autoconf. Bref, j'accède à mon résolveur (qui est dans mon lan) en IPv4, le lan full-IPv6, c'est pas pour tout de suite mais tant pis.&lt;/p&gt;
&lt;p&gt;(j'explique que pour le lan, pour le wifi, c'est pareil faut juste changer les variables)&lt;/p&gt;
&lt;p&gt;On ajoute une IPv6 sur l'interface interne&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ifconfig vr2 inet6 2001:910:1322:1::1/64
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite, on lance &lt;em&gt;rtadvd&lt;/em&gt; qui va s'occuper de faire les &lt;a href="https://en.wikipedia.org/wiki/ICMP_Router_Discovery_Protocol"&gt;router advertisements&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;rtadvd vr2 # vr2 aka $int_if
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On laisse passer avec pf, le trafic icmp6&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pass on $int_if proto icmp6
&lt;/pre&gt;&lt;/div&gt;


&lt;h5&gt;Côté client&lt;/h5&gt;
&lt;h6&gt;IP dynamique&lt;/h6&gt;
&lt;p&gt;Il n'y a plus qu'à lancer &lt;code&gt;rtsol $if&lt;/code&gt; sur les différents PCs dans le lan et l'ajouter dans le &lt;code&gt;/etc/hostname.$if&lt;/code&gt;. Il faut des options sysctl particulières pour que ça marche :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; rtsold should be used on IPv6 hosts (non-router nodes) only.  The
 net.inet6.ip6.forwarding sysctl(8) should be set to zero and the
 net.inet6.ip6.accept_rtadv and net.inet6.icmp6.rediraccept sysctl(8)
 should be set to a non-zero value (see also the -F option below).
&lt;/pre&gt;&lt;/div&gt;


&lt;h6&gt;IP fixe&lt;/h6&gt;
&lt;p&gt;Pour les hôtes comme des serveurs, on préfèrera donner des adresses IPv6 fixes puis ajouter la route.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ifconfig jme0 inet6 2001:910:1322:1:dead:beef:cafe:1
route add -inet6  default 2001:910:1322:1::1
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite on ajoute ces infos à &lt;code&gt;/etc/hostname.$if&lt;/code&gt; et à &lt;code&gt;/etc/mygate&lt;/code&gt; pour que ce soit effectif lors du prochain reboot.&lt;/p&gt;
&lt;p&gt;Enfin, sur OpenBSD, la priorité par défaut est donné à l'IPv4 (&lt;a href="http://marc.info/?l=openbsd-misc&amp;amp;m=139275883700662&amp;amp;w=2"&gt;pour ceux qui se demandent pourquoi&lt;/a&gt;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; family      Specify which type of Internet protocol family to prefer, if
             a host is reachable using different address families.  By
             default IPv4 addresses are queried first, and then IPv6
             addresses.  The syntax is:

                   family family [family]

             A maximum of two families can be specified, where family can
             be any of:

                   inet4     IPv4 queries.
                   inet6     IPv6 queries.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On ajoute donc, soit directement dans /etc/resolv.conf pour les machines qui ne feront pas de requêtes dhcp, sinon dans /etc/resolv.conf.tail&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;family inet6 inet4
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Les PTRs&lt;/h2&gt;
&lt;p&gt;Autant faire les choses proprement, et mettons des reverses à nos IPv6, d'autant plus que certains (comme gmail) classent en spam ceux qui n'en ont pas. Deux possibilités, soit on demande à fdn de les gérer pour nous, soit on demande la main dessus. J'ai donc mailé adminsys@ et en même pas une demi heure, j'avais la gestion de ces derniers.&lt;/p&gt;
&lt;p&gt;On ajoute dans &lt;code&gt;/var/named/etc/named.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;zone &amp;quot;2.2.3.1.0.1.9.0.1.0.0.2.ip6.arpa&amp;quot; {
    type master;
    file &amp;quot;master/db.rev.vpn6&amp;quot;;
    allow-transfer {adresse.ip.du.ns2;};
    allow-query{any;};
    notify yes;
};
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;puis dans le fichier &lt;code&gt;/var/named/master/db.rev.vpn6&lt;/code&gt; on ajoute &lt;a href="https://chown.me/iota/db.rev.vpn6.txt"&gt;la zone&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;L'état actuel&lt;/h2&gt;
&lt;p&gt;Mon tunnel IPv6 est un peu à l'arrache sur mon routeur, lorsque je vais rebooter (sans doute pour passer à OpenBSD 5.5) le tunnel ne se remontera plus, mais je préfère ça, qu'une conf à la con qui bloque le boot (coucou Francinet :D). J'aurais pu redémarrer mon alix pour voir, &lt;a href="https://xkcd.com/705/"&gt;mais non&lt;/a&gt;.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="pf"></category><category term="Alix"></category></entry><entry><title>Pika, Pika PKI</title><link href="https://oldblog.chown.me/blog/pika-pika-pki.html" rel="alternate"></link><published>2014-03-23T10:20:00-04:00</published><updated>2014-03-23T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-03-23:/blog/pika-pika-pki.html</id><summary type="html">&lt;p&gt;Court article à propos du des certificats de mon infra&lt;/p&gt;</summary><content type="html">&lt;p&gt;(désolé pour ce titre stupide, ça me faisait rire et j'ai pas trouvé
mieux)&lt;/p&gt;
&lt;h2&gt;Ma grande passion pour les ACs&lt;/h2&gt;
&lt;p&gt;Je vous avais déjà expliqué
&lt;a href="./https-sslh-et-bypass-de-proxy.html"&gt;ce que je pense&lt;/a&gt; des
&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=647959"&gt;Autorités de Certification&lt;/a&gt;
mais j'en avais marre de gérer des problèmes de certs.&lt;/p&gt;
&lt;p&gt;J'ai donc crée mon AC \o/&lt;/p&gt;
&lt;h2&gt;Création d'une AC&lt;/h2&gt;
&lt;p&gt;J'ai suivi grosso modo ce qui est écrit là :
&lt;a href="http://pki-tutorial.readthedocs.org/en/latest/simple/index.html"&gt;http://pki-tutorial.readthedocs.org/en/latest/simple/index.html&lt;/a&gt;. Je
ne vais pas en parler plus que ça comme ça se fait bien.&lt;/p&gt;
&lt;h2&gt;Mon AC, mes fingerprints&lt;/h2&gt;
&lt;p&gt;Vous pouvez installer mon AC afin de pouvoir utiliser mes services
avec
TLS. &lt;a href="https://chown.me/iota/root-ca.crt"&gt;Elle est disponible en téléchargement&lt;/a&gt;
(ayez le bon goût de vérifier les fingerprints).&lt;/p&gt;
&lt;p&gt;J'ai donc crée deux certificats, un pour chown.me et un avec un
wildcard.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chown.me/iota/fingerprint.asc.txt"&gt;J'ai signé avec ma clé OpenPGP les empreintes&lt;/a&gt;
pour que (si vous faites confiance à ma clé) vous puissiez valider les
empreintes.&lt;/p&gt;</content><category term="tls"></category><category term="https"></category><category term="blog"></category></entry><entry><title>Mes débuts avec Unix et l'auto-hébergement</title><link href="https://oldblog.chown.me/blog/mes-debuts-avec-unix-et-l-auto-hebergement.html" rel="alternate"></link><published>2014-03-15T10:20:00-04:00</published><updated>2014-03-15T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-03-15:/blog/mes-debuts-avec-unix-et-l-auto-hebergement.html</id><summary type="html">&lt;p&gt;Premier article de la rubrique mylife. Petite histoire sur comment je me suis mis à aimer Unix et l'adminsys&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Avant-propos&lt;/h2&gt;
&lt;p&gt;Pour faire une petite introspection, je retrace par écrit ma
découverte d'Unix et de l'adminsys et ma progression, alors autant le
publier sur mon blog. Cela a aussi pour but de convaincre les gens qui
n'ont jamais touché à un Unix, mais qui souhaitent le faire, de se
lancer.&lt;/p&gt;
&lt;h2&gt;Le commencement (avec Debian)&lt;/h2&gt;
&lt;h3&gt;Pourquoi l'adminsys&lt;/h3&gt;
&lt;h4&gt;C'est fun&lt;/h4&gt;
&lt;p&gt;A ce moment là, je regardais pas mal ce que faisait Telecomix et
(entre autre) &lt;a href="https://twitter.com/Okhin"&gt;Okhin&lt;/a&gt; disait qu'il était
adminsys et que c'était marrant. Je me suis dit que ça devait être
cool donc fallait que je regarde.&lt;/p&gt;
&lt;h4&gt;Avec du linux dedans&lt;/h4&gt;
&lt;p&gt;J'avais pas trop envie de continuer sur windows car je me sentais vite
limité et j'entendais du bien de la part de personnes qui aimaient
l'info. J'accorde de l'importance aux gens passionnés, car je leur
fais confiance pour chercher ce qu'il se fait de mieux. Je me suis
donc dirigé vers Ubuntu.&lt;/p&gt;
&lt;h4&gt;Pour des convictions&lt;/h4&gt;
&lt;p&gt;J'ai aussi découvert à cette époque Benjamin Bayart. J'ai vu sa
conférence
&lt;a href="http://www.fdn.fr/Internet-Libre-ou-Minitel-2,94.html"&gt;"Internet libre ou minitel 2.0&lt;/a&gt;
et j'ai adopté sa vision des choses. Je me suis dit que ça serait cool
d'auto-héberger mes services (blog, mail, xmpp etc).&lt;/p&gt;
&lt;p&gt;Bref, fallait que je me mette à Unix.&lt;/p&gt;
&lt;h3&gt;Mes anciennes expériences sur des distribs basées sur Linux&lt;/h3&gt;
&lt;p&gt;(le titre est un peu long, mais j'aime pas "GNU/Linux" et dire juste
Linux est faux).&lt;/p&gt;
&lt;h4&gt;Mandriva&lt;/h4&gt;
&lt;p&gt;Bien avant, (j'étais encore au collège) mon père avait acheté pour
environ 90€ une clé USB de 2Gio (ça montre à quel point c'est vieux
:p) avec Mandriva installé dessus. J'aimais bien l'interface, mais
j'étais vite perdu et au final personne ne l'a jamais trop utilisé.&lt;/p&gt;
&lt;h4&gt;Kubuntu&lt;/h4&gt;
&lt;p&gt;Quand j'étais au lycée ou en début de prépa j'avais essayé Kubuntu
(i.e. Ubuntu avec KDE) 10.04 (de mémoire). J'avais choisi KDE car
c'était ce qui me faisait le plus penser à Windows et comme je ne
voulais pas être perdu, je l'ai choisi. Malheureusement, à cause d'un
bug sur ma CG je ne l'ai jamais utilisé.&lt;/p&gt;
&lt;h3&gt;C'est pas grave, reessayons&lt;/h3&gt;
&lt;h4&gt;En machine virtuelle ...&lt;/h4&gt;
&lt;p&gt;Donc en Février 2012, j'ai eu envie de réessayer, et de découvrir la
console. Je suis tombé sur un tuto sur le site du zero. J'ai suivi le
tuto, je testais en même temps les commandes sur une Ubuntu
virtualisée sur du Vista.&lt;/p&gt;
&lt;h4&gt;... puis sur un laptop ...&lt;/h4&gt;
&lt;p&gt;J'ai récupéré en juin de la même année, un eeepc (vieux pour l'époque,
c'est dire la puissance du laptop) et j'y ai mis Debian, ça a été mon
premier pc sans windows. Là j'ai vraiment commencé à utiliser
sérieusement un OS autre que windows. J'avais les bases de ce que
j'avais appris sur les machines virtuelles mais rien de plus.&lt;/p&gt;
&lt;h4&gt;... puis le serveur auto-hébergé ...&lt;/h4&gt;
&lt;p&gt;Un petit peu plus tard, j'ai récupéré une tour de mon frère et j'y ai
mis Debian aussi, pour l'utiliser comme serveur.&lt;/p&gt;
&lt;p&gt;Petite anecdote : pour une (mauvaise) raison, j'ai installé un FTPD
(proftpd il me semble) et j'ai été bluffé qu'il suffisait de faire
&lt;code&gt;apt-get install proftpd&lt;/code&gt; puis lancer le daemon pour que ce soit
fonctionnel. Sur du windows, je n'avais jamais eu la même expérience
...&lt;/p&gt;
&lt;h4&gt;... et sur un Rasperry Pi ...&lt;/h4&gt;
&lt;p&gt;Puis j'ai eu un raspberry pi. Ça faisait longtemps que j'attendais la
sortie. Je prévoyais de mettre un irssi dans un screen pour mes
connexions à des réseaux IRC. Puis j'ai fait une petite page web avec
juste du HTML servie par apache2. J'ai découvert aussi à ce moment là
&lt;a href="https://en.wikipedia.org/wiki/Cjdns"&gt;CJDNS&lt;/a&gt; sur lequel je me suis un
peu amusé avec des personnes trainant sur l'irc de Telecomix.&lt;/p&gt;
&lt;h4&gt;... et enfin sur mon desktop&lt;/h4&gt;
&lt;p&gt;Finalement, j'en ai eu marre de ce fichu Vista qui ramait, bootait une
fois sur deux etc, j'ai fini par le remplacer sur Debian en
Octobre 2012. Voilà, plus de windows chez moi. Bonheur.&lt;/p&gt;
&lt;p&gt;FWIW, sur mon laptop et sur le desktop, j'étais en Wheezy (testing à
l'époque) avec du XFCE.&lt;/p&gt;
&lt;h2&gt;Mais je croyais que tu n'utilisais qu'OpenBSD ????&lt;/h2&gt;
&lt;h3&gt;Découverte d'OpenBSD&lt;/h3&gt;
&lt;p&gt;Toujours en Octobre 2012 (simple c'était à quelques jours d'une
release (elles se font le 1er Mai et le 1er Novembre)) je parle sur
IRC, et je dis que je tenterais bien du FreeBSD et
&lt;a href="https://twitter.com/bigou_de"&gt;Bigou&lt;/a&gt; me répond que lui serait plutôt
tenté par OpenBSD puisqu'ils disent sur leur site qu'ils utilisent
beaucoup de crypto. Du coup j'ai regardé, j'ai commencé à lire la
FAQ. A l'époque &lt;a href="http://www.22decembre.eu"&gt;_22decembre&lt;/a&gt; essayait,
OpenBSD sur son serveur et donc je lisais ce qu'il racontait.&lt;/p&gt;
&lt;p&gt;J'ai aussi découvert que l'asso
&lt;a href="http://www.franciliens.net"&gt;franciliens.net&lt;/a&gt; utilisait OpenBSD pour
ses serveurs du coup je me suis rapproché d'eux (j'ai adhéré à l'asso
le 12/12/12 \o/).&lt;/p&gt;
&lt;p&gt;J'ai bien aimé l'état d'esprit des gens qui travaillent dessus donc je
me suis dit que j'allais essayer.&lt;/p&gt;
&lt;h3&gt;Sur serveur&lt;/h3&gt;
&lt;h4&gt;Test d'OpenBSD ...&lt;/h4&gt;
&lt;p&gt;Mi-décembre, je me suis acheté
 &lt;a href="./pages/machines.html"&gt;la machine qui me sert de serveur&lt;/a&gt; et j'y
 ai mis OpenBSD. J'avais essayé un peu avant avec des machines
 virtuelles mais rien de plus. J'ai bien cradossé l'install mais j'ai
 appris pas mal de chose&lt;/p&gt;
&lt;h4&gt;... puis la prod&lt;/h4&gt;
&lt;p&gt;Puis en Mai, lors de la release suivante, j'ai réinstallé l'OS et
depuis je fais les choses proprement. Comme j'en ai déjà parlé sur ce
blog, j'héberge chez moi mon blog, mes mails, mon xmpp, de la voip (et
à un moment, même du gopher).&lt;/p&gt;
&lt;h3&gt;Sur routeur&lt;/h3&gt;
&lt;p&gt;Depuis avril 2013,
&lt;a href="./alice-in-wonderlan.html"&gt;j'utilise OpenBSD sur mon routeur&lt;/a&gt;. C'est
lui qui gère le firewall, le nat (et les redirections de ports) et
plein d'autres choses encore.&lt;/p&gt;
&lt;h3&gt;Sur laptop&lt;/h3&gt;
&lt;p&gt;En octobre 2013, ayant marre de mon vieux eeepc, j'en ai racheté un
autre plus récent pour mettre OpenBSD. J'utilise la branche current
(c'est du &lt;em&gt;rolling release&lt;/em&gt;).&lt;/p&gt;
&lt;h2&gt;Analyse&lt;/h2&gt;
&lt;p&gt;C'est la raison d'être de cet article, ce qui précède n'est
qu'anecdote.&lt;/p&gt;
&lt;p&gt;Dès le début, je me suis fixé des buts qui n'étaient pas atteignables
tout de suite. Je savais avant de commencer ce que je voulais faire et
je savais que ça allait prendre du temps.&lt;/p&gt;
&lt;p&gt;Plusieurs fois j'ai envié des gens pour leurs compétences "wah, tout
ce qu'il sait faire" et ça m'a motivé à continuer et à apprendre
toujours plus.&lt;/p&gt;
&lt;p&gt;Je sais que j'ai bien progressé quand j'arrive à aider des gens à
propos de PF (sur #gcu :p), à gérer les sudoers ou à voir du premier
coup d'oeil que quelqu'un confond un numéro de port et un numéro de
protocole.&lt;/p&gt;
&lt;p&gt;J'ai encore plein de choses à apprendre (que je souhaite apprendre en
tout cas), et ça prendra encore du temps.&lt;/p&gt;
&lt;p&gt;Bref, ne jamais avoir peur de se lancer dans un grand projet et ne
jamais arrêter d'apprendre.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="auto-hébergement"></category><category term="mail"></category><category term="blog"></category></entry><entry><title>Choisir PGP/MIME ou PGP/Inline</title><link href="https://oldblog.chown.me/blog/choisir-pgp-mime-ou-pgp-inline.html" rel="alternate"></link><published>2014-02-09T10:20:00-05:00</published><updated>2014-02-09T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-02-09:/blog/choisir-pgp-mime-ou-pgp-inline.html</id><summary type="html">&lt;p&gt;Court article un peu coup de gueule&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;Pour chiffrer ses mails, il existe deux standards de chiffrement, PGP/MIME ou PGP/Inline.&lt;/p&gt;
&lt;h2&gt;Les différences&lt;/h2&gt;
&lt;p&gt;PGP/MIME va mettre les données relatives à la signature (et au chiffrement ?) d'un mail dans une pièce jointe de type application/pgp-signature et va l'appeler signature.asc.&lt;/p&gt;
&lt;p&gt;PGP/Inline va mettre les données relatives dans le corps de l'email. Par exemple :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

This is a uselesss text.

- -- 
Vigdis
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBCgAGBQJTD4LGAAoJEKqftJ/c7dF4IJEQAIkR7lTR/ppi/vlDG2N7s9Xu
DH0N40WvnFto8m+2W9JNECaE7V7N4emrbVSqFx90jyRYE0qbX9g6ssXRerwDyWDq
0+vt/lme+DTmqMhadwsLoXsi3tZKJ7RZNJAtYxa420zFCwQfoWf0BgUQ/QmzZHuR
Y2xIjw5guqEAyjn8mS7m3Kac4zO2+S1wGB28jHwiTOn8dJKk0pgOP8T7QLGTC/Y+
1b7ywbusZCSSDJIKvHAj4YfnWVd/U2VxHjBZhUtYP351tEAcf1zNGsnj8YU13C4v
TBP4EXYHV+60UZFy53oBRwLqLgKploGvI4F+cQxLFtpw+g09FKb41bLPhNSKf7IR
gft0KXoHG1OQ7/aNrVvbLR5qiNOCAHy9SC5OPQv08qccesbkMlXw45vQefGQhqT/
RW2rZsLAQfT8jHz/TivFf5y2x8KpnZ7kVTp4uc1fydeV8mpvMhs+QLqCADF16dWp
k+UKrz7ozrWbYcOXeaoZaF2fu0XcLkS6xhOCqPUYayRA/0cf6PNZlakSK8UDS/nZ
mYqYyxN6cmS7Ov+EOISP0j8mdChZXb2i+TW2Zc4WGIRuNY5Szz/7Pn5Jgjvh6eS7
psS3KIXJHNW5wEtlUKhsN4wRdG0FAwnMifz/KGpEP533p1PMUAxrhXPTQHbt1YPb
7rz404v+cwAuTArpSHq2
=yvt4
-----END PGP SIGNATURE-----
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Vous pouvez tester, la signature doit être bonne :)&lt;/p&gt;
&lt;h2&gt;So what ?&lt;/h2&gt;
&lt;h3&gt;YUNOCHOOSEPGP/MIME&lt;/h3&gt;
&lt;p&gt;Le choix par défaut sur enigmail est d'utiliser Inline. Et comme la majorité des utilisateurs d'enigmail utilisent thunderbird + enigmail pour découvrir les mails chiffrés (pour quelles autres raisons peut on utiliser ce &lt;strong&gt;gros&lt;/strong&gt; logiciel :p), ils utilisent les options par défaut donc Inline.&lt;/p&gt;
&lt;h3&gt;ETOOMUCHVERBOSITY&lt;/h3&gt;
&lt;p&gt;Le problème c'est que ça pollue le mail. L'autre jour sur une ML, plusieurs participants ont envoyé une série de très courts mails lors d'une discussion (vu les échanges (tailles, rapidité de réponses) on aurait pu se croire sur un chat (xmpp ou irc)). La plupart utilisait PGP/Inline et au final je passais plus de temps dans chaque mail à chercher où était le contenu écrit par l'humain qu'à lire le message en lui même.&lt;/p&gt;
&lt;h3&gt;Pauvre M{me,.} Michu&lt;/h3&gt;
&lt;p&gt;De plus pour quelqu'un qui ne sait pas vérifier une signature, dans le cas de PGP/MIME, la personne ne saura pas ce qu'est cette pièce jointe et l'ignorera, dans l'autre cas, elle verra un mail dégueulassé par ces caractères aléatoires et ne va pas comprendre.&lt;/p&gt;
&lt;p&gt;Qu'on ne me dise pas "ouais mais dans ce cas je lui parlerai du chiffrement des mails", si vous voulez convaincre, mettez en signature une rapide explication et invitant à vous demander plus d'explications.&lt;/p&gt;
&lt;h2&gt;Pénibles mais en plus dangeureuses ?&lt;/h2&gt;
&lt;p&gt;Et pour finir, un article qui considère que les signatures avec PGP/Inline sont dangeureuses : &lt;a href="https://dkg.fifthhorseman.net/notes/inline-pgp-harmful/"&gt;https://dkg.fifthhorseman.net/notes/inline-pgp-harmful/&lt;/a&gt; (en aglais)&lt;/p&gt;</content><category term="mail"></category><category term="gpg"></category></entry><entry><title>Auto-héberger ses mails avec OpenSMTPD</title><link href="https://oldblog.chown.me/blog/auto-heberger-ses-mails-avec-opensmtpd.html" rel="alternate"></link><published>2014-01-31T10:20:00-05:00</published><updated>2014-01-31T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2014-01-31:/blog/auto-heberger-ses-mails-avec-opensmtpd.html</id><summary type="html">&lt;p&gt;Article sur l'auto-hébergement de mails&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;Quand j'ai commencé à m'intéresser à l'auto-hébergement, le service que je trouvais le plus important à auto-héberger, était les mails. C'est aussi le service qui m'a posé le plus problème. MTA, MUA, MDA (ces sigles existent vraiment, je déconne pas :p), antispam etc ... je savais que j'avais besoin de certaines de ces briques, mais aucune idée desquelles, ni quels soft prendre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mise en garde&lt;/strong&gt; : cet article comporte pas mal de prosélitisme, désolé, j'utilise des logiciels que j'apprécie. :p&lt;/p&gt;
&lt;h2&gt;Technique&lt;/h2&gt;
&lt;h3&gt;Infrastructure&lt;/h3&gt;
&lt;p&gt;Alors l'infra, rien de bien compliqué, mon &lt;a href="./pages/Machine.html"&gt;serveur&lt;/a&gt;, &lt;a href="https://twitter.com/Aurphee"&gt;deux&lt;/a&gt; ou &lt;a href="https://twitter.com/Vigdis_"&gt;trois&lt;/a&gt; utilisateurs, accessible en imap ("un jour" j'aimerais avoir un webmail), bien sûr un antispam et c'est tout.&lt;/p&gt;
&lt;h3&gt;Quelles implémentations ?&lt;/h3&gt;
&lt;p&gt;Alors, j'ai fini par comprendre (après que des gens de &lt;a href="http://franciliens.net"&gt;franciliens.net&lt;/a&gt; me l'aient expliqué 3 ou 4 fois :p) qu'il me fallait :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un MTA, le serveur mail à proprement dit, celui qui parle SMTP&lt;/li&gt;
&lt;li&gt;un MDA, le serveur qui livre les mails, qui parle IMAP&lt;/li&gt;
&lt;li&gt;un MUA, un client mail (qui &lt;a href="http://www.mutt.org/"&gt;craint moins&lt;/a&gt; &lt;em&gt;ou pas&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;un antispam&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;MTA&lt;/h4&gt;
&lt;p&gt;Pour le MTA, ça faisait un moment que j'entendais du bien d'&lt;a href="http://opensmtpd.org"&gt;OpenSMTPD&lt;/a&gt;. La conf est comme le reste d'&lt;a href="./pourquoi-j-adore-openbsd.html"&gt;OpenBSD : simple&lt;/a&gt; et les dévs sont adorables (&lt;a href="https://twitter.com/PoolpOrg"&gt;au moins un, en tout cas&lt;/a&gt; je connais pas trop les autres) :p&lt;/p&gt;
&lt;h4&gt;MDA&lt;/h4&gt;
&lt;p&gt;J'ai entendu beaucoup de bien de dovecot, donc j'ai choisi lui mais sans avoir trop regardé à côté.&lt;/p&gt;
&lt;h4&gt;MUA&lt;/h4&gt;
&lt;p&gt;J'utilise Claws-mail, mais ce n'est pas (vraiment) le sujet de cet article.&lt;/p&gt;
&lt;h4&gt;Un antispam&lt;/h4&gt;
&lt;p&gt;J'avais lu dans le bouquin de &lt;a href="http://www.nostarch.com/pf2.htm"&gt;pf&lt;/a&gt; que le greylisting avait l'avantage d'être simple et efficace. Je me suis dit que dans un premier temps, ça suffirait. Au niveau de l'efficacité (après 7 mois, j'ai eu un seul spam, et c'était un mail de phishing edf (ivre, il croit que j'ai donné vigdis@ à edf ...)) rien à redire.&lt;/p&gt;
&lt;h3&gt;La conf&lt;/h3&gt;
&lt;h4&gt;MTA&lt;/h4&gt;
&lt;p&gt;Alors, la conf d'OpenSMTPD est lisible (:p) si je me souviens bien, dans le &lt;em&gt;BSDnow&lt;/em&gt; où les dévs ont été interviewés, ils ont dit qu'un de leurs buts était d'avoir une conf lisible comme pf, ceci explique cela.&lt;/p&gt;
&lt;p&gt;Comme j'avais du mal au début, j'ai mailé Gilles avec des questions et il m'a bien expliqué.&lt;/p&gt;
&lt;p&gt;Je vais tricher un peu, ma conf au départ était pour OpenSMTPD 5.3.3 (la version présente dans OpenBSD 5.4) mais je viens de passer à 5.4.1 (il faut télécharger les sources sur le site et compiler pour l'avoir) donc autant vous donner la conf la plus à jour. Elle n'est pas beaucoup différente de la 2e conf donnée dans la section &lt;em&gt;Example&lt;/em&gt; de la man page.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pki chown.me certificate &amp;quot;/etc/mail/certs/chown.me.crt&amp;quot; 
pki chown.me key &amp;quot;/etc/mail/certs/chown.me.key&amp;quot;

listen on lo0
listen on egress tls pki chown.me
listen on egress port submission tls pki chown.me auth

table aliases db:/etc/mail/aliases.db

accept for local alias &amp;lt;aliases&amp;gt; deliver to maildir
accept from any for domain chown.me alias &amp;lt;aliases&amp;gt; deliver to maildir
accept for any relay
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;La conf me semble claire mais je vais quand même l'expliciter.&lt;/p&gt;
&lt;p&gt;Les deux premières lignes servent à indiquer où est le certificat et où est la clé. &lt;/p&gt;
&lt;p&gt;Les trois lignes suivants disent sur quoi on écoute et de quelle manière : on écoute en local, sur l'interface du serveur avec les cert et clé donné précedemment (sur le port 25) et enfin la même chose mais sur le port submission pour les clients mails. &lt;/p&gt;
&lt;p&gt;La 6e ligne définit la table qui contient les alias. Les alias ce sont les adresses mails, je définis là si l'adresse envoiemoiduspam@chown.me existe ou non. Si on me mail à une adresse qui n'existe pas, la personne se prendre un code d'erreur (550 de mémoire). &lt;/p&gt;
&lt;p&gt;Le 4e groupe de ligne sert à définir ce qu'on fait avec les mails qu'on reçoit.&lt;/p&gt;
&lt;h4&gt;MDA&lt;/h4&gt;
&lt;p&gt;Alors je ne vais pas parler de la configuration de dovecot, parce qu'en fait c'est très simple, dovecot est installé avec tous les fichiers de conf remplis (au moins sur OpenBSD), il ne reste plus qu'à les modifier (dire où est le cert SSL, dire si on veut IMAP et/ou POP etc ...).&lt;/p&gt;
&lt;p&gt;La principale difficulté que j'ai eu a été de ne pas me compliquer la vie ... je ne pouvais pas croire que c'était si simple ...&lt;/p&gt;
&lt;h4&gt;Greylisting&lt;/h4&gt;
&lt;p&gt;D'abord une petite explication sur ce qu'est le greylisting (n'hésitez pas à passer au prochain paragraphe pour ceux qui savent). Ça part du principe que les devs de MTA spammeurs ont codé à l'arrache et donc qu'ils n'ont pas implémenté le respect des codes d'erreurs. Quand un serveur inconnu contacte mon MTA, celui-ci va lui dire qu'il ne se sent pas bien, et va lui demander de repasser plus tard. Un MTA bien élevé, va revenir plus tard comme demandé, alors que le spammeur va continuer de vouloir entrer. On autorise celui qui revient comme demandé et on bloque celui qui insiste.&lt;/p&gt;
&lt;p&gt;J'utilise spamd parce que c'est dans OpenBSD par défaut. Pour le mettre dans la boucle, il suffit juste de dévier l'arrivée des mails par spamd avec pf avec la conf qui est dans &lt;code&gt;man spamd&lt;/code&gt; (qui a parlé d'assisté ? :p), on rajoute dans /etc/rc.conf.local&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;spamd_flags=&amp;quot;-v -G 3:4:864&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;pour définir passtime, greyexp et whiteexp.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;passtime c'est pour dire on accepte à partir de quand s'il reessaie (y a une explication plus claire dans la man, si vous n'avez pas compris :p) en minutes&lt;/li&gt;
&lt;li&gt;greyexp c'est combien de temps une entrée reste greylistée en minutes&lt;/li&gt;
&lt;li&gt;whiteext c'est combien de temps une entrée restera whitelistée en heures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y a deux problèmes avec le greylisting, le premier c'est que lors du premier échange, ça bloque, donc on ne reçoit pas le mail tout de suite, c'est pas bien grave, mais ça peut être frustrant quand on attend un mail et qu'on le voit se faire bloquer.&lt;/p&gt;
&lt;p&gt;Le deuxième est un peu plus chiant, cela vient du fait que les gens ne gèrent pas leurs mails. Vu que tout le monde utilise des services (gmail, hotmail, yahoo et autres), ils ne tiennent plus sur un serveur, mais plusieurs. Le problème vient du fait que le serveur qui réessaie est rarement celui qui a essayé la première fois et que spamd ne fait pas le lien entre les deux donc il faut whitelister à la main. &lt;/p&gt;
&lt;p&gt;Il y a deux solutions. La première pas parfaite est de whitelister les IPs de ces grands groupes. Vu que je n'aime pas réinventer la roue, j'utilise &lt;a href="http://www.bsdly.net/~peter/nospamd"&gt;le travail de Peter N.M. Hansteen&lt;/a&gt;. L'autre solution est d'utiliser postgrey qui lui permet de whitelister un domaine directement.&lt;/p&gt;
&lt;h4&gt;Users qui peuvent recevoir des mails&lt;/h4&gt;
&lt;p&gt;Il faut créer des users pour pouvoir récupérer les mails en IMAP et envoyer les mails. Pour cela on crée un user unix tout simplement mais pour plus de sécurité on met comme shell &lt;code&gt;/sbin/nologin&lt;/code&gt; comme ça même si quelqu'un arrive à avoir le mot de passe il ne pourra rien faire au serveur.&lt;/p&gt;
&lt;h3&gt;Dernières choses&lt;/h3&gt;
&lt;p&gt;Il y a cependant certaines choses à faire que je n'ai pas décrites dans cet article  car c'est plutôt simple. Je pense à créer les certs ssl, faire un enregistrement MX pour son domaine etc.&lt;/p&gt;
&lt;h2&gt;Feedback&lt;/h2&gt;
&lt;p&gt;Cela fait 7 mois que j'auto-héberge mes mails. J'ai eu &lt;strong&gt;un seul et unique spam&lt;/strong&gt;, et aucun problème. Au niveau des autres, chez gmail je n'arrive pas dans les spams chez hotmail/outlook si, mais est ce vraiment un mal ? :p&lt;/p&gt;
&lt;h2&gt;Derniers mots&lt;/h2&gt;
&lt;p&gt;Le fait de gérer ses mails est vraiment quelque chose d'important, ça empêchera (un peu) les grosses boites à attenter à votre vie privée.&lt;/p&gt;
&lt;p&gt;Non je déconne, faites-le parce que les grosses boites merdent avec mon greylisting, merci :p&lt;/p&gt;
&lt;h2&gt;Bonus&lt;/h2&gt;
&lt;p&gt;J'ai relu pour ne pas trop  dire de bêtise, les réponses que Gilles m'avait faites. Je vous les donne. C'est vraiment pour les débutants, pas la peine de les lire pour les autres.&lt;/p&gt;
&lt;h3&gt;Explication sur l'architecture de ceux qui parlent SMTP&lt;/h3&gt;
&lt;p&gt;En fait dans une archi mail, tu as la partie SMTP en charge de transmettre
le mail d'un point A a un point B. Chaque noeud du reseau SMTP est soit un
relay, soit une destination. En mode relay, le noeud accepte un mail et va
se transformer en client SMTP pour l'envoyer ailleurs. En destination, les
noeuds file le message a un MDA qui se charge de le mettre quelque part ou
l'utilisateur pourra le recuperer &lt;em&gt;d'une facon ou d'une autre&lt;/em&gt;. Le serveur
SMTP a juste la charge de le stocker quelque part pour l'utilisateur, son
boulot s'arrete la.&lt;/p&gt;
&lt;p&gt;Si tes utilisateurs accedent a leur boite mail en local, comme sur poolp,
tu peux te contenter de la couche SMTP, et leur client mail ira tapper le
repertoire directement, genre ~/Maildir ou /var/mail/${USER}.&lt;/p&gt;
&lt;p&gt;Pour envoyer un message, le client parlera SMTP de la meme facon que s'il
etait lui meme un serveur qui relay vers un autre.&lt;/p&gt;
&lt;p&gt;En general, les gens veulent pouvoir acceder a leur boite mail depuis une
autre machine, du coup on ajoute un serveur IMAP ou POP dont le seul but
est d'exposer le ~/Maildir ou le /var/mail/${USER} mais qui ne tiens pas
le moindre role dans les echanges de mail.&lt;/p&gt;
&lt;p&gt;Quand tu lances ton client thunderbird par exemple, les envois de mails
se font par SMTP, mais la recuperatin se fait par IMAP ou POP.&lt;/p&gt;
&lt;h3&gt;Différence entre smtps et tls&lt;/h3&gt;
&lt;p&gt;smtps et tls c'est globalement la meme chose mais a un niveau
different. smtps tu te connectes en SSL, tls tu etablis une connexion en
clair et tu declenches un passage en SSL par la suite.&lt;/p&gt;
&lt;p&gt;tls est le mode le plus courant et generalement supporte, smtps l'es moins.&lt;/p&gt;
&lt;h3&gt;Je ne veux pas pouvoir m'authentifier en clair&lt;/h3&gt;
&lt;p&gt;Ca tombe bien, smtpd supporte pas l'auth sur canal clair ;-)
Tant que tu n'as pas etabli de session ssl, il ne dira pas au client qu'il
supporte l'AUTH et refusera de debuter une authentification.&lt;/p&gt;
&lt;h2&gt;Ajout du 22/04/14&lt;/h2&gt;
&lt;h3&gt;Bonus bis&lt;/h3&gt;
&lt;p&gt;Pour rajouter un peu de sécurité, on peut ajouter un autre utilisateur avec &lt;code&gt;vipw&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;_smtpq:*:103:103::0:0:SMTP Daemon:/var/empty:/sbin/nologin
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On ajoute à &lt;code&gt;/etc/group&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;_smtpq:*:103:
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et enfin on chown (&amp;lt;3) les queue au nouvel utilisateur&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd /var/spool/smtpd
chown -R _smtpq corrupt incoming purge queue temporary
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Enfin, on redémarre le daemon pour être sûr que c'est pris en compte.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;/etc/rc.d/smtpd restart
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Bonus ter&lt;/h3&gt;
&lt;p&gt;Je demande à gilles@ de vérifier que je n'ai pas dit de bêtise, il me demande si j'ai compris pourquoi on faisait ça. Du coup je copie &amp;amp;&amp;amp; colle l'échange :&lt;/p&gt;
&lt;p&gt;__gilles : tu as compris pourquoi on fait ca ?&lt;/p&gt;
&lt;p&gt;Vigdis : je suppose que c'est parce qu'avant c'était géré par _smtpd (qui est déjà &lt;em&gt;unprivledged&lt;/em&gt;) mais que c'est mieux que ce soit un autre user qui gère les queues pour compartimenter&lt;/p&gt;
&lt;p&gt;Vigdis : j'ai bon ?&lt;/p&gt;
&lt;p&gt;__gilles : exact&lt;/p&gt;
&lt;p&gt;__gilles : en fait les process qui font face au reseau sont dans un chroot, donc ils sont pas un risque&lt;/p&gt;
&lt;p&gt;__gilles : mais le process qui s'occupe de lire les ~/.forward&lt;/p&gt;
&lt;p&gt;__gilles : et de resoudre les aliases, il peut pas etre chroot&lt;/p&gt;
&lt;p&gt;Vigdis : ok&lt;/p&gt;
&lt;p&gt;__gilles : et s'il tourne avec le meme user que la queue, si quelqu'un trouve un bug exploitable, il pourrait provoquer la suppression de la queue&lt;/p&gt;
&lt;p&gt;__gilles : la il peut plus&lt;/p&gt;
&lt;p&gt;__gilles : (enfin, pas aussi facilement)&lt;/p&gt;
&lt;p&gt;(encore une raison pourquoi j'adore OpenBSD, les devs sont &amp;lt;3)&lt;/p&gt;</content><category term="OpenBSD"></category><category term="auto-hébergement"></category><category term="mail"></category><category term="OpenSMTPD"></category><category term="tls"></category></entry><entry><title>Pourquoi le safeplug est une mauvaise idée</title><link href="https://oldblog.chown.me/blog/pourquoi-le-safeplug-est-une-mauvaise-idee.html" rel="alternate"></link><published>2013-11-25T10:20:00-05:00</published><updated>2013-11-25T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-11-25:/blog/pourquoi-le-safeplug-est-une-mauvaise-idee.html</id><summary type="html">&lt;p&gt;Depuis quelques jours j'entends parler du safeplug, dont certaines personnes chantent les louanges, à tort (amha)&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Mmmhh c'est quoi ?&lt;/h2&gt;
&lt;p&gt;Le &lt;a href="http://pogoplug.com/safeplug"&gt;produit&lt;/a&gt; est vendu comme "A revolutionary device to protect your family and your home.".&lt;/p&gt;
&lt;p&gt;En gros, &lt;em&gt;Safeplug&lt;/em&gt; utilise le réseau Tor pour "sécuriser" la connexion Internet de l'utilisateur. Donc dès que la personne va aller sur le site, la boite va rediriger le traffic web vers le réseau Tor. Il est surtout vendu comme une solution qui rend anonyme l'utilisateur.&lt;/p&gt;
&lt;h2&gt;Pourquoi ce n'est pas une idée&lt;/h2&gt;
&lt;h3&gt;Closed source&lt;/h3&gt;
&lt;p&gt;Déjà a priori la machine est une boite noire (si vous trouvez le code source, ça m'intéresse). Vous ne savez absolument pas si les dévs qui ont fait ça, n'ont pas fait ça n'importe comment et que la moitié des paquets vont leaker.&lt;/p&gt;
&lt;p&gt;Vous ne savez pas s'ils n'ont pas inclus une backdoor qui permettra au mieux de mettre à jour la machine, au pire de désactiver Tor sur demande d'une &lt;em&gt;Agence&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Les personnes derrières ça&lt;/h3&gt;
&lt;p&gt;Les personnes derrière ce produit ne m'inspirent vraiment pas :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The good news is that the more people use Tor the faster the service runs, so by using Safeplug you are helping the Internet community protect itself from tracking and surveillance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Suprise ! je t'ai mis un relais Tor sans te demander ton avis, heureux ? Y a juste à espérer qu'ils ne se plantent pas et qu'ils n'en fassent pas un exit node (pour l'acheteur, pour toutes les conséquences légales que ça peut avoir).&lt;/p&gt;
&lt;p&gt;De plus, à la question "How can I ensure that my browsing is really anonymous?" ils répondent :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To ensure that your online activity cannot be tracked, we recommend that you clear your cookies between anonymous browsing sessions. Cookies could allow a site or organization to trace your Internet activity back to you. Additionally, we recommend disabling browser plugins like Flash Player and QuickTime. Using browser plugins with Safeplug could present a security risk to you while browsing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://www.torproject.org/docs/faq.html.en#TBBFlash"&gt;Ce problème est clairement décrit dans la FAQ de Tor&lt;/a&gt; mais ne concerne pas les utilisateurs du safeplug puisque &lt;strong&gt;tout&lt;/strong&gt; le traffic est sensé passer par Tor ce qui ne serait pas forcément le cas avec le Tor Browser Bundle. J'ai pas l'impression qu'ils comprennent ce qu'ils ont fait.&lt;/p&gt;
&lt;h3&gt;Les fuites applicatives&lt;/h3&gt;
&lt;p&gt;Et enfin, le pire.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Safeplug sets up in 60 seconds and allows you to use your existing web browser, and even your phone, to browse the Internet with complete anonymity and peace of mind.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;your existing browser" et "complete anonymity" dans une même phrase devrait vous faire fuir. L'anonymat via Tor ne marche pas magiquement pouf tu l'utilises ça détruit le user agent, les plugins du navigateur, la résolution etc. Non, Tor ne cachera pas que vous l'utilisez et ce n'est pas son but. L'anonymat de Tor consiste à cacher tout le monde derrière la même chose, i.e. je sais que la personne qui vient de lire mon blog utilise Tor, mais je ne sais pas qui elle est parmi les 500 000 utilisateurs.&lt;/p&gt;
&lt;p&gt;Or là, si tu surfes avec ton navigateur habituel, on peut aisément t'identifier. Pour prendre un cas un peu extrême, vous croyez qu'il y a combien de personne derrière l'user agent :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Mozilla/5.0 (X11; OpenBSD amd64; rv:25.0) Gecko/20100101 Firefox/25.0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Certes là je parle d'un user-agent, mais &lt;a href="https://panopticlick.eff.org/"&gt;les navigateurs laissent filtrer&lt;/a&gt; tout un tas d'informations qui permettent, dans le pire des cas, à le rendre unique.&lt;/p&gt;
&lt;h2&gt;Arf, pourtant l'idée me plaisait bien&lt;/h2&gt;
&lt;p&gt;Il y a projet qui a le même concept et qui lui est open source : &lt;a href="https://github.com/grugq/portal"&gt;PORTAL&lt;/a&gt;, à utiliser uniquement en connaissance de cause.&lt;/p&gt;
&lt;p&gt;tl;dr, si vous voulez mettre toutes les chances de votre côté au niveau anonymat, utilisez le &lt;a href="https://www.torproject.org/download/download-easy.html.en"&gt;Tor Browser Bundle&lt;/a&gt; ou &lt;a href="https://tails.boum.org"&gt;Tails&lt;/a&gt;&lt;/p&gt;</content><category term="Tor"></category><category term="opsec"></category></entry><entry><title>Umurmur, Mumble et OpenBSD</title><link href="https://oldblog.chown.me/blog/umurmur-mumble-et-openbsd.html" rel="alternate"></link><published>2013-11-23T10:20:00-05:00</published><updated>2013-11-23T10:20:00-05:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-11-23:/blog/umurmur-mumble-et-openbsd.html</id><summary type="html">&lt;p&gt;Je viens d'installer Umurmur, petite doc^Wrécit rapide sur son installation&lt;/p&gt;</summary><content type="html">&lt;h2&gt;La raison du pourquoi&lt;/h2&gt;
&lt;p&gt;Je suis en couple à distance donc on s'appelle sur nos téléphones
fixes et ainsi on peut se parler si besoin sinon chacun vaque à ses
occupations.&lt;/p&gt;
&lt;p&gt;Et parce que Skype n'est pas libre/propre.&lt;/p&gt;
&lt;h2&gt;La voix sur IP&lt;/h2&gt;
&lt;h3&gt;Qu'est ce qu'on utilise ?&lt;/h3&gt;
&lt;p&gt;Je demande si quelqu'un a un serveur mumble pour que je puisse parler
avec ma copine, &lt;a href="https://twitter.com/trismegiste"&gt;Agarwaën&lt;/a&gt; (ouais
maintenant je donne les noms des coupables :p) me dit "bah pourquoi
t'utilises pas xmpp ?".&lt;/p&gt;
&lt;p&gt;J'utilise pidgin (client qui est pas top, mais le moins pire des
clients xmpp à mon gout :/) parce qu'il y a OTR dessus. Visiblement la
voix nécessite un plugin qui n'est pas porté sur OpenBSD, tant pis
j'ai une autre machine avec Ubuntu.&lt;/p&gt;
&lt;h3&gt;Perdons du temps avec cette mer^W^W^W&lt;/h3&gt;
&lt;p&gt;Après de &lt;strong&gt;plusieurs&lt;/strong&gt; essais, impossible de le faire marcher. Je
m'énerve, tant pis ça ne sera pas xmpp.&lt;/p&gt;
&lt;h3&gt;Mumble&lt;/h3&gt;
&lt;p&gt;On me donne finalement les infos d'un serveur mumble que je peux
utiliser temporairement. De nouveau sur Ubuntu ça ne marche
pas. Visiblement le son c'est pas leur fort.&lt;/p&gt;
&lt;p&gt;J'installe mumble sur OpenBSD, ça juste marche ...&lt;/p&gt;
&lt;h3&gt;Autohébergeons nous&lt;/h3&gt;
&lt;p&gt;Comme vous savez
&lt;a href="../faisabilité-de-l'auto-hébergement.html"&gt;ma volonté de m'auto-héberger&lt;/a&gt;,
j'ai regardé comment je pouvais faire. Sur OpenBSD, il y a umurmur qui
est un &lt;em&gt;Minimalistic Murmur (Mumble Server)&lt;/em&gt; vu les conditions, ça me
va très bien.&lt;/p&gt;
&lt;p&gt;On install via &lt;code&gt;pkg_add&lt;/code&gt; ou via les ports, au choix (comme d'hab).&lt;/p&gt;
&lt;p&gt;On va dans &lt;code&gt;/etc/umurmur&lt;/code&gt; pour modifier &lt;em&gt;umurmur.conf&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;On a juste à modifier quelques champs (qui sont &lt;strong&gt;très&lt;/strong&gt; simples, vraiment).&lt;/p&gt;
&lt;p&gt;On va voir la
&lt;a href="http://www.openbsd.org/faq/fr/faq10.html#HTTPS"&gt;FAQ qui explique comment configurer HTTP avec SSL&lt;/a&gt;
vu que c'est expliqué comment créer un certificat (cette méthode a
&lt;a href="http://www.byatoo.com/la-rache/"&gt;un nom&lt;/a&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;openssl genrsa -out /etc/ssl/private/server.key 2048
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Vu qu'il fait froid on peut passer à 4096, ça réchauffera un peu la pièce :).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/private/server.csr
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et comme &lt;a href="../https-sslh-et-bypass-de-proxy.html"&gt;je n'ai pas de CA&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;openssl x509 -sha256 -req -days 365 -in /etc/ssl/private/server.csr \
   -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On n'oublie pas de mettre dans &lt;em&gt;umurmur.conf&lt;/em&gt; les emplacements du
certificat et de la clé privée.&lt;/p&gt;
&lt;h2&gt;Un article pour ... ça ?&lt;/h2&gt;
&lt;p&gt;Je ne comptais pas écrire d'article à la base parce que c'était
vraiment très simple et très rapide (ce qui prend le plus de temps
c'est créer le certificat et installer umurmur, c'est dire) : faut
compter une dizaine de minutes pour avoir quelque chose de
fonctionnel, mais comme je me suis bien pris la tête à cause d'Ubuntu
alors qu'à côté OpenBSD "juste marche" et qu'en plus
&lt;a href="https://twitter.com/iMilnb"&gt;iMil&lt;/a&gt; venait de dire sur le chan de
&lt;a href="http://www.gcu-squad.org/"&gt;GCU&lt;/a&gt; que je faisais "du prosel
poissonpiquant de qualitay", je me suis dit que je pouvais en
&lt;a href="../pourquoi-j-adore-openbsd.html"&gt;remettre une couche&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;TL;DR&lt;/h3&gt;
&lt;p&gt;L'auto-hébergement est faisable même pour mumble et OpenBSD ça "juste marche".&lt;/p&gt;</content><category term="OpenBSD"></category><category term="tls"></category><category term="xmpp"></category></entry><entry><title>Pourquoi j'adore OpenBSD</title><link href="https://oldblog.chown.me/blog/pourquoi-j-adore-openbsd.html" rel="alternate"></link><published>2013-10-11T10:20:00-04:00</published><updated>2013-10-11T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-10-11:/blog/pourquoi-j-adore-openbsd.html</id><summary type="html">&lt;p&gt;J'utilise OpenBSD depuis un peu moins d'un an et plus le temps passe, plus j'apprécie ce système.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Avant toute chose, je ne dis pas qu'OpenBSD est meilleur qu'un autre OS, je dis juste pourquoi &lt;strong&gt;je&lt;/strong&gt; l'apprécie plus que les autres.&lt;/p&gt;
&lt;h2&gt;La documentation&lt;/h2&gt;
&lt;h3&gt;La FAQ&lt;/h3&gt;
&lt;p&gt;La documentation de cet OS est géniale. Avant de l'avoir installé, j'avais lu la &lt;a href="http://openbsd.org/faq/index.html"&gt;FAQ&lt;/a&gt;, même si je n'avais pas tout compris (il y a des choses que j'ai compris seulement bien longtemps après), ça a déjà été une bonne base. Cette FAQ explique énormément de choses et comporte un certain nombre de &lt;em&gt;how-to&lt;/em&gt; bien utiles. Plusieurs fois j'ai cherché des tutos sur Internet sur comment faire certaines choses, les tutos que j'ai trouvé comportaient des choses bizarres, et en recherchant, je suis tombé sur la FAQ qui expliquaient exactement ce que je voulais faire (notamment du pxeboot) ; le tuto trouvé précedemment était (en gros), ce qu'expliquait la FAQ, plus &lt;em&gt;les choses bizarres&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Les manpages&lt;/h3&gt;
&lt;p&gt;Les pages &lt;em&gt;man&lt;/em&gt; sont aussi très complètes et bien faites. Avant d'utiliser OpenBSD, j'utilisais beaucoup Debian. Jamais (ou très rarement) il ne me venait à l'esprit de lire une page man. Si j'avais un problème, je googlais pour trouver la solution. OpenBSD, du fait que personne ne l'utilise (mouarf) et que les pages &lt;em&gt;man&lt;/em&gt; sont complètes, personne n'écrit de tuto pour faire ceci ou cela. Plusieurs fois, je me suis dit, tiens je devrais faire un article sur $chose, puis j'ai vu qu'il y avait une page &lt;em&gt;man&lt;/em&gt; qui expliquait comment faire. Un exemple ? Pour ma connexion ADSL, je devais gérer la session PPP avec mon routeur. Si on choisit ppp(4) (à l'inverse de celui qui est en userland, ppp(8)) il suffit de lire la page man, il n'y a guère plus à faire que recopier et juste changer le login et le mot de passe.&lt;/p&gt;
&lt;h3&gt;La communauté&lt;/h3&gt;
&lt;p&gt;Enfin, vu que je fais face souvent à des problèmes de couche 8 (PEBKAC toussa), genre une page &lt;em&gt;man&lt;/em&gt; que j'ai mal lue, ou une partie de la FAQ que je n'ai pas compris, il m'arrive souvent de demander de l'aide. Vu qu'à part les 3 utilisateurs &lt;em&gt;normaux&lt;/em&gt; d'OpenBSD (:p) les autres sont les committers, ça permet d'avoir des gens à qui demander qui savent de quoi ils parlent vu que ce sont eux qui ont écrit le code. Bien sûr, si on demande sans avoir cherché un minimum avant, on risque de se prendre quelques remarques dans les dents, mais sinon, les personnes sont très serviables (si vous avez une meilleur traduction de &lt;em&gt;helpful&lt;/em&gt; ..).&lt;/p&gt;
&lt;h2&gt;Les petites attentions&lt;/h2&gt;
&lt;h3&gt;Afterboot&lt;/h3&gt;
&lt;p&gt;Suite à une installation, le système envoie (de mémoire) deux mails, avec l'un des deux qui conseille de lire afterboot(8). Cette page &lt;em&gt;man&lt;/em&gt; décrit toutes les petites actions à faire quand on vient d'installer OpenBSD.&lt;/p&gt;
&lt;h3&gt;Daily output (et /etc/weekly et /etc/monthly)&lt;/h3&gt;
&lt;p&gt;Le système comporte de base des scripts de maintenance. Il y a trois scripts, un qui doit s'exécuter quotidiennement (daily), un autre de manière hebdomadaire (weekly) et le dernier mensuellement (monthly).&lt;/p&gt;
&lt;p&gt;Ils font chacun des actions qui ont besoin d'avoir lieu à ces différentes fréquences. Par exemple daily va vérifier les permissions des fichiers du système, il envoie un mail qui comporte l'uptime, l'état du partitionnement (ça permet de s'apercevoir que par exemple il n'y a plus de place sur une partition :p) et donner des infos sur le réseau (nb de paquets entrants, sortant, les erreurs etc) et enfin, il fait une série &lt;code&gt;diff&lt;/code&gt;. Si ces diff ne sont pas vide cela déclenche un autre mail "daily insecurity outpput" qui comporte ces diffs. C'est utile dans le cas d'admin à plusieurs, afin de pouvoir ce que l'autre admin a modifié. &lt;/p&gt;
&lt;p&gt;Weekly fait des choses qui n'ont pas besoin d'être fait souvent, comme mettre à jour la base données de locate(1). &lt;/p&gt;
&lt;p&gt;Pour rajouter des choses, c'est très simple, il suffit juste de créer un fichier {daily,weekly,monthly}.local qui comporte les actions à effectuer, le système les fera avant de faire le script à la base. &lt;/p&gt;
&lt;p&gt;Bref, du bonheur.&lt;/p&gt;
&lt;h3&gt;/var/backups/&lt;/h3&gt;
&lt;p&gt;Une fois j'ai cassé le système (\o/), je ne sais plus comment j'ai fait, je me rappelle juste des grandes lignes. Mon système ne marche plus, seule possibilité c'est de booter en single user mode. Je connais le fichier que j'ai modifié, je sais ce que j'ai modifié, mais je ne sais plus ce qui était mis à la base ... c'est là qu'en demandant de l'aide, on me dit "bah récupère la version précédente dans /var/backups/" ... wut ? Quand tu as ton système qui ne veut plus booter parce que tu as fait une connerie, tu es sacrément heureux de voir que le système, de base, sauvegarde les fichiers importants (et garde les checksums pour d'autres). &lt;/p&gt;
&lt;h3&gt;Les noms des interfaces réseaux&lt;/h3&gt;
&lt;p&gt;Contrairement aux autres systèmes où les interfaces filaires s'appellent eth et les wifi wlan, sous OpenBSD, les interfaces sont issues du nom des drivers. Du coup il est aisé de savoir quel est le driver utilisé pour l'interface. À quoi ça sert ? Parfois on rencontre des problèmes et dans ce cas il suffit de faire man $driver et de lire la section bug pour savoir si le problème est connu ou si ça vaut la peine de faire un rapport de bug.&lt;/p&gt;
&lt;h2&gt;La politique&lt;/h2&gt;
&lt;h3&gt;Rien d'activé par défaut&lt;/h3&gt;
&lt;p&gt;Avec OpenBSD vient avec quelques logiciels, tel que Apache 1, Nginx etc. La plupart sont par défaut désactivé. Les seuls activés sont ceux de confiance comme sshd (et encore à l'installation, on nous demande si on veut l'activer). Cela évite d'avoir des logiciels qui tournent sans raison.&lt;/p&gt;
&lt;h3&gt;La sécurité&lt;/h3&gt;
&lt;p&gt;OpenBSD est un système simple (note: comme on l'a fait remarqué sur un chan irc, simple != facile). La sécurité d'un système vient aussi de la bonne compréhension du système afin de permettre d'auditer les choses. Ce n'est certainement pas en rajoutant de la compléxité qu'un système sera plus sûr.&lt;/p&gt;
&lt;p&gt;Typiquement avoir des syntaxes simples pour des logiciels aident grandement. Regardez les syntaxes des fichiers de configuration d'OpenSSH, OpenSMTPD, Open^W PF et montrez moi d'autres logiciels ayant une syntaxe aussi claire.&lt;/p&gt;
&lt;p&gt;Petit détail qui fait tout, durant l'installation de l'OS, on nous demande si on veut activer sshd, si on crée un user, il nous propose directement de mettre un &lt;code&gt;PermitRootLogin no&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;Tout ça fait au final que même sans forcément rechercher un système sûr, les choses font qu'on finit par en avoir un.&lt;/p&gt;
&lt;h3&gt;Les licences&lt;/h3&gt;
&lt;p&gt;Étant un peu intégriste^W^W^W libriste, j'aime bien leur principe de ne pas intégrer à la base des logiciels dont la licence n'est pas correcte. Oui on a des vieux trucs comme UFS/FFS, alors que FreeBSD a ZFS, on a Apache 1 et pas 2 à cause de ce problème de licence (cependant la version 2 est disponible via les packages).&lt;/p&gt;
&lt;p&gt;Je vous invite aussi à lire dans la FAQ la partie à propos de Flash, ça vaut son pesant de cacahuètes.&lt;/p&gt;
&lt;h2&gt;Cool tout ça, mais ça tourne sur quoi ?&lt;/h2&gt;
&lt;h3&gt;Firewall, routeur&lt;/h3&gt;
&lt;p&gt;OpenBSD est plus qu'adapté pour tout ce qui est firewall (carp + pfsync = &amp;lt;3) et plus généralement à tout ce qui a trait au réseau. Vous en connaissez beaucoup des systèmes qui intégrent une implémentation &lt;strong&gt;libre&lt;/strong&gt; de MPLS, de base ? Idem pour IPSEC (le premier qui me parle de la backdoor, je lui fais manger la page FUD de wikipédia).&lt;/p&gt;
&lt;h3&gt;Workstation&lt;/h3&gt;
&lt;p&gt;OpenBSD est très bien utilisable comme workstation, je vous laisse regarder les vidéos que ajacoutot@ fait pour Gnome, c'est beau (troll mis à part à propos de Gnome).&lt;/p&gt;
&lt;h3&gt;Laptop&lt;/h3&gt;
&lt;p&gt;Les commiters d'OpenBSD utilisent sur leur laptop ... OpenBSD (contrairement à certains développeurs d'autres OS qui se sont tournés vers Apple). Ce qui fait qu'OpenBSD est bien utilisable sur des pc portables.&lt;/p&gt;
&lt;h3&gt;Et même de l'arm !&lt;/h3&gt;
&lt;p&gt;OpenBSD tourne même sur de l'arm. Non pas sur le Raspberry Pi (dont je ne vais pas prendre la peine de dire du mal car j'ai l'impression que les fanboys de RPi sont encore pire que ceux d'Apple), mais sur d'autres plateformes c'est en cours de portage (même si ça marche déjà plutôt bien) et vu la dynamique des commits, j'ai bon espoir qu'il y ait quelque chose de complet rapidement.&lt;/p&gt;
&lt;h2&gt;Pour finir&lt;/h2&gt;
&lt;p&gt;Une citation de Theo de Raadt que j'aime bien : "Linux people do what they do because they hate Microsoft. We do what we do because we love Unix."&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;/propaganda&amp;gt;&lt;/code&gt;&lt;/p&gt;</content><category term="OpenBSD"></category><category term="pf"></category><category term="Alix"></category><category term="ssh"></category><category term="OpenSMTPD"></category></entry><entry><title>Comment traverser du NAT avec Tor</title><link href="https://oldblog.chown.me/blog/comment-traverser-du-nat-avec-Tor.html" rel="alternate"></link><published>2013-08-15T10:20:00-04:00</published><updated>2013-08-15T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-08-15:/blog/comment-traverser-du-nat-avec-Tor.html</id><summary type="html">&lt;p&gt;Comment se connecter à une machine derrière du NAT sans redirection de port.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Mais pourquoi tu es derrière du NAT ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Parce qu'il y a trop peu d'IPv4 pour en donner des routables à tout le monde.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://imil.net/wp/2013/01/05/ipv6-je-taime-mais-tout-le-monde-sen-fout/"&gt;Parce que l'IPv6 c'est pas encore ça.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Bah tu rediriges ton port sur la machine&lt;/h2&gt;
&lt;p&gt;Oui, sauf qu'on a pas toujours la main sur le routeur. D'autant plus que vu l'engouement des telcos pour l'IPv6, on va vraisemblablement bouffer du &lt;a href="https://en.wikipedia.org/wiki/Carrier-grade_NAT"&gt;CGN&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Concrètement, on fait comment ? Exemple pour ssh&lt;/h2&gt;
&lt;p&gt;Je vais vous expliquer comment faire pour ssh, pour les autres services, c'est encore plus court.&lt;/p&gt;
&lt;p&gt;D'abord on commence par installer Tor (je te laisse voir ça avec la documentation de ton système).&lt;/p&gt;
&lt;h3&gt;Création d'un hidden service&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Note, si tu penses que récemment il y a une faille sur les hidden services de Tor, je t'invite à fermer cette page puisque tu ne sais pas lire.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Une fois qu'on a installé Tor, il a du mettre dans &lt;code&gt;/etc/tor&lt;/code&gt; son fichier de configuration, &lt;code&gt;torrc&lt;/code&gt;. Dedans tu dois avoir &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 22 127.0.0.1:22
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Il suffit de décommenter les lignes, changer le port si sshd n'écoute pas sur le port 22. On relance Tor et normalement on a &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;/var/lib/tor/hidden_service# ls
hostname  private_key
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dans hostname se situe l'adresse du hidden service (et dans private_key, ô surprise, la clé privée).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# cat hostname 
l4dr3ss3duH5.onion
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Une fois qu'on l'a récupéré, on installe socat si ce n'est déjà fait. Puis dans un terminal on entre la commande&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;socat TCP4-LISTEN:4252,fork SOCKS4A:127.0.0.1:l4dr3ss3duH5.onion:22,socksport=9050
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Pour se connecter en ssh on tape &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="mf"&gt;@127.0.0.1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="mi"&gt;4252&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Mais c'est inutilisable /o\ !&lt;/h3&gt;
&lt;p&gt;ssh sur une mauvaise connexion, c'est chiant. Tu te dis "pfff, je vais installer mosh", montre moi comment tu fais passer tes paquets UDP de mosh sur Tor qui est tcp-only.&lt;/p&gt;
&lt;p&gt;Quand je disais que pour les autres services, c'était plus simple, c'est parce que les autres services ne sont pas interactif comme ssh. Donc ça sera plus lent que sur vanilla net mais ça marche.&lt;/p&gt;
&lt;h3&gt;Que faire ?&lt;/h3&gt;
&lt;p&gt;C'est là qu'on reconnait qu'OpenSSH-server a été codé par quelqu'un d'OpenBSD : il est complet et a une syntaxe simple &lt;code&gt;&amp;lt;/prosélitisme&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ man ssh
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
     -R &lt;span class="o"&gt;[&lt;/span&gt;bind_address:&lt;span class="o"&gt;]&lt;/span&gt;port:host:hostport
         Specifies that the given port on the remote &lt;span class="o"&gt;(&lt;/span&gt;server&lt;span class="o"&gt;)&lt;/span&gt; host is to be forwarded to the given host
         and port on the &lt;span class="nb"&gt;local&lt;/span&gt; side.  This works by allocating a socket to listen to port on the remote
         side, and whenever a connection is made to this port, the connection is forwarded over the
         secure channel, and a connection is made to host port hostport from the &lt;span class="nb"&gt;local&lt;/span&gt; machine.
&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On est connecté sur la machine derrière le NAT et on entre la commande :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;machinenatée$ ssh -R 19999:localhost:22 user@pclocal
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Boooootstrap \o/&lt;/h3&gt;
&lt;p&gt;Dans un autre terminal, on tape &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pclocal$ ssh user@localhost -p 19999
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et hop on est connecté directement sans passer par Tor.&lt;/p&gt;
&lt;h2&gt;Petite précaution&lt;/h2&gt;
&lt;p&gt;Les hidden services sont récupérables plutôt facilement (on monte un relais, on attend 24 heures pour avoir le flag HSDIR et ... je ne sais pas la suite mais il me semble que c'est simple à faire :p).&lt;/p&gt;
&lt;p&gt;Quand on se connecte sur le .onion, la machine voit comme hote distant localhost. Comme il y a toutes les chances que vous ne filtrez pas sur &lt;code&gt;lo0&lt;/code&gt;, rien n'empêche le bruteforce.&lt;/p&gt;
&lt;p&gt;On peut sans doute faire écouter l'&lt;em&gt;hidden service&lt;/em&gt; sur une IP locale qu'on met en alias sur l'interface du serveur comme ça on peut filtrer sur cette IP. Mais là encore, si quelqu'un la brute force et il ne faut pas qu'elle soit bloquée éternellement sinon vous subirrez aussi le blocage.&lt;/p&gt;</content><category term="Tor"></category><category term="auto-hébergement"></category><category term="ssh"></category><category term="NAT"></category></entry><entry><title>Vive les gauffres</title><link href="https://oldblog.chown.me/blog/vive-les-gauffres.html" rel="alternate"></link><published>2013-08-02T10:20:00-04:00</published><updated>2013-08-02T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-08-02:/blog/vive-les-gauffres.html</id><summary type="html">&lt;p&gt;Auto-héberger son serveur gopher chez soi c'est inut^W possible&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Installons un serveur gopher&lt;/h2&gt;
&lt;p&gt;Il y a un petit moment &lt;a href="http://wxcvbn.org/~jca/"&gt;jca&lt;/a&gt; a pasté gopher://tetaneutral.net sur un des chans irc. Le temps de trouver un navigateur qui permet encore d'utiliser gopher et je trouvais ça marrant.&lt;/p&gt;
&lt;h2&gt;Tu n'as vraiment que ça à faire ? &lt;code&gt;insert clueless smiley&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Ouais je trouvais ça marrant à faire.&lt;/p&gt;
&lt;p&gt;J'y ai repensé hier en voyant &lt;a href="https://image.guim.co.uk/sys-images/Guardian/Pix/audio/video/2013/7/31/1375269604628/KS8-001.jpg"&gt;cette slide&lt;/a&gt; de xkeyscore. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Why are we interested in HTTP ?
Because nearly everything a typical user does on the Internet uses HTTP
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Je me suis dit que même si c'était techniquement super facile d'intercepter ce qu'il se passe sur gopher:// vu que personne (ou presque) ne l'utilise, en pratique personne ne doit écouter ce qu'il se passe.&lt;/p&gt;
&lt;p&gt;Protip: On est vendredi.&lt;/p&gt;
&lt;h2&gt;Installons le serveur gopher&lt;/h2&gt;
&lt;p&gt;On regarde ce qu'il y a dans l'arbre des ports :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;/usr/ports$ make search key=gopher
Port:   gophernicus-1.4p0
Path:   net/gophernicus
Info:   modern gopher server
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Pour l'installer on utilise soit les ports&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd net/gophernicus
make install
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ou les packages&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pkg_add gophernicus
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On lit la doc qui explique comment faire, c'est à dire copier une ligne de conf (quand je vous dis qu'OpenBSD c'est facile).&lt;/p&gt;
&lt;h2&gt;Et tu lis comment ton gopher ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Via &lt;a href="https://en.wikipedia.org/wiki/Lynx_%28web_browser%29"&gt;lynx&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Via &lt;a href="https://addons.mozilla.org/fr/firefox/addon/overbiteff/"&gt;un plugin pour Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Via &lt;a href="http://gopherproxy.meulie.net/chown.me/"&gt;un proxy&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et oui, installer un serveur gopher m'a permis de &lt;a href="https://twitter.com/meulie/status/363053305703833601"&gt;me faire un copaing sur twitter&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Todo&lt;/h2&gt;
&lt;p&gt;Bah rajouter du contenu sur le serveur, j'ai pas encore très bien compris comment fonctionnait la &lt;em&gt;gophermap&lt;/em&gt;. &lt;/p&gt;
&lt;h2&gt;Note&lt;/h2&gt;
&lt;p&gt;Le titre de l'article vient &lt;a href="http://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/Gopher"&gt;du nom du serveur gopher qu'a installé tetaneutral.net&lt;/a&gt;&lt;/p&gt;</content><category term="auto-hébergement"></category><category term="gopher"></category></entry><entry><title>Faire des graphes à partir des infos de pf</title><link href="https://oldblog.chown.me/blog/faire-des-graphes-a-partir-des-infos-de-pf.html" rel="alternate"></link><published>2013-07-27T10:20:00-04:00</published><updated>2013-07-27T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-07-27:/blog/faire-des-graphes-a-partir-des-infos-de-pf.html</id><summary type="html">&lt;p&gt;Avoir des beaux (ou pas) graphes à partir des infos que donne pf.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;pfstat&lt;/h2&gt;
&lt;p&gt;Comme je l'ai dit dans &lt;a href="du-wifi-sur-l-alix.html"&gt;mon article sur le wifi et l'alix&lt;/a&gt;, dans le bouquin sur &lt;a href="https://en.wikipedia.org/wiki/PF_%28firewall%29"&gt;pf&lt;/a&gt; que j'ai, un certain nombre d'outils est évoqué dont &lt;a href="http://www.benzedrine.cx/pfstat.html"&gt;pfstat&lt;/a&gt;. Ça avait l'air marrant à faire surtout avec mes contraintes donc je me suis lancé.&lt;/p&gt;
&lt;h3&gt;Quelles contraintes ?&lt;/h3&gt;
&lt;p&gt;Sur mon alix, le seul moyen de stockage que j'ai, c'est la carte CompactFlash. Or ces cartes CF sont connues pour ne pas supporter trop d'écriture. Il existe &lt;a href="http://blog.spoofed.org/2007/12/openbsd-on-soekris-cheaters-guide.html"&gt;des possibilités pour utiliser la carte en read only&lt;/a&gt; mais j'ai la flemme de m'en occuper et puis &lt;a href="http://openbsd.org/faq/fr/faq14.html#flashmemBoot"&gt;ce problème n'en est qu'un parmi d'autres&lt;/a&gt;. De plus pfstat génère des images dont le but est quand même d'y accéder depuis le web et sachant que j'ai déjà nginx sur mon serveur, autant s'en occuper sur mon serveur.&lt;/p&gt;
&lt;h2&gt;pfstat et pfstatd, copains comme cochons&lt;/h2&gt;
&lt;p&gt;(Je tire cette utilisation de &lt;a href="http://www.unixgarden.com/index.php/gnu-linux-magazine-hs/ipsec-sous-openbsd-40#5-ipsecctl-et-isakmpd-copains-comme-cochons"&gt;cet article&lt;/a&gt;. Je trouve ça marrant de mettre des expressions comme celle-ci dans un article technique.)&lt;/p&gt;
&lt;p&gt;Le but est de récupérer les données de pf de l'alix &lt;em&gt;sur&lt;/em&gt; le serveur. C'est là qu'intervient pfstatd. On lit la description dans la &lt;a href="http://www.benzedrine.cx/pfstatd.txt"&gt;man page&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; The pfstatd daemon queries statistics from the packet filter device pf(4)
 and returns them in text form to network clients (like pfstat) connecting
 through TCP.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On installe donc pfstatd sur l'alix. On ajoute dans &lt;code&gt;/etc/rc.conf.local&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pfstatd_flags=&amp;quot;-a 10.19.18.1&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite on lance le daemon avec &lt;code&gt;/etc/rc.d/pfstatd start&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On peut tester avec un telnet 10.19.18.1 9999, normalement ça donne &lt;em&gt;plein&lt;/em&gt; de lignes. &lt;/p&gt;
&lt;p&gt;Il faut bien dire à pf, quelle interface il faut logguer, donc dans &lt;code&gt;/etc/pf.conf&lt;/code&gt; il faut quelque chose du genre&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;set loginterface pppoe0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite, sur le serveur, on install pfstat.&lt;/p&gt;
&lt;p&gt;Dans &lt;code&gt;/etc/pfstat.conf&lt;/code&gt; on met ce qu'on souhaite comme courbes. &lt;a href="http://www.benzedrine.cx/pfstat.conf"&gt;Un exemple est disponible sur le site de l'auteur&lt;/a&gt; et je vous mets &lt;a href="http://chown.me/pfstat.conf.txt"&gt;celui que j'utilise actuellement&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite on utilise les commandes :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pfstat -q -d /var/db/pfstat.db -r 10.19.18.1
pfstat -p -d /var/db/pfstat.db
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;La première sert à créer pfstat.db en prenant les infos de l'alix. La deuxième sert à créer les courbes à partir de la DB. Si tout se passe bien, on crontab tout ça.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;*       *       *       *       *       /usr/local/bin/pfstat -q -d /var/db/pfstat.db -r 10.19.18.1
*/5     *       *       *       *       /usr/local/bin/pfstat -p -d /var/db/pfstat.db
25      3       *       *       *       /usr/local/bin/pfstat -t 30 -d /var/db/pfstat.db
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Vu que la DB grandit indéfiniment, ce n'est pas bon. On rajoute donc la dernière ligne pour qu'elle supprime les données de plus de 30 jours.&lt;/p&gt;
&lt;h2&gt;Et pour le web&lt;/h2&gt;
&lt;p&gt;On crée un sous domaine, par exemple, pfstat.tondomaine.tld. Ensuite on rajoute dans nginx.conf les vhosts et on reload. Enfin, on crée une page index.html qui affiche les images.&lt;/p&gt;
&lt;p&gt;On obtient &lt;a href="http://pfstat.chown.me/"&gt;ça&lt;/a&gt;. Je vais peut-être changer les courbes que j'affiche.&lt;/p&gt;
&lt;p&gt;Voilà, je vais pouvoir faire comme Octave interdire github et regarder les mails sortants^W^W^W^W^W^W^W et &lt;a href="https://twitter.com/olesovhcom/status/358680999162433536/photo/1"&gt;tweeter des courbes de traffic&lt;/a&gt;.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="pf"></category><category term="pfstat"></category></entry><entry><title>Du Wifi sur l'alix</title><link href="https://oldblog.chown.me/blog/du-wifi-sur-l-alix.html" rel="alternate"></link><published>2013-07-14T10:20:00-04:00</published><updated>2013-07-14T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-07-14:/blog/du-wifi-sur-l-alix.html</id><summary type="html">&lt;p&gt;Un peu marre des noeuds avec mon RJ45, je me suis fait du wifi avec mon Alix.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;L'ethernet c'est bien mais ...&lt;/h2&gt;
&lt;p&gt;Ayant marre des noeuds quand je vais dans mon lit avec mon laptop, je me suis fait du wifi. Bon bien sûr ce n'est qu'un prétexte, la vraie raison c'est que j'adore apprendre, donc je lis des bouquins comme &lt;a href="http://nostarch.com/pf2.htm"&gt;&lt;em&gt;A No-Nonsense Guide to the OpenBSD Firewall&lt;/em&gt;&lt;/a&gt;. Le problème avec ce genre de bouquins, c'est qu'ils décrivent un certain nombre de setups et ce, suffisamment bien pour me donner envie de &lt;a href="alice-in-wonderlan.html"&gt;les reproduire même si j'en ai pas besoin&lt;/a&gt;. Mais bon c'est fun, je m'amuse donc je le fais. &lt;/p&gt;
&lt;h2&gt;Le setup&lt;/h2&gt;
&lt;p&gt;Possédant une clé wifi D-Link DWA-110 (avant mon desktop étant loin de la box, j'utilisais du wifi) ne servant à rien je me suis dit que j'allais la réutiliser.&lt;/p&gt;
&lt;h3&gt;Hahaha ... hum. OpenBSD a vraiment des drivers pour les clés wifi ?&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://openbsd.org/faq/fr/faq6.html#Wireless"&gt;Oui OpenBSD supporte des clés wifi&lt;/a&gt;. En lisant les manpages des drivers on a la liste des models supportés. Dans &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=rum&amp;amp;sektion=4"&gt;rum(4)&lt;/a&gt; on voit &lt;code&gt;D-Link DWA-110&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Et ensuite ?&lt;/h3&gt;
&lt;p&gt;Une fois branchée sur l'alix on devrait la voir dans ifconfig.&lt;/p&gt;
&lt;p&gt;Pour créer l'AP wifi, on crée un fichier /etc/hostname.rum0&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;up mediaopt hostap mode 11g chan 1 nwid ILovePuffy
inet 10.19.19.1/24
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ici on crée un AP sur le canal 1, en mode 11g et avec comme nom "ILovePuffy" (j'avais la flemme de réfléchir à nom, du coup j'ai pris celui du noeud Tor).&lt;/p&gt;
&lt;p&gt;Ensuite on ajoute dans /etc/dhcpd.conf&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;subnet&lt;/span&gt; &lt;span class="nt"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;19&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;19&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;0&lt;/span&gt; &lt;span class="nt"&gt;netmask&lt;/span&gt; &lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;255&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;255&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;option&lt;/span&gt; &lt;span class="err"&gt;routers&lt;/span&gt; &lt;span class="err"&gt;10.19.19.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="err"&gt;range&lt;/span&gt; &lt;span class="err"&gt;10.19.19.101&lt;/span&gt; &lt;span class="err"&gt;10.19.19.221&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="err"&gt;host&lt;/span&gt; &lt;span class="err"&gt;laptopwifi&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;hardware&lt;/span&gt; &lt;span class="err"&gt;ethernet&lt;/span&gt; &lt;span class="err"&gt;00:11:22:33:44:55&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="err"&gt;fixed-address&lt;/span&gt; &lt;span class="err"&gt;10.19.19.40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Mais tu ne vas pas laisser tout le monde se connecter, si ?&lt;/h3&gt;
&lt;p&gt;Je ne crois pas en la sécurité des wifi tels que &lt;em&gt;WEP&lt;/em&gt; (:p). Par contre j'ai confiance en SSH. Oui SSH, je te vois hausser les sourcils, mais &lt;a href="http://openbsd.org/faq/pf/fr/authpf.html"&gt;oui avec OpenBSD on peut&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Du coup ça se fait avec /etc/pf.conf. J'ai pas mal galéré à vouloir faire quelque chose de compliqué. Je suis revenu à quelque chose de plus &lt;a href="https://en.wikipedia.org/wiki/KISS_principle"&gt;KISS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Quand un user se connecte, son ip va automatiquement dans la table &lt;code&gt;&amp;lt;authpf_users&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;match out on $ext_if inet from &amp;lt;authpf_users&amp;gt; nat-to $ip_publique
pass in on $wifi_if proto tcp from !&amp;lt;authpf_users&amp;gt; to any rdr-to $server port 9050
pass in on $wifi_if proto tcp from !&amp;lt;authpf_users&amp;gt; to any port { 80, 443 } rdr-to (self) port 80
pass in on $wifi_if proto tcp to 10.19.19.1 port ssh
pass in on $wifi_if proto { tcp, udp } to $server port domain
pass on $wifi_if from &amp;lt;authpf_users&amp;gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Je pense que pf est assez clair pour ne pas expliquer les règles. Vous devez vous demander pourquoi je redirige tout le traffic qui n'est pas web vers mon serveur sur le port 9050 et le traffic web vers l'alix sur le port 80.&lt;/p&gt;
&lt;h3&gt;Fournir (temporairement) un accès internet, oui, assumer les conneries des autres non.&lt;/h3&gt;
&lt;p&gt;Du coup, le traffic web je le redirige vers une page web sur l'alix qui explique que l'user n'aura pas accès à Internet sans passer par Tor que pour se faire il doit configurer son navigateur pour utiliser un proxy socks 4a ou 5 sur l'ip de mon serveur et le port 9050. &lt;a href="http://www.unixgarden.com/index.php/gnu-linux-magazine/mise-en-place-d-un-reseau-wifi-ouvert#r%C3%A9sultats-et-premiers-tests-monde-de-m"&gt;Étant confiant dans le fait que les gens n'y arriveront pas&lt;/a&gt; j'ai aussi expliqué comment me contacter.&lt;/p&gt;
&lt;p&gt;Du coup on edit /etc/tor/torrc pour que Tor sur mon serveur accepte de faire passer le traffic venant du wifi.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;SocksPort 9050 
SocksPort 10.19.18.17:9050 
SocksPolicy accept 10.19.18.0/23
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Pour finir, on crée les users&lt;/h3&gt;
&lt;p&gt;Pour que l'authentification par SSH fonctionne, il faut que l'user soit dans une classe de login particulière &lt;code&gt;authpf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Quand on crée un user via adduser(8) on a &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Login class authpf bgpd daemon default staff [default]:
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Il suffit de choisir authpf et c'est bon. On peut personnalisser la classe comme je vous en ai parlé rapidement &lt;a href="utiliser-une-yubikey-sur-OpenBSD.html"&gt;là&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On peut personnaliser le MOTD par exemple, je me suis crée un user wifi pour mon laptop :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ cat /etc/authpf/users/wifi/authpf.message  
Attention au cresson !!
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="http://blogs.univ-poitiers.fr/n-yeganefar/2013/06/02/wifi-et-cresson-ne-maltraitons-pas-la-science/"&gt;(C'est une petite private joke, à propos d'une pseudo-expérience sur la nocivité du wifi)&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Et finalement&lt;/h3&gt;
&lt;p&gt;On se connecte au wifi qui n'a pas de mot de passe puis sur le laptop :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;ssh&lt;/span&gt; &lt;span class="n"&gt;wifi&lt;/span&gt;&lt;span class="mf"&gt;@10.19.19.1&lt;/span&gt;
&lt;span class="n"&gt;Last&lt;/span&gt; &lt;span class="nl"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Sun&lt;/span&gt; &lt;span class="n"&gt;Jul&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;04&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;07&lt;/span&gt; &lt;span class="mi"&gt;2013&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="mf"&gt;10.19.19.40&lt;/span&gt;

&lt;span class="n"&gt;Hello&lt;/span&gt; &lt;span class="n"&gt;wifi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="n"&gt;authenticated&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;10.19.19.40&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;Attention&lt;/span&gt; &lt;span class="n"&gt;au&lt;/span&gt; &lt;span class="n"&gt;cresson&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Ce qu'il reste à faire&lt;/h2&gt;
&lt;p&gt;Changer l'antenne, la portée de la clé est désastreuse. La vitesse est limitée à 100 ko/s je ne sais pas pourquoi et quand la limite est atteinte, c'est du First In First Out pas du tout efficace (et je ne me vois pas mettre de la QoS sur mon LAN).&lt;/p&gt;
&lt;p&gt;Rajouter des warnings pour les éventuels users sur ce qu'est Tor et les problèmes qu'il peut causer. Mais bon vu la portée je ne crois pas qu'il y a vraiment des gens qui puissent se connecter à mon AP wifi, pour l'instant.&lt;/p&gt;</content><category term="OpenBSD"></category><category term="Tor"></category><category term="Alix"></category><category term="ssh"></category><category term="pf"></category></entry><entry><title>Comment puis-je aider le réseau Tor</title><link href="https://oldblog.chown.me/blog/comment-puis-je-aider-le-reseau-tor.html" rel="alternate"></link><published>2013-07-10T10:20:00-04:00</published><updated>2013-07-10T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-07-10:/blog/comment-puis-je-aider-le-reseau-tor.html</id><summary type="html">&lt;p&gt;À force d'avoir toujours cette même question, je vais y répondre une fois pour toute.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Autour de &lt;a href="https://nos-oignons.net/"&gt;nos-oignons&lt;/a&gt; (sur des &lt;a href="https://nos-oignons.net/Contact/index.fr.html"&gt;chans&lt;/a&gt;, sur des &lt;a href="https://nos-oignons.net/mailman/listinfo"&gt;mailing lists&lt;/a&gt; ou même à PSES) j'entends souvent "comment puis-je aider ? en ayant un noeud de sorti Tor chez moi ?" Voici mes réponses.&lt;/p&gt;
&lt;h2&gt;Avoir un noeud Tor sur ma ligne ADSL ou autre techno avec &amp;lt; 6mbps de upload&lt;/h2&gt;
&lt;p&gt;Déjà, cela se fait à condition d'avoir un serveur &lt;a href="faisabilit%C3%A9-de-l%27auto-h%C3%A9bergement.html"&gt;auto-hébergé&lt;/a&gt; (mais ça peut très bien être un Raspberry Pi). Si vous pensez mettre le noeud sur un pc qui tournera uniquement s'il est allumé/connecté, perdez pas votre temps, votre relais ne sera pas utilisé :&lt;/p&gt;
&lt;p&gt;Quand un noeud se connecte il s'annonce aux serveurs Tor qui font autorité tel que &lt;a href="https://atlas.torproject.org/#details/7BE683E65D48141321C5ED92F075C55364AC7123"&gt;Dannenberg&lt;/a&gt;. Ces serveurs établissent un consensus avec le poids des différents relais. Ensuite lorsqu'un client Tor se connecte, il construit ses circuits en fonction du poids de se relais. &lt;/p&gt;
&lt;p&gt;Afin de résister aux attaques, le poids augmente avec le temps (jusqu'à une limite hein). Pour arriver à utiliser toute la capacité d'un petit noeud, c'est un ou deux jours, pour les gros noeuds (100Mbps ou +) c'est au moins de l'ordre de la semaine.&lt;/p&gt;
&lt;p&gt;Sauf que si le noeud se coupe à chaque fois (je passe sur le fait que si vous ne laissez pas les 30 secondes au noeud pour s'arrêter, vous coupez des connexions) le noeud n'aura jamais beaucoup de poids donc les clients éviteront de créer des circuits avec. CQFD.&lt;/p&gt;
&lt;h3&gt;Un noeud de sorti&lt;/h3&gt;
&lt;p&gt;Je trouve ça totalement stupide de faire tourner un noeud de sorti Tor chez soit. Cela vous amuse peut-être de prendre le risque de vous faire saisir votre matériel informatique, pas moi.
Pour info c'est déconseillé dans la &lt;a href="https://www.torproject.org/eff/tor-legal-faq.html.en"&gt;FAQ de Tor&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Un relais simple alors ?&lt;/h3&gt;
&lt;p&gt;Non, je ne pense pas que ça vaille la peine d'en configurer un (à la limite faites le pour le fun). Ça apporte très peu de &lt;a href="http://www.bortzmeyer.org/capacite.html"&gt;capacité&lt;/a&gt; au réseau et avec de la latence (25 ms au mieux, beaucoup plus éventuellement). Cette latence multipliée par tous les &lt;a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment"&gt;handshakes&lt;/a&gt; peut ralentir une connexion, pas de beaucoup mais quand même. &lt;/p&gt;
&lt;p&gt;Malgré tout ça, j'ai un &lt;a href="https://atlas.torproject.org/#details/9AFB2C97F17D85795DF4FFE87206BEE42126B957"&gt;relais chez moi&lt;/a&gt; mais je ne pense pas que ce soit vraiment le meilleur moyen d'aider (le réseau) Tor.&lt;/p&gt;
&lt;h2&gt;Et sur ma fibre ? (avec 50 Mbps de upload)&lt;/h2&gt;
&lt;p&gt;Là c'est déjà mieux puisqu'on peut atteindre des débits beaucoup plus important et avec beaucoup moins de latence. Mais gardez en tête ce que j'ai expliqué avant, ne le faites pas sur un pc qui n'a pas vocation à avoir du réseau H24 ni en noeud de sorti si vous voulez éviter les problèmes.&lt;/p&gt;
&lt;h2&gt;Qu'est ce que je peux faire alors ?&lt;/h2&gt;
&lt;h3&gt;Monter de gros relais&lt;/h3&gt;
&lt;p&gt;Je ne vais pas vous en parler parce que &lt;a href="http://koolfy.be"&gt;koolfy&lt;/a&gt; a déjà fait &lt;a href="http://koolfy.be/2013/01/27/well-need-a-bigger-onion/"&gt;un très bon article dessus&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Mais j'ai pas les connaissances techniques /o\ !&lt;/h3&gt;
&lt;p&gt;Dans ce cas tu peux &lt;a href="https://nos-oignons.net/Donnez/index.fr.html"&gt;donner à Nos oignons&lt;/a&gt; ou à &lt;a href="http://www.indiegogo.com/projects/tor-anti-censorship-and-anonymity-infrastructure"&gt;l'ensemble des &lt;em&gt;Not for profit&lt;/em&gt; dans son genre et recevoir des goodies&lt;/a&gt; ou en &lt;a href="http://www.printfection.com/torprojectstore"&gt;achetant les goodies du Tor project&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Mais je suis pôôôvre /o\^2&lt;/h3&gt;
&lt;p&gt;Tu peux parler autour de toi du réseau Tor, le plus de personnes l'utilisent, meilleur est l'anonymat. &lt;/p&gt;
&lt;p&gt;Tu peux aussi &lt;a href="https://nos-oignons.net/Participez/"&gt;t'investir dans les assos qui supportent Tor&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;C'est tout ?&lt;/h3&gt;
&lt;p&gt;Non bien sûr que non. &lt;/p&gt;
&lt;p&gt;Tu peux (source &lt;a href="https://www.torproject.org/getinvolved/volunteer.html.en"&gt;cette page&lt;/a&gt;) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Traduire les pages et compléter la documentation déjà existante (par exemple, comment utilisez tel logiciel avec Tor, quel logiciel est utile dans quelle situation etc).&lt;/li&gt;
&lt;li&gt;Créer une vidéo sur les utilisations positives de Tor&lt;/li&gt;
&lt;li&gt;Créer des posters ayant pour thème "Tor for Freedom"&lt;/li&gt;
&lt;li&gt;etc ...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour finir, depuis le 03 juillet, il y a le &lt;a href="https://trac.torproject.org/projects/tor/wiki/TorWeeklyNews"&gt;Tor weekly news&lt;/a&gt;. La petite équipe qui a fait les deux premier épisodes (&lt;a href="https://lists.torproject.org/pipermail/tor-talk/2013-July/028770.html"&gt;premier&lt;/a&gt; et &lt;a href="https://lists.torproject.org/pipermail/tor-talk/2013-July/028898.html"&gt;deuxième&lt;/a&gt;) a vraiment fait un travail &lt;strong&gt;génial&lt;/strong&gt;. C'est vraiment beaucoup de boulot donc n'hésitez pas à participer à la conception.&lt;/p&gt;</content><category term="Tor"></category><category term="auto-hébergement"></category></entry><entry><title>HTTPS, sslh et bypass de proxy</title><link href="https://oldblog.chown.me/blog/https-sslh-et-bypass-de-proxy.html" rel="alternate"></link><published>2013-07-06T10:20:00-04:00</published><updated>2013-07-06T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-07-06:/blog/https-sslh-et-bypass-de-proxy.html</id><summary type="html">&lt;p&gt;Mise en place du ssl pour mon blog, tout en gardant la possibilité de faire du ssh sur le port 443 pour outrepasser les proxys&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Petites explications&lt;/h2&gt;
&lt;p&gt;Je passe une partie de ma vie derrière un proxy qui bloque le
port 22. Ce n'est pas une raison pour ne pas me connecter en ssh à mon
serveur. Jusqu'à maintenant, j'avais une redirection sur mon routeur
443 -&amp;gt; 22. Sauf que depuis que j'ai mon blog, je me suis dit que ça
serait cool d'avoir du ssl (parce que c'est bien, et parce que le
mettre en place, me ferait apprendre des choses) d'autant plus que je
compte un jour avoir un webmail (mais c'est pas pour tout de suite).&lt;/p&gt;
&lt;p&gt;Un jour &lt;a href="https://twitter.com/vivienmoreau"&gt;vpm&lt;/a&gt; m'a parlé de sslh qui
permet d'avoir du ssh et du ssl sur le port 443. N'ayant pas l'utilité
à l'époque, j'ai gardé le nom en me disant que ça pouvait être
pratique.&lt;/p&gt;
&lt;h2&gt;Mise en place du https sur OpenBSD&lt;/h2&gt;
&lt;p&gt;As usual c'est dans la
&lt;a href="http://openbsd.org/faq/fr/faq10.html#HTTPS"&gt;FAQ&lt;/a&gt;. Juste pour les
commandes d'openssl car j'utilise nginx.&lt;/p&gt;
&lt;p&gt;Pour nginx il suffit juste de rajouter dans /etc/nginx/nginx.conf&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;listen&lt;/span&gt;       &lt;span class="err"&gt;8443&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;server_name&lt;/span&gt;  &lt;span class="err"&gt;blog.chown.me&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;root&lt;/span&gt;         &lt;span class="err"&gt;/var/www/pelican&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="err"&gt;ssl&lt;/span&gt;                  &lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="err"&gt;ssl_certificate&lt;/span&gt;      &lt;span class="err"&gt;/etc/ssl/server.crt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="err"&gt;ssl_certificate_key&lt;/span&gt;  &lt;span class="err"&gt;/etc/ssl/private/server.key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="err"&gt;ssl_session_timeout&lt;/span&gt;  &lt;span class="err"&gt;5m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="err"&gt;ssl_protocols&lt;/span&gt;  &lt;span class="err"&gt;SSLv2&lt;/span&gt; &lt;span class="err"&gt;SSLv3&lt;/span&gt; &lt;span class="err"&gt;TLSv1&lt;/span&gt; &lt;span class="err"&gt;TLSv1.1&lt;/span&gt; &lt;span class="err"&gt;TLSv1.2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;ssl_ciphers&lt;/span&gt;  &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;aNULL&lt;/span&gt;&lt;span class="o"&gt;:!&lt;/span&gt;&lt;span class="n"&gt;MD5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;ssl_prefer_server_ciphers&lt;/span&gt;   &lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite on peut vérifier avec
https://www.ssllabs.com/ssltest/analyze.html?d=blog.chown.me (je
remercie &lt;a href="https://twitter.com/PoolpOrg"&gt;Gilles&lt;/a&gt; pour le lien) que les
options marchent bien. Ça ne sert à rien de cliquer, j'ai des règles
anti-ddos (me demandez pas pourquoi) et donc ssllabs se fait bloquer
rapidement.&lt;/p&gt;
&lt;p&gt;Dans mon cas j'ai un F parce que mon cert n'est pas signé et un A si
on ne prend pas en compte ce problème.&lt;/p&gt;
&lt;h2&gt;Bah pourquoi tu n'as pas de certificat signé ?&lt;/h2&gt;
&lt;p&gt;Parce que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;c'est payant&lt;/li&gt;
&lt;li&gt;j'ai la flemme de m'en faire un via CACERT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et surtout parce que c'est une histoire de confiance. Je n'ai aucune
raison d'avoir confiance en une boite pour un certificat. Qui me dit
qu'elle ne va pas vendre (ou donner) un faux certificat à un état pour
faire du
&lt;a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack"&gt;MITM&lt;/a&gt; sans
problème ? Oui à l'échelle d'un blog comme le mien la proba est de 0
pour un site comme gmail, la question c'est juste combien ils en font
par an.&lt;/p&gt;
&lt;p&gt;Ensuite on peut prendre en compte le fait qu'elles se font de temps en
temps trouer. Bref, je n'ai aucune raison de leur donner de l'argent.&lt;/p&gt;
&lt;p&gt;Je fais beaucoup plus confiance aux chiffres (je suis plutôt
cartésien). Du coup je donne les fingerprints signés par ma clé gpg :
&lt;a href="https://chown.me/iota/fingerprint.asc.txt"&gt;iota.chown.me/fingerprint.asc.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On en revient à une question de confiance, comment savez vous que
c'est bien ma clé ? Bah simple y a des gens qui l'ont signé (pas
beaucoup mais ça progresse).&lt;/p&gt;
&lt;h2&gt;«Talk is cheap show me the code»&lt;/h2&gt;
&lt;p&gt;Maintenant qu'on a un serveur qui acceptent du HTTPS sur le port 8443
(c'est bloqué par pf, donc n'essayez pas) installons sslh qui est dans
les ports en version 1.11 (la dernière version est la 1.14 :/)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd /usr/port/net/sslh
make install
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;À la fin de l'install on est notifié de l'installation de deux scripts
dans /etc/rc.d/ : sslh_fork et sslh_select&lt;/p&gt;
&lt;p&gt;En lisant la man page de sslh&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;   sslh comes in two versions: sslh-fork forks a new process for each
   incoming connection. It is well-tested and very reliable, but incurs
   the overhead of many processes. sslh-select uses only one thread, which
   monitors all connections at once.  It is more recent and less tested,
   but only incurs a 16 byte overhead per connection. Also, if it stops,
   you&amp;#39;ll lose all connections, which means you can&amp;#39;t upgrade it remotely.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;N'étant pas d'humeur joueuse, j'ai choisi de prendre sslh_fork.&lt;/p&gt;
&lt;p&gt;On édite /etc/rc.conf.local par rapport à la conf de nginx&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sslh_fork_flags=&amp;quot;--user=_sslh --listen :::443 --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:8443&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;C'est peut-être possible de laisser en 443 pour ssl, mais pas envie
d'avoir à débugger donc je ne me prends pas la tête.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;J'ai donc du ssl (avec du
&lt;a href="https://en.wikipedia.org/wiki/Perfect_forward_secrecy"&gt;Perfect Forward Secrecy&lt;/a&gt;
\o/) et en même temps je garde la capacité à outrepasser le blocage du
port 22.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gs1.wac.edgecastcdn.net/8019B6/data.tumblr.com/tumblr_m1opajuXEU1qixcq1.jpg"&gt;Great success!&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Oups j'ai pas tout vérifié&lt;/h2&gt;
&lt;p&gt;Quand je publie un article, je regarde son &lt;em&gt;succès&lt;/em&gt; avec tail -f
/var/www/logs/access.log. Là en même temps je vérifiais que https
marchait bien (toujours publier avant de vérifier, sinon c'est pas
marrant (oui je sais, je suis d'humeur joueuse, mais c'est &lt;em&gt;après
coup&lt;/em&gt;)). En regardant les logs que vois-je ? Des accès de
127.0.0.1. Ce qui est logique puisque les requêtes viennent de sslh,
qui est sur la machine.&lt;/p&gt;
&lt;p&gt;Du coup ça rend caducs mes logs puisque je ne peux pas dire qui a
accédé au serveur.&lt;/p&gt;
&lt;h3&gt;Logons sur sslh&lt;/h3&gt;
&lt;p&gt;On ajoute dans /etc/syslog.conf&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="sx"&gt;!sslh-fork&lt;/span&gt;
&lt;span class="o"&gt;*.*&lt;/span&gt;                                                     &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sslh&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Comme ça on obtient les ips dans ce fichier. (Faudra ptet que je tweak
un peu le logging parce que là je vais avoir &lt;strong&gt;beaucoup&lt;/strong&gt; de choses).&lt;/p&gt;
&lt;h3&gt;Hum, et ta règle anti ddos ?&lt;/h3&gt;
&lt;p&gt;Je vous parlais de ma règle anti-ddos du coup elle est inefficace
puisque j'ai un &lt;code&gt;set skip on lo0&lt;/code&gt;. Donc si on me bruteforce mon ssh
via le port 443, je ne peux rien faire (même si au final il n'y a que
peu de risque, puisqu'il faudrait trouver un
&lt;a href="utiliser-une-yubikey-sur-OpenBSD.htm"&gt;OTP valide&lt;/a&gt; mais bon.&lt;/p&gt;
&lt;p&gt;La solution m'est venue de vpm (toujours le même)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;vpm&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Par&lt;/span&gt; &lt;span class="n"&gt;contre&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pourquoi&lt;/span&gt; &lt;span class="n"&gt;est&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ce&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt; &lt;span class="err"&gt;ç&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;rend&lt;/span&gt; &lt;span class="n"&gt;caduque&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;anti ddos ? Tu ne filtres pas sur l&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;externe&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Donc non sur mon serveur j'ai qu'une interface, mais ... mais je peux
filtrer sur l'&lt;a href="alice-in-wonderlan.html"&gt;alix&lt;/a&gt;. \o/&lt;/p&gt;
&lt;p&gt;Je rajoute juste&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pass in on $ext_if proto tcp to $ext_if port { www, https } rdr-to $server \
keep state (max-src-conn 100, max-src-conn-rate 15/5, overload &amp;lt;brutewww&amp;gt; flush global)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et voilà &lt;em&gt;problem solved&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Et sous Debian ?&lt;/h2&gt;
&lt;p&gt;Pour les gens sous Debian
&lt;a href="https://twitter.com/iMilnb/status/353986782288814080"&gt;iMil&lt;/a&gt; m'a fait
remarquer
&lt;a href="http://bernaerts.dyndns.org/linux/210-debian-sslh"&gt;ce lien&lt;/a&gt;.&lt;/p&gt;</content><category term="blog"></category><category term="https"></category><category term="tls"></category><category term="ssh"></category><category term="OpenBSD"></category><category term="sslh"></category></entry><entry><title>Pelican tl;dr</title><link href="https://oldblog.chown.me/blog/pelican-tldr.html" rel="alternate"></link><published>2013-07-06T10:20:00-04:00</published><updated>2013-07-06T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-07-06:/blog/pelican-tldr.html</id><summary type="html">&lt;p&gt;Comment lancer son blog avec Pelican rapidement&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Disclaimer&lt;/h2&gt;
&lt;p&gt;Cet article a pour but de me rappeler (au cas où) comment mettre en
place rapidement un blog sous Pelican. En aucun cas, cela vous donne
le droit de ne pas lire
&lt;a href="https://pelican.readthedocs.org/en/latest/"&gt;la doc&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Pour installer ce soft en python, on utilise la commande&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip install pelican
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Si on souhaite écrire nos articles en utilisant la syntaxe Markdown&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip install Markdown
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Si jamais vous voulez changer le thème&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git clone https://github.com/getpelican/pelican-themes
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Mise en place du blog&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir blog ; cd blog
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On crée le squelette du site&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican-quickstart
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;en répondant aux questions.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Pour changer le thème, on ajoute la ligne dans pelicanconf.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;THEME = &amp;quot;/répertoire-où-vous-avez-passé-la-commande-git-clone/pelican-themes/dev-random&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;(en remplaçant par le nom du thème que vous voulez prendre).&lt;/p&gt;
&lt;h2&gt;Commencer le blog&lt;/h2&gt;
&lt;p&gt;On écrit éventuellement un à propos qu'on met dans&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;blog/content/pages/apropos.md
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;avec l'extension .md si vous utilisez le markdown.&lt;/p&gt;
&lt;p&gt;On écrit le premier article qu'on met dans&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;blog/content/premierarticle.md
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite, pour créer les articles/pages on lance la commande&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;make html
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Il suffit d'indiquer à votre serveur http (Apache, nginx etc)
d'utiliser le répertoire&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;blog/output/
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et normalement, c'est bon le blog doit être disponible à l'adresse que
vous avez avec votre serveur http.&lt;/p&gt;</content><category term="auto-hébergement"></category><category term="blog"></category><category term="pelican"></category></entry><entry><title>Alice in wonderlan</title><link href="https://oldblog.chown.me/blog/alice-in-wonderlan.html" rel="alternate"></link><published>2013-07-05T10:20:00-04:00</published><updated>2013-07-05T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-07-05:/blog/alice-in-wonderlan.html</id><summary type="html">&lt;p&gt;Avant d'ouvrir ce blog, j'ai fait un certain nombre de choses sur mon LAN, en voici une petite description.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Avant propos - pourquoi faire tout ça ?&lt;/h2&gt;
&lt;p&gt;Ce que j'ai fait sur mon réseau n'a aucune nécessité pour mon
&lt;a href="faisabilité-de-l'auto-hébergement.html"&gt;auto-hébergement&lt;/a&gt;. Si je l'ai
fait c'est plus par amusement, pour apprendre des choses et pour des
projets futurs. C'est aussi pour reprendre la main sur mon
réseau. J'ai ma ligne ADSL chez OVH (qui passent par SFR), et j'ai
donc une de leurs boxs. À l'époque je n'avais pas envie de faire tout
ce que j'ai finalement fait quelques mois plus tard sinon j'aurais
pris leur forfait sans box.&lt;/p&gt;
&lt;p&gt;La box n'étant pas super pratique (telnet buggé, mais apparemment que
chez moi, &lt;a href="https://en.wikipedia.org/wiki/User_error"&gt;pebkac&lt;/a&gt; et
interface web pas super conviviale) comme : jamais trouvé comment
choisir moi même l'ip que le dhcp distribue pour une mac-address,
juste pouvoir passer le lease en statique. Rien de grave, mais un peu
chiant à force. J'ai cherché à remplacer ma box.&lt;/p&gt;
&lt;p&gt;Mon but étant de trouver un routeur qui gère la session PPP (puisque
la box d'OVH en mode bridge ne le fait pas), qui firewall et NAT mon lan.&lt;/p&gt;
&lt;h2&gt;Quel remplacement pour la box&lt;/h2&gt;
&lt;p&gt;À l'époque étant déjà depuis un petit moment sur OpenBSD et
connaissant déjà les facultés de cet OS pour le réseau (en gros, c'est
juste génial) le choix de l'OS était fait.&lt;/p&gt;
&lt;p&gt;J'ai, par contre, longuement hésité sur le matériel :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soekris&lt;/li&gt;
&lt;li&gt;Alix&lt;/li&gt;
&lt;li&gt;Rajouter une carte réseau USB-RJ45 sur mon serveur&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La soekris ça coûtait cher, et à l'époque un peu trop évoluée pour ce que je voulais faire (à l'époque je ne comprenais pas l'utilité d'avoir 4 cartes réseaux :p).&lt;/p&gt;
&lt;p&gt;L'alix, plus simple et moins cher que la soekris, par contre le
stockage uniquement sur carte CompactFlash (sur un chan on m'a dit que
c'était «un peu vieux quand même», ce qui m'a bien fait hésité
:D). Par contre une faible consommation donc intéressante de ce point
de vue là. Mais le seul moyen d'installer l'OS c'est via pxeboot (ou
via lecteur de carte, mais j'en ai pas pour les CF) donc un peu
repoussant, ayant suffisamment de choses à apprendre.&lt;/p&gt;
&lt;p&gt;Rajouter une carte réseau, j'ai failli le faire, puis ça ne s'est pas
fait, j'avais pas envie de mettre les services sur le routeur et puis
c'est moins classe :p.&lt;/p&gt;
&lt;p&gt;J'ai finalement opté pour l'alix, la voyant dans
&lt;a href="https://www.youtube.com/watch?v=qYpLeqnp3ME"&gt;cette jolie rob^W boite rouge&lt;/a&gt;
j'ai pas pu résister. Je l'ai donc commandée chez
&lt;a href="http://www.gooze.eu/"&gt;gooze.eu&lt;/a&gt; étant les moins chers et vu qu'ils
sont pro-libres. J'ai été satisfait, en tout cas. Le pxeboot n'avait
pas l'air si difficile (pour cause, c'est même très simple) et ça me
ferait découvrir la préhist^W^W des choses.&lt;/p&gt;
&lt;h2&gt;Installation de l'OS sur l'Alix&lt;/h2&gt;
&lt;p&gt;Alors j'ai suivi un tuto où la personne a utilisé une Ubuntu pour
faire le pxe (i.e. tftp, dhcp etc), je me suis donc dit que j'allais
le faire avec ma Debian ... grave erreur. J'ai galéré, j'ai essayé
diverses méthodes toutes aussi infructueuses les unes que les
autres. Je me suis résigné à utiliser mon serveur sous OpenBSD, ça a
marché du premier coup ... (aucun lien avec le fait que ce soit pour
installer OpenBSD, là c'est juste donner un bail dhcp et ensuite
fournir les fichiers en tftp).&lt;/p&gt;
&lt;p&gt;Comment faire ? Tout est décrit dans la
&lt;a href="http://openbsd.org/faq/fr/faq6.html#PXE"&gt;FAQ d'OpenBSD&lt;/a&gt;, je ne vais
donc pas en parler plus que ça.&lt;/p&gt;
&lt;h2&gt;Mise en place du réseau&lt;/h2&gt;
&lt;p&gt;On a donc maintenant l'alix qui est sous OpenBSD. On prépare la conf
réseau pour préparer l'alix à s'occuper du PPP.&lt;/p&gt;
&lt;p&gt;Dans /etc/hostname.pppoe0&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;inet 0.0.0.0 255.255.255.255 NONE \
    pppoedev vr0 authproto pap \
    authname &amp;#39;login&amp;#39; authkey &amp;#39;password&amp;#39; up
dest 0.0.0.1
!/sbin/route add default -ifp pppoe0 0.0.0.1
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;(notez, que c'est donné dans le man de pppoe(4))&lt;/p&gt;
&lt;p&gt;Dans /etc/hostname.vr0 on met juste &lt;em&gt;up&lt;/em&gt;. Dans /etc/hostname.vr2,
l'interface vers mon lan&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;inet 10.19.18.1 255.255.255.0
up
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;J'ai choisi de prendre des IPs dans les 10 (for the lulz, pas de
raisons particulières) et en
&lt;a href="https://tools.ietf.org/html/rfc1918"&gt;19.18 pour faire un clin d'oeil&lt;/a&gt;
à la &lt;a href="https://en.wikipedia.org/wiki/Request_for_Comments"&gt;RFC&lt;/a&gt; qui
définit
l'&lt;a href="https://en.wikipedia.org/wiki/Private_network"&gt;adressage privé&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une fois que tout ceci est fait, on configure la box en bridge (je ne
sais plus où c'est mais y a "Setup my technicolor" et ça marche assez
bien). On branche vr0 sur le port 1 de la box et&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sh /etc/netstart
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Perso la session PPP a marché du premier coup. Je m'y attendais
tellement pas que quand ça pingait pas dehors, j'ai cru que c'était le
problème alors que c'était mon firewall/NAT (oui, c'est pf (&amp;lt;3) qui
gère le NAT) qui posait problème ...&lt;/p&gt;
&lt;h2&gt;Distribuons des IPs&lt;/h2&gt;
&lt;p&gt;On modifie /etc/dhcpd.conf&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt;  &lt;span class="nt"&gt;domain-name&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;chown.me&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;option&lt;/span&gt;  &lt;span class="nt"&gt;domain-name-servers&lt;/span&gt; &lt;span class="nt"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;19&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;17&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;8&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nt"&gt;subnet&lt;/span&gt; &lt;span class="nt"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;19&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;0&lt;/span&gt; &lt;span class="nt"&gt;netmask&lt;/span&gt; &lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;255&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;255&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;option&lt;/span&gt; &lt;span class="err"&gt;routers&lt;/span&gt; &lt;span class="err"&gt;10.19.18.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="err"&gt;range&lt;/span&gt; &lt;span class="err"&gt;10.19.18.201&lt;/span&gt; &lt;span class="err"&gt;10.19.18.221&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="err"&gt;host&lt;/span&gt; &lt;span class="err"&gt;pcfixe&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
             &lt;span class="err"&gt;hardware&lt;/span&gt; &lt;span class="err"&gt;ethernet&lt;/span&gt; &lt;span class="err"&gt;00:&lt;/span&gt;&lt;span class="n"&gt;aa&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;bb&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
             &lt;span class="err"&gt;fixed-address&lt;/span&gt; &lt;span class="err"&gt;10.19.18.30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;et dans /etc/rc.conf.local&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;dhcpd_flags=&amp;quot;&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;On démarre le serveur&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;/etc/rc.d/dhcpd start
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Mise en place du NAT et du firewall&lt;/h2&gt;
&lt;p&gt;J'ai fait ce setup depuis 2 mois et demi maintenant ce qui fait que j'ai rajouté pas mal de choses dans mon pf.conf (de la QoS par exemple) et donc c'est éloigné du simple firewall avec NAT.&lt;/p&gt;
&lt;p&gt;Cependant je vais juste vous donner les lignes pertinentes (par
rapport au sujet). C'est pas forcément utile pour quelqu'un qui veut
faire le même setup (mais dans ce cas, envoyez moi un mail, je vous
enverrais le tout) sachant que tout est expliqué dans la FAQ d'OpenBSD
(on dit que c'est la meilleure documentation d'OS qui existe :)) mais
c'est utile pour faire de la pub pour OpenBSD/pf :p.&lt;/p&gt;
&lt;p&gt;La ligne pour le NAT&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;match out on $ext_if inet from $lan_net nat-to $ip_publique
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite pour le firewall&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;block all
pass in on $int_if from $lan_net
pass out on $int_if to $lan_net
pass out on $ext_if
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Pour les redirections de port&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pass in on $ext_if proto tcp to $ext_if port $redirection_port rdr-to $server
pass in on $ext_if proto udp to $ext_if port domain rdr-to $server
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Voilà en gros.&lt;/p&gt;
&lt;p&gt;Notez que c'est une version très épurée, mon pf.conf contient beaucoup
plus de lignes, ici c'est juste un aperçu.&lt;/p&gt;
&lt;h2&gt;Pour finir&lt;/h2&gt;
&lt;p&gt;On n'oublie pas de passer&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;net.inet.ip.redirect=0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;à 1 (dans /etc/sysctl.conf pour que ça reste au reboot et via la
commande &lt;code&gt;sysctl net.inet.ip.redirect=1&lt;/code&gt;)&lt;/p&gt;
&lt;h2&gt;Bilan&lt;/h2&gt;
&lt;p&gt;Je suis satisfait de mon setup même si j'ai quelques problèmes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la QoS : le téléphone quand transmission et mon client bitcoin
  tourne, ça micro-coupe :/&lt;/li&gt;
&lt;li&gt;ipv6 : OVH fournit de l'ipv6, là j'ai pas encore pris le temps pour
  le faire tomber en marche&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mis à part ça, c'est sympa d'avoir juste à se connecter en ssh et à
éditer un fichier texte pour modifier le firewall, faire des
translations de ports etc.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;alice:~$ uptime
10:23PM  up 32 days,  3:55, 2 users, load averages: 0.19, 0.16, 0.16
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Et le titre de cet article alors ?&lt;/h3&gt;
&lt;p&gt;C'est un jeu de mot qui fait évidemment référence à &lt;em&gt;Alice in Wonderland&lt;/em&gt;, vu que ma machine s'appelle &lt;em&gt;alice&lt;/em&gt; et qu'elle est dans mon &lt;a href="https://en.wikipedia.org/wiki/Local_area_network"&gt;LAN&lt;/a&gt;.&lt;/p&gt;</content><category term="Alix"></category><category term="OpenBSD"></category><category term="pf"></category></entry><entry><title>How to use a yubikey on OpenBSD</title><link href="https://oldblog.chown.me/blog/yubikey.html" rel="alternate"></link><published>2013-06-29T10:20:00-04:00</published><updated>2013-06-29T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-06-29:/blog/yubikey.html</id><summary type="html">&lt;p&gt;How to use a yubikey on OpenBSD&lt;/p&gt;</summary><content type="html">&lt;h2&gt;What is a yubikey&lt;/h2&gt;
&lt;p&gt;A yubikey is a cryptography token. It works by emitting a one time password (OTP). For more informations, you can look on &lt;a href="http://www.yubico.com/about/intro/yubikey/"&gt;their site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My goal is to connect with ssh to my server without trusting the computer I'm on. So it's not possible to have a keypair neither to be sure there isn't any keylogger. This can be accomplished with the OTP as it's valid only once. If one try to use an OTP already use, the authentication system won't accept it making keyloggers useless.&lt;/p&gt;
&lt;h2&gt;Setting it up on OpenBSD&lt;/h2&gt;
&lt;p&gt;Sometimes, before I get into system administration, I think "oww I will have a hard time to make it working on OpenBSD" et most of the time, I'm wrong and it's really simple (that's one of the reason I love this OS). &lt;/p&gt;
&lt;p&gt;For each step, I write what I remember (I may forget things) but &lt;strong&gt;read the man pages&lt;/strong&gt; of the different software/config file which are needed in this how to, you'll certainly learn things which are usefull.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;In fact, everything is already present in the system.&lt;/p&gt;
&lt;h3&gt;Be carefull&lt;/h3&gt;
&lt;p&gt;The software present on OpenBSD only enable to verify that the OTP comes from the right yubikey and that's valid (i.e. that it wasn't already used) but it won't communicate with any server. If you apply the setup the same thing on anoter server, ince they don't communicate with each other (this might possible, but as I didn't need it, I didn't look for it) you can use an OTP that was already used on another server, it won't be able to know it.&lt;/p&gt;
&lt;h3&gt;Tell the system which key you use&lt;/h3&gt;
&lt;p&gt;You need to indicate the informations about your key : in the &lt;em&gt;Yubikey Personalization Tool&lt;/em&gt;, you need to look for &lt;em&gt;Private identity&lt;/em&gt; and &lt;em&gt;Secret key&lt;/em&gt; fields that you put in &lt;code&gt;/var/db/yubikey/user.uid&lt;/code&gt; and &lt;code&gt;/var/db/yubikey/user.key&lt;/code&gt; (with the name of &lt;strong&gt;your&lt;/strong&gt; user, of course). Next we verify that the file is owned by root:auth.&lt;/p&gt;
&lt;h3&gt;Choosing for the login you want&lt;/h3&gt;
&lt;p&gt;Everything related to the configuration of the login is in &lt;code&gt;/etc/login.conf&lt;/code&gt;. I've modified/added the following lines.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;auth-defaults:auth=passwd,yubikey:
auth-ssh-defaults:auth-ssh=yubikey:
auth-su-defaults:auth-su=yubikey,passwd:
auth-sudo-defaults:auth-sudo=passwd,yubikey:
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The first line is the different way to be authenticated by default. By default it's by password, but we can use the yubikey. For SSH it's only via yubikey. For &lt;em&gt;su&lt;/em&gt; and &lt;em&gt;sudo&lt;/em&gt;, it's with either the password or the yubikey (the default here is the yubikey for &lt;code&gt;su&lt;/code&gt; and the password for &lt;code&gt;sudo&lt;/code&gt;, you use the second way with the &lt;code&gt;-a passwd&lt;/code&gt; or &lt;code&gt;-a yubikey&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then you just need to add theses to auth classes. For instance in the default classe I added the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;:tc=auth-defaults:\
:tc=auth-ftp-defaults:\
:tc=auth-su-defaults:\
:tc=auth-ssh-defaults:\
:tc=auth-sudo-defaults:
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Now you should be able to log in your OpenBSD system with your yubikey.&lt;/p&gt;
&lt;p&gt;In &lt;em&gt;/var/log/authlog&lt;/em&gt; you should see:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Jun 28 12:38:41 manoir yubikey: user monuser: counter 300.0 &amp;gt; 299.0
Jun 28 12:38:41 manoir yubikey: user monuser: authorize
Jun 28 12:38:41 manoir sshd[1405]: Accepted password for monuser from ip.src.v.4 port 34567 ssh2
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;We can see the counter being incremented so the OTV is valid only once. If you try to use a OTP already used, you will see:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Jun 29 20:28:21 manoir yubikey: user monuser: counter 306.0 &amp;lt;= 306.0 (REPLAY ATTACK!)
Jun 29 20:28:21 manoir yubikey: user monuser: reject
Jun 29 20:28:21 manoir sshd[640]: Failed password for monuser from 10.19.18.1 port 55526 ssh2
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;So you can connect from any computer without giving it your password \o/&lt;/p&gt;</content><category term="OpenBSD"></category><category term="yubikey"></category><category term="ssh"></category></entry><entry><title>Faisabilité de l'auto-hébergement</title><link href="https://oldblog.chown.me/blog/auto-herbergement.html" rel="alternate"></link><published>2013-06-28T10:20:00-04:00</published><updated>2013-06-28T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-06-28:/blog/auto-herbergement.html</id><summary type="html">&lt;p&gt;J'entends souvent des gens qui disent que l'autohébergement est compliqué, voire impossible, voici ma réponse.&lt;/p&gt;</summary><content type="html">&lt;p&gt;J'ai lu plusieurs fois "ouais l'auto-hébergement ça ne marche pas" suivi de tout un tas d'arguments fallacieux. C'est (entre autre) l'envie de pouvoir répondre à ces arguments qui m'a motivé à monter mon blog. Manque de bol, entre temps j'ai perdu les dits-arguments, donc je vais tenter d'y répondre, je compléterai plus tard si besoin.&lt;/p&gt;
&lt;h2&gt;Les compétences techniques&lt;/h2&gt;
&lt;p&gt;Oui, pour s'auto-héberger il faut des compétences techniques en adminsys et autre. Je trouve ça marrant mais je sais que ce n'est pas le cas de tout le monde. Cet article s'adressant plus aux gens qui conseillent de s'héberger sur un serveur dédié, je ne vais pas passer plus de temps à convaincre les gens que l'informatique &lt;em&gt;c'esttropgénial&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;Pour ceux qui veulent apprendre, c'est possible, j'en suis la preuve (rien que ça :p). Il y a multitude de ressources, aussi bien des sites qui proposent des tutoriels que des gens prêts à vous aider. Les assos de la &lt;a href="http://www.ffdn.org/"&gt;FFDN&lt;/a&gt; sont aussi là pour vous aider à vous auto-héberger. &lt;/p&gt;
&lt;p&gt;En pratique, les gens de &lt;a href="http://www.franciliens.net"&gt;franciliens.net&lt;/a&gt; ont toujours répondu à mes questions. J'ai aussi envoyé des mails pour la configuration de mon &lt;a href="https://en.wikipedia.org/wiki/Message_transfer_agent"&gt;MTA&lt;/a&gt; à quelqu'un (je ne dirais pas qui pour que vous ne puissiez pas le submerger de demande (:p), ce n'est pas un manque de reconnaissance, au contraire) et à chaque fois j'avais ma réponse en moins de deux heures.
Bref il y a tout un tas de ressources pour apprendre, alors ne dites pas qu'il n'y a rien, mais plutôt que vous ne voulez pas apprendre.&lt;/p&gt;
&lt;h2&gt;La bande passante&lt;/h2&gt;
&lt;p&gt;Ça c'est un argument qui revient souvent. Certes, je connais la signification du "A" de &lt;a href="https://en.wikipedia.org/wiki/Asymmetric_digital_subscriber_line"&gt;ADSL&lt;/a&gt; mais je ne pense pas que ce soit une limite même si c'est déplorable. Les services que je pense être les services les plus importants à auto-héberger sont les mails et si besoin jabber. Ce sont deux services qui ne consomment que très peu de bande passante (je parle d'auto-hébergement pour une personne ou une famille hein, après c'est de nouveau de la centralisation de services).  &lt;/p&gt;
&lt;p&gt;Dans le cas d'un blog, c'est quand même possible de l'auto-héberger. C'est sûr que si vous commencez à avoir autant de visiteurs que &lt;a href="http://seteici.ondule.fr/"&gt;Jujusete&lt;/a&gt; (:p) ça peut devenir compliqué. Cependant ça reste une exception et je ne pense pas que le &lt;em&gt;netizen&lt;/em&gt; (terme issu du mélange de Citizen, citoyen, et Internet fait par RSF, si je ne dis pas de bêtises) moyen soit concerné par cette problématique. Quand bien même, il le serait, il peut quand même auto-héberger ses mails et son jabber.&lt;/p&gt;
&lt;h2&gt;Disponibilité&lt;/h2&gt;
&lt;p&gt;Je sais que l'adsl n'est pas super fiable, pas de SLA toussa, cependant ce n'est pas un argument. Si vous êtes dans un FAI de la FFDN, il y a de forte chance qu'il vous propose de vous servir de NS et de MX secondaire. Si jamais ce n'est pas le cas, je suis sûr que vous pouvez facilement trouver quelqu'un qui accepte de vous servir de NS et MX secondaire et inversement (je veux dire que vous deveniez à votre tour son NS et MX secondaire) (ce à quoi les trolls répondront "tu lis mon courrier et je lis le tien" :p). 
Même sans MX secondaire les MTA retentent d'envoyer les mails pendant une assez grande durée (i.e. plusieurs jours de mémoire).&lt;/p&gt;
&lt;p&gt;Pour le blog, est ce que vous pensez vraiment que c'est grave si votre blog n'est pas accessible pendant quelques heures ? Je ne pense pas.&lt;/p&gt;
&lt;h2&gt;Impossibilité(s) technique(s) dûe(s) au FAI, genre blocage du port 25&lt;/h2&gt;
&lt;p&gt;Mauvais FAI, changer FAI. 
Pour ceux qui ne peuvent pas, VPN. Next.&lt;/p&gt;
&lt;h2&gt;C'est cher&lt;/h2&gt;
&lt;h3&gt;Petite estimation des coûts&lt;/h3&gt;
&lt;p&gt;Alors pour s'auto-héberger, il faut un serveur. Un &lt;a href="http://www.raspberrypi.org/faqs"&gt;raspberry pi&lt;/a&gt; peut suffire, ça coute (FdP inclus) entre 40 et 50 euros mais ça ne sera pas forcément assez puissant pour tout le monde. Personnellement j'ai payé 250 euros &lt;a href="pages/Machines.html"&gt;mon serveur&lt;/a&gt; chez moi (tout inclus, ram, HDD, carte mère, cpu etc...).&lt;/p&gt;
&lt;p&gt;Il faut de l'électricité, via &lt;a href="http://wiki.tetaneutral.net/index.php/Mod%C3%A8le_%C3%A9conomique#Electricit.C3.A9"&gt;un savant calcul&lt;/a&gt; 1 watt en continu sur une année, ça coute 1 euros. Mon serveur consomme une vingtaine de watt, un raspberry pi en consomme 5.&lt;/p&gt;
&lt;p&gt;Il faut de la bande passante, mais je &lt;strong&gt;ne pense pas&lt;/strong&gt; que vous preniez votre ligne adsl juste pour l'auto-hébergement, donc je ne le compte pas dedans.&lt;/p&gt;
&lt;p&gt;De l'autre côté soit vous utilisez gmail ou autre et dans ce cas vous ne payez rien en euros mais vous n'avez plus de vie privée, soit vous avez un serveur dédié/vps ou autre et dans ce cas, sur le long terme je pense que l'auto-hébergement est moins cher.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;D'autre part je mets ça en conclusion même si ça n'a pas vraiment sa place, à écouter les gens c'est soit j'utilise gmail, soit je m'auto-héberge. Et bien non. On peut très bien utiliser des services &lt;strong&gt;fiables&lt;/strong&gt; fournis par des gens sérieux, pour héberger ses mails. Par exemple, riseup, toile-libre, etc ... il y en a plein.&lt;/p&gt;
&lt;p&gt;Je vous ai présenté ma réponse aux arguments, si vous n'êtes pas d'accord, &lt;a href="pages/Contact.html"&gt;envoyez moi un mail, parlez moi sur irc ou n'importe&lt;/a&gt;, je vous répondrais. ;)&lt;/p&gt;</content><category term="auto-hébergement"></category><category term="blog"></category><category term="mail"></category><category term="xmpp"></category><category term="jabber"></category></entry><entry><title>Ouverture du blog</title><link href="https://oldblog.chown.me/blog/blog.html" rel="alternate"></link><published>2013-06-15T10:20:00-04:00</published><updated>2013-06-15T10:20:00-04:00</updated><author><name>Vigdis</name></author><id>tag:oldblog.chown.me,2013-06-15:/blog/blog.html</id><summary type="html">&lt;p&gt;Voilà, dans la suite de mon travail sur l'autohébergement, je me fais un blog.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Voilà, dans la suite de mon travail sur l'autohébergement, je me fais un blog. Après l'hébergment de mon serveur xmpp, de mes mails (bien qu'une partie soit encore sous gmail et sous riseup :( ), c'est au tour du blog. Le blog est statique (généré par Pelican, comme le dit le footer) avec le thème "dev-random" que j'ai découvert (même s'il l'a modifié) sur &lt;a href="http://dustri.org/b/"&gt;le blog de jvoisin&lt;/a&gt; (l'auteur de &lt;a href="https://mat.boum.org"&gt;MAT&lt;/a&gt; que je vous invite à découvrir si vous ne le connaissez pas (mat, pas jvoisin :p)). Les pages statiques sont servies par nginx et mon serveur sous OpenBSD.&lt;/p&gt;</content><category term="pelican"></category><category term="blog"></category></entry></feed>