Intro etckeeper bup ikiwiki git-annex vcsh mr Zsh Outro. Gitify your life. web, blog, configs, data, and backups



Similar documents
Version Control with Svn, Git and git-svn. Kate Hedstrom ARSC, UAF

Version Control with. Ben Morgan

Version Control with Git. Dylan Nugent

Version Control with Git. Kate Hedstrom ARSC, UAF

Introduction to Version Control

CS 2112 Lab: Version Control

Introduction to Git. Markus Kötter Notes. Leinelab Workshop July 28, 2015

Integrated version control with Fossil SCM

Source Control Systems

Miguel A. Figueroa Villanueva Xabriel J. Collazo Mojica. ICOM 5047 Capstone Miguel A. Figueroa Villanueva University of Puerto Rico Mayagüez Campus

Version Control with Subversion and Xcode

Work. MATLAB Source Control Using Git

Using Git for Project Management with µvision

Git. A Distributed Version Control System. Carlos García Campos carlosgc@gsyc.es

Version Control with Git

Version Control with Mercurial and SSH

Version control with GIT

An Introduction to Mercurial Version Control Software

Data management on HPC platforms

Introduc)on to Version Control with Git. Pradeep Sivakumar, PhD Sr. Computa5onal Specialist Research Compu5ng, NUIT

Two Best Practices for Scientific Computing

Version Control with Git. Linux Users Group UT Arlington. Rohit Rawat

Continuous Integration. CSC 440: Software Engineering Slide #1

Introduction to Version Control with Git

Version Control Systems: SVN and GIT. How do VCS support SW development teams?

Version Control. Version Control

Introduction to the Git Version Control System

Version control with Subversion

Version Control! Scenarios, Working with Git!

Version Control Tools

Version control. HEAD is the name of the latest revision in the repository. It can be used in subversion rather than the latest revision number.

Lab Exercise Part II: Git: A distributed version control system

Software Configuration Management. Slides derived from Dr. Sara Stoecklin s notes and various web sources.

Using GitHub for Rally Apps (Mac Version)

FEEG Applied Programming 3 - Version Control and Git II

MATLAB & Git Versioning: The Very Basics

Annoyances with our current source control Can it get more comfortable? Git Appendix. Git vs Subversion. Andrey Kotlarski 13.XII.

Version Uncontrolled! : How to Manage Your Version Control

Distributed Source Code Management tools

using version control in system administration

Zero-Touch Drupal Deployment

Content. Development Tools 2(63)

CLC Server Command Line Tools USER MANUAL

Git, GitHub & Web Hosting Workshop

Introduction to Version Control with Git

Git Fusion Guide August 2015 Update

Git - Working with Remote Repositories

Incremental Backup Script. Jason Healy, Director of Networks and Systems

Git Basics. Christian Hanser. Institute for Applied Information Processing and Communications Graz University of Technology. 6.

Version control. with git and GitHub. Karl Broman. Biostatistics & Medical Informatics, UW Madison

Extending Remote Desktop for Large Installations. Distributed Package Installs

Git Basics. Christopher Simpkins Chris Simpkins (Georgia Tech) CS 2340 Objects and Design CS / 22

Backing Up Your System With rsnapshot

An Introduction to Mercurial Version Control Software

Maven or how to automate java builds, tests and version management with open source tools

Version Control Systems

IceWarp to IceWarp Server Migration

Software configuration management

bup: the git-based backup system Avery Pennarun

CISC 275: Introduction to Software Engineering. Lab 5: Introduction to Revision Control with. Charlie Greenbacker University of Delaware Fall 2011

CatDV Pro Workgroup Serve r

Documentation and Project Organization

Putting It All Together. Vagrant Drush Version Control

SENSE/NET 6.0. Open Source ECMS for the.net platform. 1

Gitflow process. Adapt Learning: Gitflow process. Document control

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer GIT

Continuous Integration

Pro Git. Scott Chacon *

Derived from Chris Cannam's original at, an.

ADMINISTRATOR GUIDE VERSION

Software Engineering Practices for Python

Version Control with Git

Backup with rdiff-backup and rsnapshot

@jenkinsconf. Maintaining huge Jenkins clusters - Have we reached the limit of Jenkins?

MOOSE-Based Application Development on GitLab

CPSC 491. Today: Source code control. Source Code (Version) Control. Exercise: g., no git, subversion, cvs, etc.)

IBM Digital Experience. Using Modern Web Development Tools and Technology with IBM Digital Experience

Redmine: A project management software tool. January, 2013

Introducing Xcode Source Control

ALERT installation setup

How To Manage Change In Jeepers

PKI, Git and SVN. Adam Young. Presented by. Senior Software Engineer, Red Hat. License Licensed under

CoDe:U Git Flow - a Continuous Delivery Approach

Distributed Version Control with Mercurial and git

Secure Linux Administration Conference Bernd Strößenreuther

Fermilab Central Web Service Site Owner User Manual. DocDB: CS-doc-5372

Step One: Installing Rsnapshot and Configuring SSH Keys

Installation and Setup: Setup Wizard Account Information

