aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2016-06-16 15:55:15 -0300
committerSilvio Rhatto <rhatto@riseup.net>2016-06-16 15:55:15 -0300
commitd85e2ef39f0428b1263887c54b42cf9484c00c1f (patch)
tree8c8cd96c5072f3a7ed645931b71cc5917e1e3877
parent9d9180ef02ce6912cce74dbaafaeb707caa3b249 (diff)
downloadbootless-d85e2ef39f0428b1263887c54b42cf9484c00c1f.tar.gz
bootless-d85e2ef39f0428b1263887c54b42cf9484c00c1f.tar.bz2
Cleanup
-rw-r--r--Makefile2
-rw-r--r--index.mdwn78
-rw-r--r--index.pt.mdwn150
3 files changed, 49 insertions, 181 deletions
diff --git a/Makefile b/Makefile
index eca1f89..504baf7 100644
--- a/Makefile
+++ b/Makefile
@@ -19,3 +19,5 @@ web:
web_deploy:
@rsync -avz --delete www/ bootless:/var/sites/bootless/www/
+
+publish: web web_deploy
diff --git a/index.mdwn b/index.mdwn
index e768aae..af79d7b 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,44 +1,51 @@
[[!meta title="Bootless: anti-tampering bootloader"]]
-**WARNING** - this pre-alpha software with [portuguese-only docs](index.pt)!
-
* Bootless is a scheme allowing a computer with encrypted disk to stay without attached bootloader in order to make more difficult to tamper the initialization process.
* Bootless is a bootloader installed in a removable media and used to initialize computers.
* It is based on [git-annex](http://git-annex.branchable.com/) and [GNU Grub](https://www.gnu.org/software/grub/).
* Initial support is targeted to Debian like operating systems.
-* Bootless currently used in the [Hydra Suite](https://git.sarava.org/?p=hydra.git;a=summary).
Index
-----
[[!toc levels=4]]
-TODO
-----
-
-- Test:
- - [Full disk encryption with LUKS (including /boot) · Pavel Kogan](http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/).
- - [Full-Crypto setup with GRUB2](http://michael-prokop.at/blog/2014/02/28/full-crypto-setup-with-grub2/) ([2](http://archimedesden.wordpress.com/2011/10/21/yet-another-full-disk-encryption-with-ubuntu-11-10/)), which could simplify everything!
-- Cleanup and translate docs.
-- Document `cryptopts` ([1](http://www.c3l.de/linux/howto-completly-encrypted-harddisk-including-suspend-to-encrypted-disk-with-ubuntu-6.10-edgy-eft.html), [2](http://manpages.ubuntu.com/manpages/lucid/man8/initramfs-tools.8.html), [3](http://solvedlinuxissues.blogspot.com.br/2011/11/encrypted-ubuntu-filesystem-on-logical.html), [4](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=348147), [5](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=358452)), see `/usr/share/doc/cryptsetup/README.initramfs.gz` for details.
-- Setup issue tracker.
-- Add contact information.
-- Split bootless script from hydra suite but preserve integration.
-- Add pre-built and signed images.
-- Integrate with [anti-evil-maid](http://theinvisiblethings.blogspot.com.br/2011/09/anti-evil-maid.html).
-
Design
------
-We consider that a person has at least a single USB thumb drive which will be used to boot multiple operating systems in multiple machines for multiple different projects/farms (personal, work, hackerspace, etc). Then, the bootless ecosystem will be composed of several repositories glued together:
+We consider that the user has at least a single USB thumb drive which will be used to boot multiple operating systems in multiple machines for multiple different projects/farms (personal, work, hackerspace, etc). Then, the bootless ecosystem will be composed of several repositories glued together:
+
+1. The bootless software repository (if you did not installed it using a package).
+2. Main repository, used to glue together the repositories that follows.
+3. Bootloader repository (eg. GRUB modules). Does this need to be manager by git or can be generated using grub?
+4. Image repositories (can be multiple repositories).
+
+Current workflow
+----------------
+
+Based on the [Hydra Suite](https://git.fluxo.info/?p=hydra.git).
+
+Creating the repository:
+
+ hydra example bootless init ssh://gitosis@example.org/bootless.git
+ hydra example bootless make /dev/sdb1
+ hydra example bootless git pull
+ hydra example bootless git commit -a
+
+Creating an image:
+
+ hydra example bootless image
- 1. The bootless software repository (if you did not installed it using a package).
- 2. Main repository, used to glue together the repositories that follows.
- 3. Bootloader repository (eg. GRUB modules). Does this need to be manager by git or can be generated using grub?
- 4. Image repositories (can be multiple repositories).
+Create image file and record:
-Workflow
---------
+ hydra example bootless image output.img /dev/sdb
+
+Record directly:
+
+ hydra example bootless image /dev/sdb
+
+Proposed workflow
+-----------------
Initialize:
@@ -60,15 +67,24 @@ Write image to thumb drive
boootless image <device>
-References
-----------
+TODO
+----
+
+- Test:
+ - [Full disk encryption with LUKS (including /boot) · Pavel Kogan](http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/).
+ - [Full-Crypto setup with GRUB2](http://michael-prokop.at/blog/2014/02/28/full-crypto-setup-with-grub2/) ([2](http://archimedesden.wordpress.com/2011/10/21/yet-another-full-disk-encryption-with-ubuntu-11-10/)), which could simplify everything!
+- Document `cryptopts` ([1](http://www.c3l.de/linux/howto-completly-encrypted-harddisk-including-suspend-to-encrypted-disk-with-ubuntu-6.10-edgy-eft.html), [2](http://manpages.ubuntu.com/manpages/lucid/man8/initramfs-tools.8.html), [3](http://solvedlinuxissues.blogspot.com.br/2011/11/encrypted-ubuntu-filesystem-on-logical.html), [4](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=348147), [5](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=358452)), see `/usr/share/doc/cryptsetup/README.initramfs.gz` for details.
+- Split bootless script from hydra suite but preserve integration.
+- Add pre-built and signed images.
+- Integrate with [anti-evil-maid](http://theinvisiblethings.blogspot.com.br/2011/09/anti-evil-maid.html).
+
+Contact
+-------
-Git:
+Write to rhatto at riseup.net.
- * http://kerneltrap.org/mailarchive/git/2007/10/7/331471
- * http://stackoverflow.com/questions/37219/how-do-you-remove-a-specific-revision-in-the-git-history
- * http://www.alexrothenberg.com/2009/06/changing-history-with-git-rebase-how-to.html
- * http://stackoverflow.com/questions/250238/collapsing-a-git-repositorys-history
+References
+----------
Grub:
diff --git a/index.pt.mdwn b/index.pt.mdwn
deleted file mode 100644
index 2280f27..0000000
--- a/index.pt.mdwn
+++ /dev/null
@@ -1,150 +0,0 @@
-[[!meta title="Bootless: gerenciador de partida anti-grampo"]]
-
-**ATENÇÂO** - este software se encontra em estágio pré-alfa!
-
-* Bootless é uma integração tecnológica que permite um computador criptografado a permanecer sem gerenciador de partida (bootloader), de modo que grampos em software sejam difícies de serem instalados.
-* O Bootless é um gerenciador de partida em software livre instalado numa mídia removível e utilizado para inicializar computadores.
-* É baseado no [git-annex](http://git-annex.branchable.com/) e no [GNU Grub](https://www.gnu.org/software/grub/).
-* É previsto suporte inicial para o sistema operacional Debian.
-* O Bootless atualmente usa a [Hydra Suite](https://git.sarava.org/?p=hydra.git;a=summary).
-
-TODO
-----
-
-- Vide documentação inglesa.
-
-Construindo um volume bootless
-------------------------------
-
-Primeiro, prepare o dispositivo:
-
- export device=/dev/nome_do_dispositivo
- export partition=numero_da_particao
- mkfs.ext3 "$device""$partition"
- mkdir /tmp/bootless
- mount "$device""$partition" /tmp/bootless
-
-Clone o repositório bootless:
-
- git clone ssh://exemplo.org/bootless.git /tmp/bootless/boot
-
-Se você já tiver uma cópia de trabalho na sua máquina, pode ser mais interessante clonar direto dela para economizar tempo e banda, mas certifique-se de atualizá-la antes. Se houver pouco espaço na pasta de destino, faça o clone usando a opção `--depth=1`.
-
-Em seguida, instale o GRUB no MBR do dispositivo, rodando `grub` e digitando em seu shell, substituindo o nome do dispositivo e da partição conforme apropriado:
-
- root (hd1,1)
- setup (hd1)
-
-Limpe a casa:
-
- umount /tmp/bootless
- rmdir /tmp/bootless
-
-Agora seu pendrive está pronto para reinicializar os nodos físicos :)
-
-Mantendo o repositório compacto
--------------------------------
-
-Apesar de ser um repositório `git` e portanto de fácil manutenção de uma árvore distribuída, o `bootless` sofre de um problema de espaço: a cada imagem binária adicionada ou removida, o histórico do repositório cresce muito. Para evitar que o repositório cresça muito e não caiba numa pequena partição de um pendrive, é preciso reconstruir sua história.
-
-Aqui segue um exemplo usando o `git-rebase` para agregar commits. Primeiramente, faça o rebase, juntando commits com 'squash' (vide referências):
-
- git rebase -i COMMIT
-
-No caso, `COMMIT` é o commit inicial do repositório `bootless` que estamos usando. Em seguida, é preciso que o seu repositório local seja clonado pois só assim (!) é possível salvar espaço:
-
- cd ..
- mv bootless bootless.old
- git clone bootless.old bootless
- cd -
- git gc --aggressive
- git prune
- cp ../bootless.old/.git/config .git/
-
-Dependendo da situação anterior, após esse processo o repositório pode diminuir bastante de tamanho. Um grande inconveniente desse processo é que ele agride a história de modo que as outras cópias do repositório precisam de uma força para serem atualizadas:
-
- git push --force
-
-GRUB2
------
-
-Adaptei o bootless para o GRUB2 utilizando o mesmo repositório. Isso significa que:
-
- * É possível utilizar o repositório do bootless tanto com o grub-legacy quanto com o grub2.
- * O grub-legacy utiliza o arquivo `menu.lst` enquanto que o grub2 usa o `grub.cfg`. Ambos arquivos precisam ser mantidos atualizados enquanto ambas as versões do grub forem suportadas.
-
-No caso da instalação de um pendrive usando grub2, é necessário utilizar o seguinte comando de instalação ao invés de simplesmente invocar o `grub`:
-
- grub-install --root-directory=/tmp/bootless $device --force
-
-Procedimento completo de exemplo:
-
- export device=/dev/nome_do_dispositivo
- export partition=numero_da_particao
- mkfs.ext3 "$device""$partition"
- mkdir /tmp/bootless
- mount "$device""$partition" /tmp/bootless
- git clone --depth=1 ssh://gitosis@exemplo.org/bootless.git /tmp/bootless/boot
- grub-install --root-directory=/tmp/bootless $device
- umount /tmp/bootless
- rmdir /tmp/bootless
-
-Em casos emergencias pode ser muito útil usar o seguinte comando para gerar uma imagem bootavel:
-
- grub-mkrescue -o bootless.img bootless/
-
-Versões específicas de kernel
------------------------------
-
-Às vezes pode ser necessário criar manualmente a initramfs após uma atualização de kernel (reparei isso em máquinas rodando Ubuntu). Abaixo, comando para atualizar o initramfs para uma versão específica de kernel:
-
- update-initramfs -v -u -k 2.6.32-26-generic
-
-Hydra Suite
------------
-
-Criando o repositório:
-
- hydra exemplo bootless init ssh://gitosis@exemplo.org/bootless.git
- hydra exemplo bootless make /dev/sdb1
- hydra exemplo bootless git pull
- hydra exemplo bootless git commit -a
-
-Criando uma imagem:
-
- hydra exemplo bootless image
-
-Isso criará o arquivo bootless.img na pasta atual. Para especificar um nome de arquivo distinto, use
-
- hydra exemplo bootless image arquivo.img
-
-Para gerar a imagem e gravá-la simultaneamente numa mídia removível localizada em `/dev/sdb`, use
-
- hydra exemplo bootless image arquivo.img /dev/sdb
-
-Se você quiser gerar uma imagem apenas para ser gravada em `/dev/sdb`, isto é, sem um arquivo.img sobrando, use
-
- hydra exemplo bootless image /dev/sdb
-
-Customização
-------------
-
-Algo que vale a pena pensar para possíveis mudanças futuras no `bootless`: atualmente utilizamos uma nomenclatura única no `LVM` de todas as máquinas, o que permite compartilharmos a `initrd` entre os sistemas.
-
-Se utilizássemos nomes distintos para cada máquina, precisaríamos de uma `initrd` por sistema -- o que aumentaria muito o tamanho do repositório -- ou então ter alguma forma de customizar a imagem de inicialização para suportar esse esquema.
-
-Usar uma nomenclatura única simplifica a manutenção do bootless, porém pode complicar o gerenciamento de volumes, por exemplo quando quisermos abrir o disco de um servidor em outro.
-
-Temos três [alternativas](http://wiki.debian.org/InitrdReplacementOptions):
-
- * [initramfs-tools](http://packages.debian.org/stable/initramfs-tools), que é utilizado atualmente.
- * [yaird](http://packages.debian.org/sid/yaird), supostamente a ser utilizado no futuro.
- * [dracut](http://packages.debian.org/stable/dracut), uma [outra possibilidade](https://lwn.net/Articles/317793/).
-
-É preciso fuçar na documentação desses softwares para saber como a montagem de volumes pode ser customizada.
-
-O arquivo conf.d/cryptroot das initrds usadas atualmente contém o seguinte:
-
- target=root,source=/dev/mapper/vg-root,key=none,rootdev,cipher=aes-cbc-essiv:sha256
-
-O ideal seria ter várias entradas nesse arquivo. Talvez seja o caso de estudar também o `/usr/share/initramfs-tools/hooks/cryptroot`.