Transcription:

web, blog, configs, data, and backups Richard Hartmann, RichiH@{freenode,OFTC,IRCnet}, richih.mailinglist@gmail.com 2013-05-22

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

Personal stuff Who am I? Richard RichiH Hartmann Backbone and project manager at Globalways AG freenode & OFTC staff Author of vcsh Passionate about FLOSS

The basics What is Git? Version control system Distributed No need for central repository Allows you to commit while offline Stores commits (parent commit reference, commit message, root tree object) and tree objects (blobs and other tree objects) Light-weight branches pre-/post-action hooks Full history in every checkout

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

etckeeper etckeeper is a collection of tools to let /etc be stored in a Git, Mercurial, Darcs, or Bazaar repository

Minimal, quick overview In a word Implemented in POSIX shell Auto-commits /etc prior to and after all actions by package manager Hooks into apt, yum, pacman-g2, and cron Allows manual commits Various back-ends Bazaar Darcs Git Mercurial Easy way to recover from failures, misconfiguration or to clone machines

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

bup Highly efficient file backup system based on the Git packfile format

One-slide-overview In a word... Written in Python Fast Very space-efficient (reduced 120 GiB (rsnapshot) to 45 GiB) Built-in de-duplication Can be mounted via FUSE Can not drop old data (there is a branch that supports this)

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

ikiwiki ikiwiki is a wiki compiler. It converts wiki pages into HTML pages suitable for publishing on a website

Background What is ikiwiki? Written in Perl Supported back-ends: Git, Bazaar, Darcs, GNU Arch, Mercurial, monotone, and Subversion Parses various markup languages Offers different ways of editing content Extensive templating and CSS support Acts as Wiki, CMS, and blog RSS and Atom feed for whole site, per page, per tag, etc Supports OpenID

Background Supported markup languages MarkDown WikiLink ([[LinkToArticle]]) directives, e.g. [[!tag talk/gitify]] [[!author RichiH]] etc WikiText restructuredtext Textile plain HTML

Background How does it work? User edits web page or commits and pushes source files Partial/full rebuild triggered by cgi or commit hook Parses input files Compiles into HTML, create new pages, updates RSS, etc Commits MarkDown source for autocreated/-changed pages into repository User can optionally pull changes to local repository

Use cases Common uses Public Wiki Private notes Blog CMS

Use cases Adding/editing content Web-based text editing (useful, but boring) Web-based WYSIWYG (via plugins/wmd) CLI-based (awesome!)

Use cases Advanced usage Interface with source files, only Maintain wiki and docs in the same repository as your source code Separate staging or even preview branches with output into different directories

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

git-annex manage files with Git, without checking their contents in

Background What is git-annex? Based on Git Maintains metadata in Git, actual files in the annex Still allows you to check files into Git if you want to Written with low bandwidth and flaky connections in mind Various work-flows (more on that soon)

Background Internal workings 1/2 Written in Haskell, so strong typing etc, internally Uses rsync to transfer data Indirect mode Moves files into.git/annex/objects Makes them read-only Replaces them with symlinks Forces you to git annex unlock and git annex add, leading to concious decisions about changes Can either discard or keep old data, depending on setup

Background Internal workings 2/2 Uses UUIDs to identify each repository Stores tracking information in git-annex branch Gives every single repository full information about all files Tracking information designed to work with union merge: 1361402708.089154s 1 0d39904f-de8d-1638-92af-ecd2cea783cb 1361402822.110498s 1 d1ffde43-f3d9-107b-aa2d-7e4e1ff88b46

Background Data integrity SHA1, SHA2-{224,256,384,512} for integrity Set minimal number of required copies per suffix, directory, etc All remotes and special remotes can be verified remotes verify locally and transmit the result special remotes have to transfer all data to verify Verification takes required amount of copies into account You can always get your data out of a broken annex All data is stored as normal files on disk Symlinks work without git-annex git-annex objects carry their own checksum in their filename

Background Special remotes 1/2 Stores data in non-git-annex remotes Still tracks all data stored in special remotes Supports encryption for storage on untrusted machines/media Hook system lets you write to and read from arbitrary remotes

Background Special remotes 2/2 Amazon Glacier Amazon S3 bup directory rsync webdav web (media.ccc.de, Project Gutenberg, archive.org, etc) hook IMAP Tahoe-LAFS

Background git-annex assistant Financed via kickstarter.com One year of dedicated programming by Joey Hess Daemon that adds data to the repository and syncs it between other repositories Web GUI on localhost Content notification via XMPP/Jabber Advanced ruleset for content distribution Direct mode without symlinks; especially useful for Mac OS X and Windows Android & Windows ports

Use cases The Archivist Put data into git-annex Distribute data among any number of drives, tapes, remotes, etc Store offline media in a safe place Maintain full information about number and location of all copies

Use cases Media consumption Import podcasts, videos, and slides Sync or export to consumption devices Consume media Drop consumed media from annex Deletion propagates through all annexes over time

Use cases The Nomad Keep copies of data on the Internet Optionally sync between several local devices for backup Add data locally and/or remotely while on the road Sync data between local and remote once at an Internet café or similar Perfect for photos while travelling

Use cases Create different views or sets of the same data Sometimes, you disagree with other people about the best way to organize data Different repositories can show a different view of the same data Completely delete some files or file types, for example RAW files Rename files and directories Maintain a rebasing branch on top of the remote: git config branch.master.rebase true

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

vcsh manage config files in $HOME via fake bare Git repositories

Technical details What is vcsh? Implemented in POSIX shell version control shell or version control system $HOME Based on Git, but... Git is unable to maintain several working copies in one directory Sucks if you want to keep your configs in Git vcsh uses fake bare Git repositories to work around this Powerful and extensible hook system Think of it as an extension to Git

Technical details fake bare.. what? Normal Git repository: working copy in $GIT WORK TREE Git data in $GIT WORK TREE/.git aka $GIT DIR Bare Git repository: Git data in $GIT DIR no $GIT WORK TREE Fake bare Git repository: working copy in $GIT WORK TREE Git data in $GIT DIR $GIT WORK TREE == $HOME $GIT DIR == $XDG CONFIG HOME/vcsh/repo.d/$repo.vcsh core.bare = false

Technical details Problems with fake bare Git repos Fake bare repositories are messy to set up and use, and very easy to get wrong Reason why Git disallows shared $GIT WORK TREE: complexity due to context-dependency Mistakes lead to confusion and/or data loss; imagine $GIT WORK TREE set and git add git reset --hard HEAD~1 git checkout -- * git clean -f

Technical details Solution: vcsh Wraps around Git Hides complexity and does sanity checks Several Git repositories checked out into $HOME at once One repository for Zsh, Vim, mplayer, etc Allows specific subsets of repositories per host Manages complete repository life-cycle

Using vcsh Create new repository # Create new repository vcsh init vim # Add files to it vcsh run vim git add.vim.vimrc # Commit using shorthand form vcsh vim commit # Push using longhand form vcsh run vim git push

Using vcsh Made-up life-cycle # Clone repository into new name zsh vcsh clone git://github.com/richih/zshrc.git zsh # Display all files managed by this repository vcsh run zsh git ls-files # Rename repository just because vcsh rename zsh zshrc # Delete repository vcsh delete zshrc

Using vcsh run vs enter # Do everything from outside vcsh run zsh git add.zshrc vcsh run zsh git commit vcsh run zsh git push # The same commands, but from within vcsh enter zsh git add.zshrc git commit git push exit

Using vcsh Advanced usage Have your prompt display vcsh information git-annex within vcsh to manage non-configuration files in $HOME Floating backups in arbitrary working copies.git/ Working copy Complete repository, including objects, etc Use Git on top of or in parallel to other VCSs

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

mr Multiple Repository management tool

Too many repos...? Tying it all together Written in Perl Run bulk pull, push, and custom commands all, some, or one of your repositories Supports Git, vcsh, Bazaar, CVS, Darcs, fossil, git-svn, Mercurial, Subversion, unison, and veracity Trivial to extend to support more VCSs If you want to try all this, why not vcsh clone my mr repository template and run mr up to pull my Zsh config via vcsh?

Too many repos...? Suggested mr layout % cat ~/.mrconfig include = cat ~/.config/mr/config.d/* % ls.config/mr/available.d mr.vcsh zsh.vcsh... % ls -l.config/mr/config.d mr.vcsh ->../available.d/mr.vcsh zsh.vcsh ->../available.d/zsh.vcsh... %

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

Zsh Best shell available. Period.

Why is this in a Git talk? Not based on Git, but makes your life easier Extremely powerful tab completion for the tools in this talk (and others!) Versatile left and right prompts vcs info Displays information about the current VCS working copy in prompt Lots of customization options Supports Git, vcsh, Bazaar, codeville, CVS, Darcs, fossil, GNU Arch, Mercurial, monotone, Perforce, Subversion, and svk Can mimic Bash, Ksh, tcsh, etc. Too many other reasons to list (literally...)

Outline 1 Intro 2 etckeeper 3 bup 4 ikiwiki 5 git-annex 6 vcsh 7 mr 8 Zsh 9 Outro

Wrapping up The final pitch... I need literally less than five minutes of Internet access to sync my entire digital life while on the road.

Further reading Project websites Most of these are packaged for the major distributions etckeeper: http://joey.kitenet.net/code/etckeeper/ bup: https://github.com/bup/bup ikiwiki: http://ikiwiki.info/ git-annex: http://git-annex.branchable.com/ vcsh: https://github.com/richih/vcsh mr: http://kitenet.net/~joey/code/mr/ Wiki around this topic: http://vcs-home.branchable.com/

Further reading Previous talks Previous talks, available as video download: vcsh: http://fosdem.org/2012/schedule/event/vcsh git-annex: http://fosdem.org/2012/schedule/event/gitannex

The End! Thanks! Thank you for listening! Questions? Ask now or catch me after this talk, both is fine. See slide footer for further contact information. http://richardhartmann.de/talks/ #vcs-home @ irc.oftc.net vcs-home@lists.madduck.net