mirror of
https://github.com/vbatts/talks.git
synced 2025-01-09 15:27:08 +00:00
2273 lines
92 KiB
HTML
2273 lines
92 KiB
HTML
<!DOCTYPE html>
|
||
<html class="sl-root decks export offline loaded">
|
||
<head>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||
<title>Passive Filesystem Validation (ASG 2018)</title>
|
||
|
||
<meta name="description" content="A side effect of the many new ways to package filesystems (here's looking at you, containers!), is that filesystems are being copied around without many of the features that traditional packaging provided (i.e. `rpm -qV ...`). Much progress has been made for reproducible checksums, of which Docker now includes for better content addressibility. In this talk Vincent Batts will review options for distributing filesystems with reproducibility, and verifying the at-rest outcomes.">
|
||
|
||
<link rel="stylesheet" type="text/css" href="lib/offline-v2.css">
|
||
|
||
<!-- Team CSS -->
|
||
<style id="global-css-output" type="text/css">
|
||
@import url("https://s3.amazonaws.com/static.slid.es/fonts/overpass2/overpass2.css");
|
||
.reveal {
|
||
|
||
|
||
/*fix icon inversion*/
|
||
|
||
}
|
||
.reveal svg,
|
||
.reveal text,
|
||
.reveal tspan,
|
||
.reveal svg text {
|
||
font-family: "Overpass 2", Overpass, sans-serif !important;
|
||
color: currentcolor;
|
||
fill: currentcolor;
|
||
}
|
||
.reveal .sl-block {
|
||
color: #354045;
|
||
fill: currentcolor;
|
||
}
|
||
.reveal .sl-block svg {
|
||
color: currentcolor;
|
||
}
|
||
.reveal .has-dark-background,
|
||
.reveal .has-dark-background > .sl-block {
|
||
color: white;
|
||
fill: currentcolor;
|
||
}
|
||
.reveal section > .sl-block .redhat-logo .logotext {
|
||
fill: #000000;
|
||
}
|
||
.reveal .has-dark-background > .sl-block .redhat-logo .logotext {
|
||
fill: #ffffff;
|
||
}
|
||
.reveal .has-dark-background > .sl-block[data-block-type="image"] {
|
||
color: #ffffff;
|
||
}
|
||
.reveal [fill="none"] {
|
||
fill: none !important;
|
||
}
|
||
.reveal [fill="#a30000"] {
|
||
fill: #aa0000 !important;
|
||
}
|
||
.reveal [fill="#cc2029"],
|
||
.reveal [fill="#cb2027"],
|
||
.reveal [fill="#c00"] {
|
||
fill: #cc0000 !important;
|
||
}
|
||
.reveal [fill="#fff"] {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal [fill="#6d6e70"] {
|
||
fill: #6d6e70 !important;
|
||
}
|
||
.reveal [fill="#231f20"] {
|
||
fill: currentcolor !important;
|
||
}
|
||
.reveal [fill="#efab1f"] {
|
||
fill: #efab1f !important;
|
||
}
|
||
.reveal [fill="#92d400"] {
|
||
fill: #92d400 !important;
|
||
}
|
||
.reveal .has-dark-background [fill="#6d6e70"] {
|
||
fill: #266272 !important;
|
||
}
|
||
.reveal .has-dark-background [fill="#fff"] {
|
||
fill: #555555 !important;
|
||
}
|
||
.reveal .has-dark-background [fill="#fff"] {
|
||
fill: #333333 !important;
|
||
}
|
||
.reveal .has-dark-background [stroke="#231f20"] {
|
||
stroke: currentcolor;
|
||
}
|
||
.reveal [data-inline-svg="true"] img {
|
||
display: none;
|
||
}
|
||
|
||
</style>
|
||
|
||
<!-- Theme CSS -->
|
||
<style id="theme-css-output" type="text/css">
|
||
@import url(//overpassmonotest-30e2.kxcdn.com/overpass-mono.css);
|
||
.reveal {
|
||
|
||
|
||
/*
|
||
.sl-block[data-block-type="snippet"],
|
||
.sl-block[data-block-type="image"]
|
||
{
|
||
text,
|
||
tspan,
|
||
polygon,
|
||
path,
|
||
rect,
|
||
ellipse {
|
||
fill: currentcolor;
|
||
}
|
||
}
|
||
*/
|
||
|
||
/*slide-default*/
|
||
|
||
/*Custom Ordered Lists */
|
||
|
||
/*helpers*/
|
||
|
||
/*fixing left aligned text*/
|
||
|
||
/*h1,h2,h3,h4,h5,h6{&::first-letter{margin-left:-.09em;}}*/
|
||
|
||
/*icon absolute brute-fix*/
|
||
|
||
/*
|
||
.present .icon.stroked path.long{ stroke-width: 2px ;
|
||
-webkit-animation: icon-animation-long 3.5s 1.5s 1;
|
||
-moz-animation: icon-animation-long 3.5s 1.5s 1;
|
||
animation: icon-animation-long 3.5s 1.5s 1;
|
||
}*/
|
||
|
||
/*
|
||
.present .icon.stroked path.short{
|
||
-webkit-animation: icon-animation-short 3.5s 1.5s 1;
|
||
-moz-animation: icon-animation-short 3.5s 1.5s 1;
|
||
animation: icon-animation-short 3.5s 1.5s 1;
|
||
}*/
|
||
|
||
/*controls logic*/
|
||
|
||
/*animated logos with complex svg segments*/
|
||
|
||
/*transitions*/
|
||
|
||
/*logos svg files that contain inverted path alternates */
|
||
|
||
/* call to action */
|
||
|
||
/* tables in snippets.... the devil */
|
||
|
||
/* tables in text */
|
||
|
||
/*testimonial snippet */
|
||
|
||
/*for inverting images*/
|
||
|
||
/**/
|
||
|
||
/*code blocks*/
|
||
|
||
/* round line arrows */
|
||
|
||
/*fix icon inversion*/
|
||
|
||
/*body:hover .corner svg{transform: translate(30%, 30%)}*/
|
||
|
||
}
|
||
.reveal.reveal[role="application"] > .backgrounds > .slide-background:not(.stack):first-child,
|
||
.reveal.reveal[role="application"] > .backgrounds > .stack:first-child > .slide-background:first-child,
|
||
.reveal.reveal[role="application"] .slides > .pdf-page:not(.stack):first-child .slide-background,
|
||
.reveal.reveal[role="application"] .slides > .stack:first-child > .pdf-page:first-child .slide-background {
|
||
background-color: #900;
|
||
color: #fff;
|
||
background-size: cover;
|
||
background-repeat: no-repeat;
|
||
background-position: 50% 50%;
|
||
background-image: linear-gradient(-45deg, #8e0000 20%, #820000 20%, #990000 85%, #890000 85%);
|
||
min-height: 100vh;
|
||
}
|
||
.reveal.reveal[role="application"] > .backgrounds > .slide-background:not(.stack):first-child.has-light-background,
|
||
.reveal.reveal[role="application"] > .backgrounds > .stack:first-child > .slide-background:first-child.has-light-background,
|
||
.reveal.reveal[role="application"] .slides > .pdf-page:not(.stack):first-child .slide-background.has-light-background,
|
||
.reveal.reveal[role="application"] .slides > .stack:first-child > .pdf-page:first-child .slide-background.has-light-background {
|
||
background-image: none;
|
||
}
|
||
.reveal.reveal .slides > .section:first-child,
|
||
.reveal.reveal[role="application"] > .slides > .section:first-child .sl-block {
|
||
color: #fff;
|
||
}
|
||
.reveal .name {
|
||
white-space: nowrap;
|
||
}
|
||
.reveal .reveal,
|
||
.reveal .sl-block,
|
||
.reveal .sl-block-content,
|
||
.reveal .sl-block-content div,
|
||
.reveal .sl-block-content p,
|
||
.reveal .sl-block-content h1,
|
||
.reveal .sl-block-content h2,
|
||
.reveal .sl-block-content h3,
|
||
.reveal .sl-block-content h4 {
|
||
font-family: "Overpass 2", overpass, "Hiragino Kaku Gothic", "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ Pro W3", sans-serif;
|
||
}
|
||
.reveal .future .sl-block-content,
|
||
.reveal .past .sl-block-content {
|
||
transition: none !important;
|
||
}
|
||
.reveal section,
|
||
.reveal.reveal .has-dark-background,
|
||
.reveal section.background-shade-dark {
|
||
color: #fff;
|
||
}
|
||
.reveal.reveal .has-dark-background a {
|
||
color: #eee;
|
||
}
|
||
.reveal.reveal .has-dark-background a:hover {
|
||
color: #fff;
|
||
}
|
||
.reveal .backgrounds {
|
||
background: #f3f4f4;
|
||
}
|
||
.reveal .slide-background {
|
||
background-size: cover;
|
||
background-position: 50% 50%;
|
||
background-repeat: no-repeat;
|
||
}
|
||
.reveal .slide-background.has-light-background {
|
||
/*background-image: url(//s3.amazonaws.com/media-p.slid.es/uploads/team-32/images/1297460/standard-background.svg);*/
|
||
|
||
}
|
||
.reveal .backgrounds .paint-it-red {
|
||
background-color: #c00 !important;
|
||
-moz-background-blend-mode: multiply;
|
||
-webkit-background-blend-mode: multiply;
|
||
-ms-background-blend-mode: multiply;
|
||
background-blend-mode: multiply;
|
||
}
|
||
.reveal .paint-it-red {
|
||
color: #fff;
|
||
}
|
||
.reveal .has-dark-background .icon.stroked path,
|
||
.reveal section.background-shade-dark .icon.stroked path,
|
||
.reveal section.light-foreground .icon.stroked path {
|
||
stroke: #fff !important;
|
||
}
|
||
.reveal .has-dark-background .redhat-product-logotype path,
|
||
.reveal section.background-shade-dark .redhat-product-logotype path,
|
||
.reveal section.light-foreground .redhat-product-logotype path {
|
||
fill: #ffffff;
|
||
}
|
||
.reveal .has-dark-background text.logotext,
|
||
.reveal section.background-shade-dark text.logotext,
|
||
.reveal section.light-foreground text.logotext,
|
||
.reveal .has-dark-background .logotext text,
|
||
.reveal section.background-shade-dark .logotext text,
|
||
.reveal section.light-foreground .logotext text,
|
||
.reveal .has-dark-background path.logotext,
|
||
.reveal section.background-shade-dark path.logotext,
|
||
.reveal section.light-foreground path.logotext,
|
||
.reveal .has-dark-background path.logotype,
|
||
.reveal section.background-shade-dark path.logotype,
|
||
.reveal section.light-foreground path.logotype,
|
||
.reveal .has-dark-background .logotext path,
|
||
.reveal section.background-shade-dark .logotext path,
|
||
.reveal section.light-foreground .logotext path {
|
||
fill: #fff !important;
|
||
}
|
||
.reveal .has-dark-background .closing-logo .logotext,
|
||
.reveal section.background-shade-dark .closing-logo .logotext,
|
||
.reveal section.light-foreground .closing-logo .logotext,
|
||
.reveal .has-dark-background .redhat-logo .logotext,
|
||
.reveal section.background-shade-dark .redhat-logo .logotext,
|
||
.reveal section.light-foreground .redhat-logo .logotext {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal .has-light-background .icon.stroked path {
|
||
stroke: currentcolor;
|
||
}
|
||
.reveal .has-light-background .redhat-logo .logotext {
|
||
fill: #000000 !important;
|
||
}
|
||
.reveal .sl-block-content ol li {
|
||
position: relative;
|
||
padding-bottom: .5em;
|
||
}
|
||
.reveal .sl-block-content ol li > p:first-child {
|
||
margin: 0;
|
||
}
|
||
.reveal .sl-block-content ol > li::before {
|
||
margin-left: -2.5em;
|
||
}
|
||
.reveal .sl-block-content > ol > li:before {
|
||
float: left;
|
||
text-align: center;
|
||
box-shadow: inset 0 0 0 .1em;
|
||
border-radius: 50%;
|
||
}
|
||
.reveal .sl-block-content ol {
|
||
counter-reset: section;
|
||
list-style-type: none;
|
||
margin: 0 0 0 2.5em;
|
||
display: block;
|
||
}
|
||
.reveal .sl-block-content ol ol {
|
||
margin-top: .5em;
|
||
}
|
||
.reveal .sl-block-content ol > li:before {
|
||
font-weight: 400;
|
||
display: inline-block;
|
||
width: 1.75em;
|
||
height: 1.75em;
|
||
line-height: 1.75em;
|
||
text-align: center;
|
||
letter-spacing: 0;
|
||
font-size: .75em;
|
||
margin: 0 0.75em 0 -2.5em;
|
||
counter-increment: section;
|
||
content: counters(section, ".") " ";
|
||
white-space: nowrap;
|
||
}
|
||
.reveal .sl-block-content > ol > li ol li:before {
|
||
opacity: .5;
|
||
text-align: left;
|
||
box-shadow: none;
|
||
letter-spacing: .1em;
|
||
}
|
||
.reveal .sl-block-content > ol > li > ol > li > ol > li:before {
|
||
width: 4em;
|
||
left: -3em;
|
||
font-size: .75em;
|
||
}
|
||
.reveal .has-dark-background .sl-block-content > ol > li:before {
|
||
color: currentcolor;
|
||
background-color: rgba(0, 0, 0, 0.1);
|
||
box-shadow: inset 0 0 0 0.2em rgba(0, 0, 0, 0.2);
|
||
font-weight: 500;
|
||
letter-spacing: -0.05em;
|
||
}
|
||
.reveal .sl-block-content > ol ol ol li:before {
|
||
opacity: 1;
|
||
font-size: .55em !important;
|
||
width: 3.5em !important;
|
||
}
|
||
.reveal .sl-block-content > ol ol ol {
|
||
margin-left: 1.5em !important;
|
||
}
|
||
.reveal .uppercase {
|
||
text-transform: uppercase;
|
||
}
|
||
.reveal .sl-block[data-block-type="text"] > .initial h1,
|
||
.reveal .sl-block[data-block-type="text"] > .initial h2,
|
||
.reveal .sl-block[data-block-type="text"] > .initial h3 {
|
||
text-transform: initial;
|
||
}
|
||
.reveal .force-mono text,
|
||
.reveal .force-mono tspan,
|
||
.reveal .force-mono polygon,
|
||
.reveal .force-mono path,
|
||
.reveal .force-mono rect,
|
||
.reveal .force-mono ellipse {
|
||
fill: currentcolor !important;
|
||
}
|
||
.reveal .force-red .stroked path {
|
||
stroke: #c00;
|
||
}
|
||
.reveal .force-red,
|
||
.reveal .force-red text,
|
||
.reveal .force-red tspan,
|
||
.reveal .force-red polygon,
|
||
.reveal .force-red path,
|
||
.reveal .force-red rect,
|
||
.reveal .force-red ellipse {
|
||
color: #c00;
|
||
fill: currentcolor !important;
|
||
}
|
||
.reveal .force-red .stroked {
|
||
fill: none;
|
||
stroke: #cc0000;
|
||
}
|
||
.reveal .background-shade-dark .sl-block {
|
||
color: #fff;
|
||
}
|
||
.reveal .dark-foreground text.logotext,
|
||
.reveal section.background-shade-light text.logotext,
|
||
.reveal section.dark-foreground text.logotext,
|
||
.reveal .dark-foreground .logotext text,
|
||
.reveal section.background-shade-light .logotext text,
|
||
.reveal section.dark-foreground .logotext text,
|
||
.reveal .dark-foreground path.logotext,
|
||
.reveal section.background-shade-light path.logotext,
|
||
.reveal section.dark-foreground path.logotext,
|
||
.reveal .dark-foreground path.logotype,
|
||
.reveal section.background-shade-light path.logotype,
|
||
.reveal section.dark-foreground path.logotype,
|
||
.reveal .dark-foreground .logotext path,
|
||
.reveal section.background-shade-light .logotext path,
|
||
.reveal section.dark-foreground .logotext path,
|
||
.reveal .dark-foreground .product,
|
||
.reveal section.background-shade-light .product,
|
||
.reveal section.dark-foreground .product {
|
||
fill: currentcolor !important;
|
||
}
|
||
.reveal .dark-foreground .redhat-logo .logotext,
|
||
.reveal section.background-shade-light .redhat-logo .logotext,
|
||
.reveal section.dark-foreground .redhat-logo .logotext {
|
||
fill: currentcolor !important;
|
||
}
|
||
.reveal .slide-background.background-shade-dark:after {
|
||
content: "";
|
||
display: block;
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
right: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background-color: rgba(40, 40, 40, 0.8);
|
||
}
|
||
.reveal .slide-background.background-shade-light:after {
|
||
content: "";
|
||
display: block;
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
right: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background-color: rgba(255, 255, 255, 0.8);
|
||
}
|
||
.reveal .slides section {
|
||
text-align: left;
|
||
}
|
||
.reveal .slides section h1 {
|
||
line-height: 1em;
|
||
font-weight: 700 ;
|
||
font-size: 3em ;
|
||
}
|
||
.reveal .slides section h2 {
|
||
font-size: 2em;
|
||
font-weight: 400 ;
|
||
line-height: 1.15em;
|
||
}
|
||
.reveal .slides section h3 {
|
||
font-weight: 700 ;
|
||
font-size: 1em ;
|
||
line-height: 1.25em;
|
||
}
|
||
.reveal .slides section p {
|
||
margin-bottom: .5em;
|
||
}
|
||
.reveal .slides section blockquote {
|
||
font-style: normal;
|
||
box-shadow: none;
|
||
}
|
||
.reveal .progress {
|
||
background-color: transparent;
|
||
}
|
||
.reveal .progress span {
|
||
background-color: #5e6a71;
|
||
}
|
||
.reveal .absolute-element svg {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
width: 100% !important;
|
||
height: 100% !important;
|
||
}
|
||
.reveal .icon.stroked {
|
||
width: 282px;
|
||
height: 282px;
|
||
}
|
||
.reveal .icon.stroked.icon-arrow path {
|
||
stroke-width: 4px !important;
|
||
}
|
||
.reveal .icon.stroked path {
|
||
fill: none;
|
||
stroke-width: 1.5px;
|
||
transition-delay: .5s !important;
|
||
stroke-dashoffset: 0;
|
||
stroke-width: 1.5;
|
||
stroke-linecap: round;
|
||
stroke-linejoin: round;
|
||
stroke: currentcolor;
|
||
}
|
||
.reveal .icon.stroked path.long {
|
||
stroke-dasharray: 420,420;
|
||
transition: 2.5s all ease;
|
||
}
|
||
.reveal .icon.stroked path.longer {
|
||
stroke-dasharray: 512,512;
|
||
transition: 2.5s all ease;
|
||
}
|
||
.reveal .icon.stroked path.short {
|
||
stroke-dasharray: 90,90;
|
||
transition: 5s all ease;
|
||
}
|
||
.reveal .icon.stroked path.shortest {
|
||
stroke-dasharray: 5,5;
|
||
transition: 2s all ease;
|
||
}
|
||
.reveal .icon.stroked path.round {
|
||
stroke-linecap: round ;
|
||
stroke-linejoin: round ;
|
||
}
|
||
.reveal .icon.stroked path.virtual {
|
||
transition: .5s all ease;
|
||
stroke-dasharray: 1.1, 3;
|
||
stroke-linecap: round ;
|
||
}
|
||
.reveal .icon.stroked path.dashed {
|
||
stroke-dasharray: 3, 3;
|
||
}
|
||
.reveal .icon.stroked path.hand {
|
||
stroke-linecap: round;
|
||
}
|
||
.reveal .present path.virtual {
|
||
-webkit-animation: virtual-outline 60s infinite linear;
|
||
-moz-animation: virtual-outline 60s infinite linear;
|
||
animation: virtual-outline 60s infinite linear;
|
||
}
|
||
@-webkit-keyframes virtual-outline {
|
||
0% {
|
||
stroke-dashoffset: 0;
|
||
}
|
||
100% {
|
||
stroke-dashoffset: 512;
|
||
}
|
||
}
|
||
@-moz-keyframes virtual-outline {
|
||
0% {
|
||
stroke-dashoffset: 0;
|
||
}
|
||
100% {
|
||
stroke-dashoffset: 512;
|
||
}
|
||
}
|
||
@keyframes virtual-outline {
|
||
0% {
|
||
stroke-dashoffset: 0;
|
||
}
|
||
100% {
|
||
stroke-dashoffset: 512;
|
||
}
|
||
}
|
||
.reveal a {
|
||
box-shadow: 0 0.066666em;
|
||
}
|
||
.reveal .overview section.present {
|
||
border: 12px solid white !important;
|
||
box-shadow: 0 0 0 10px #ffffff, inset 0 0 0 6px rgba(0, 0, 0, 0.2);
|
||
}
|
||
.reveal .rh-pattern {
|
||
width: 256px;
|
||
height: 256px;
|
||
}
|
||
.reveal .rh-pattern path {
|
||
transition: all .5s ease;
|
||
}
|
||
.reveal .future .rh-pattern path {
|
||
stroke-dasharray: 0, 85 !important;
|
||
}
|
||
.reveal .present .rh-pattern path {
|
||
stroke-dasharray: 80, 0 !important;
|
||
}
|
||
.reveal div[data-block-type="snippet"] .sl-block-content > svg,
|
||
.reveal div[data-block-type="snippet"] > .sl-block-content > svg,
|
||
.reveal div[data-block-type="snippet"] .icon,
|
||
.reveal div[data-block-type="snippet"] .product {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
.reveal div[data-block-type="snippet"] .sl-block-content > svg:not(:last-child) {
|
||
position: relative;
|
||
}
|
||
.reveal div[data-block-type="snippet"] .icon {
|
||
top: -15%;
|
||
right: -15%;
|
||
bottom: -15%;
|
||
left: -15%;
|
||
width: 130%;
|
||
height: 130%;
|
||
}
|
||
.reveal div[data-block-type="snippet"] {
|
||
min-width: 60px !important;
|
||
}
|
||
.reveal div[data-block-type="text"] {
|
||
font-size: 20px;
|
||
}
|
||
.reveal .triangle-element,
|
||
.reveal .triangle-element * {
|
||
user-select: none;
|
||
}
|
||
.reveal .has-light-background .closing-logo.logotype path {
|
||
fill: black !important;
|
||
}
|
||
@-webkit-keyframes closing-animation {
|
||
0% {
|
||
-webkit-transform: scale(4) translate(40%);
|
||
transform: scale(4) translate(40%);
|
||
opacity: 0;
|
||
}
|
||
80% {
|
||
-webkit-transform: scale(1) translate(30%);
|
||
transform: scale(1) translate(30%);
|
||
}
|
||
}
|
||
@-moz-keyframes closing-animation {
|
||
0% {
|
||
-webkit-transform: scale(4) translate(40%);
|
||
transform: scale(4) translate(40%);
|
||
opacity: 0;
|
||
}
|
||
80% {
|
||
-webkit-transform: scale(1) translate(30%);
|
||
transform: scale(1) translate(30%);
|
||
}
|
||
}
|
||
@-o-keyframes closing-animation {
|
||
0% {
|
||
-webkit-transform: scale(4) translate(40%);
|
||
transform: scale(4) translate(40%);
|
||
opacity: 0;
|
||
}
|
||
80% {
|
||
-webkit-transform: scale(1) translate(30%);
|
||
transform: scale(1) translate(30%);
|
||
}
|
||
}
|
||
@keyframes closing-animation {
|
||
0% {
|
||
-webkit-transform: scale(4) translate(40%);
|
||
transform: scale(4) translate(40%);
|
||
opacity: 0;
|
||
}
|
||
80% {
|
||
-webkit-transform: scale(1) translate(30%);
|
||
transform: scale(1) translate(30%);
|
||
}
|
||
}
|
||
.reveal .present .closing-logo.icon {
|
||
-webkit-animation: closing-animation 1.5s 1;
|
||
-moz-animation: closing-animation 1.5s 1;
|
||
-o-animation: closing-animation 1.5s 1;
|
||
animation: closing-animation 1.5s 1;
|
||
}
|
||
.reveal .present .closing-logo.logotype {
|
||
-webkit-animation: closing-text-animation 1.8s 1;
|
||
-moz-animation: closing-text-animation 1.8s 1;
|
||
-o-animation: closing-text-animation 1.8s 1;
|
||
animation: closing-text-animation 1.8s 1;
|
||
}
|
||
@-webkit-keyframes closing-text-animation {
|
||
0% {
|
||
opacity: 0;
|
||
-webkit-transform: translate(-10%);
|
||
transform: translate(-10%);
|
||
}
|
||
70% {
|
||
-webkit-transform: translate(-10%);
|
||
transform: translate(-10%);
|
||
opacity: 0;
|
||
}
|
||
100% {
|
||
transform: none;
|
||
opacity: 1;
|
||
-webkit-transform: none;
|
||
}
|
||
}
|
||
@-moz-keyframes closing-text-animation {
|
||
0% {
|
||
opacity: 0;
|
||
-webkit-transform: translate(-10%);
|
||
transform: translate(-10%);
|
||
}
|
||
70% {
|
||
-webkit-transform: translate(-10%);
|
||
transform: translate(-10%);
|
||
opacity: 0;
|
||
}
|
||
100% {
|
||
transform: none;
|
||
opacity: 1;
|
||
-webkit-transform: none;
|
||
}
|
||
}
|
||
@keyframes closing-text-animation {
|
||
0% {
|
||
opacity: 0;
|
||
-webkit-transform: translate(-10%);
|
||
transform: translate(-10%);
|
||
}
|
||
70% {
|
||
-webkit-transform: translate(-10%);
|
||
transform: translate(-10%);
|
||
opacity: 0;
|
||
}
|
||
100% {
|
||
transform: none;
|
||
opacity: 1;
|
||
-webkit-transform: none;
|
||
}
|
||
}
|
||
.reveal .brand-pattern-paths path,
|
||
.reveal .pattern-path {
|
||
stroke-width: 1;
|
||
fill: none;
|
||
}
|
||
.reveal .brand-pattern-paths path {
|
||
fill: none !important;
|
||
}
|
||
.reveal pattern {
|
||
patterntransform: scale(2) !important;
|
||
}
|
||
.reveal pattern.normal use {
|
||
stroke: currentcolor;
|
||
fill: none;
|
||
}
|
||
.reveal pattern.light use {
|
||
stroke: #fff !important;
|
||
fill: none;
|
||
}
|
||
.reveal pattern.dark use {
|
||
stroke: #000 !important;
|
||
fill: none;
|
||
}
|
||
.reveal .brand-pattern {
|
||
min-width: 40px;
|
||
min-height: 40px;
|
||
position: absolute;
|
||
top: 0 ;
|
||
left: 0 ;
|
||
right: 0;
|
||
bottom: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
.reveal .brand-pattern path,
|
||
.reveal .brand-pattern rect {
|
||
width: 100% !important;
|
||
height: 100%;
|
||
}
|
||
.reveal .brand-pattern.corporate {
|
||
fill: url(#pattern-corporate);
|
||
}
|
||
.reveal #pattern-corporate-2 use {
|
||
stroke: #dd0000;
|
||
}
|
||
.reveal #pattern-corporate use {
|
||
stroke: #cc0000;
|
||
}
|
||
.reveal section,
|
||
.reveal .slide-background {
|
||
-webkit-backface-visibility: hidden;
|
||
-ms-backface-visibility: hidden;
|
||
backface-visibility: hidden;
|
||
}
|
||
.reveal .slides > section.transition-slide,
|
||
.reveal .slides > section.transition-slide + section.future,
|
||
.reveal .slides > section.transition-slide + section.present,
|
||
.reveal .backgrounds > .slide-background.transition-slide,
|
||
.reveal .backgrounds > .slide-background.transition-slide + .slide-background.future,
|
||
.reveal .backgrounds > .slide-background.transition-slide + .slide-background.present {
|
||
transition: all 1s ease !important;
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-slide {
|
||
opacity: 1 ;
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-slide.past {
|
||
z-index: 99;
|
||
-webkit-transform: translate(-100%, 0);
|
||
-ms-transform: translate(-100%, 0);
|
||
transform: translate(-100%, 0);
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-slide.future,
|
||
.reveal .backgrounds > .slide-background.transition-slide.present + .slide-background.future {
|
||
-webkit-transform: translate(100%, 0);
|
||
-ms-transform: translate(100%, 0);
|
||
transform: translate(100%, 0);
|
||
}
|
||
.reveal .slides > section.transition-slide.past {
|
||
z-index: 99;
|
||
-webkit-transform: translate(-150%, 0);
|
||
-ms-transform: translate(-150%, 0);
|
||
transform: translate(-150%, 0);
|
||
visibility: hidden;
|
||
}
|
||
.reveal .slides > section.transition-slide.future,
|
||
.reveal .slides > section.transition-slide.future + section {
|
||
-webkit-transform: translate(150%, 0);
|
||
-ms-transform: translate(150%, 0);
|
||
transform: translate(150%, 0);
|
||
visibility: hidden;
|
||
}
|
||
.reveal .slides > section.transition-slide-up,
|
||
.reveal .slides > section.transition-slide-up + section.future,
|
||
.reveal .slides > section.transition-slide-up + section.present,
|
||
.reveal .backgrounds > .slide-background.transition-slide-up,
|
||
.reveal .backgrounds > .slide-background.transition-slide-up + .slide-background.future .backgrounds > .slide-background.transition-slide-up + .slide-background.present {
|
||
transition: all 1s ease !important;
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-slide-up {
|
||
opacity: 1 ;
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-slide-up.past {
|
||
z-index: 99;
|
||
-webkit-transform: translate(0, -100%);
|
||
-ms-transform: translate(0, -100%);
|
||
transform: translate(0, -100%);
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-slide-up.future,
|
||
.reveal .backgrounds > .slide-background.transition-slide-up.present + .slide-background.future {
|
||
-webkit-transform: translate(0, 100%);
|
||
-ms-transform: translate(0, 100%);
|
||
transform: translate(0, 100%);
|
||
}
|
||
.reveal .slides > section.transition-slide-up.past {
|
||
z-index: 99;
|
||
-webkit-transform: translate(0, -150%);
|
||
-ms-transform: translate(0, -150%);
|
||
transform: translate(0, -150%);
|
||
visibility: hidden;
|
||
}
|
||
.reveal .slides > section.transition-slide-up.future,
|
||
.reveal .slides > section.transition-slide-up.present + section {
|
||
-webkit-transform: translate(0, 150%);
|
||
-ms-transform: translate(0, 150%);
|
||
transform: translate(0, 150%);
|
||
visibility: hidden;
|
||
}
|
||
.reveal .slides > section.transition-zoom-in,
|
||
.reveal .slides > section.transition-zoom-in + section.future,
|
||
.reveal .slides > section.transition-zoom-in + section.present,
|
||
.reveal .backgrounds > .slide-background.transition-zoom-in,
|
||
.reveal .backgrounds > .slide-background.transition-zoom-in + .slide-background.future .backgrounds > .slide-background.transition-zoom-in + .slide-background.present {
|
||
-webkit-transition: all 1s ease !important;
|
||
-moz-transition: all 1s ease !important;
|
||
transition: all 1s ease !important;
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-zoom-in.past {
|
||
opacity: 0 !important;
|
||
-webkit-transform: scale(1.5);
|
||
-ms-transform: scale(0.1 0.5);
|
||
transform: scale(1.5);
|
||
}
|
||
.reveal .backgrounds > .slide-background.transition-zoom-in.future,
|
||
.reveal .backgrounds > .slide-background.transition-zoom-in.present + .slide-background.future {
|
||
opacity: 0 !important;
|
||
-webkit-transform: scale(0.01);
|
||
-ms-transform: scale(0.01);
|
||
transform: scale(0.01);
|
||
}
|
||
.reveal .past {
|
||
z-index: -1;
|
||
opacity: 0 !important;
|
||
}
|
||
.reveal .present + .slide-background.future {
|
||
z-index: 99;
|
||
}
|
||
.reveal .slides > section.transition-zoom-in.past {
|
||
z-index: 99;
|
||
-webkit-transform: scale(1.5);
|
||
-ms-transform: scale(1.5);
|
||
transform: scale(1.5);
|
||
visibility: hidden;
|
||
}
|
||
.reveal .slides > section.transition-zoom-in.future {
|
||
-webkit-transform: scale(0.1);
|
||
-ms-transform: scale(0.1);
|
||
transform: scale(0.1);
|
||
visibility: hidden;
|
||
}
|
||
@-webkit-keyframes icon-animation-long {
|
||
0% {
|
||
stroke-dashoffset: 420;
|
||
stroke-width: .5px;
|
||
}
|
||
}
|
||
@-moz-keyframes icon-animation-long {
|
||
0% {
|
||
stroke-dashoffset: 420;
|
||
stroke-width: .5px;
|
||
}
|
||
}
|
||
@keyframes icon-animation-long {
|
||
0% {
|
||
stroke-dashoffset: 420;
|
||
stroke-width: .5px;
|
||
}
|
||
}
|
||
@-webkit-keyframes icon-animation-short {
|
||
0% {
|
||
stroke-dashoffset: 90;
|
||
}
|
||
}
|
||
@-moz-keyframes icon-animation-short {
|
||
0% {
|
||
stroke-dashoffset: 90;
|
||
}
|
||
}
|
||
@keyframes icon-animation-short {
|
||
0% {
|
||
stroke-dashoffset: 90;
|
||
}
|
||
}
|
||
.reveal .present .animate.icon.stroked path,
|
||
.reveal .present .animate .icon.stroked path,
|
||
.reveal .fragment .icon.stroked path {
|
||
animation: 0;
|
||
-moz-animation: 0;
|
||
-webkit-animation: 0;
|
||
display: none;
|
||
}
|
||
.reveal .present .animate.icon.stroked path.long,
|
||
.reveal .present .animate .icon.stroked path.long,
|
||
.reveal .fragment.visible .icon.stroked path.long {
|
||
display: block;
|
||
stroke-width: 2px ;
|
||
-webkit-animation: icon-animation-long 3.5s 0.5s 1;
|
||
-moz-animation: icon-animation-long 3.5s 0.5s 1;
|
||
animation: icon-animation-long 3.5s 0.5s 1;
|
||
}
|
||
.reveal .present .animate.icon.stroked path.short,
|
||
.reveal .present .animate .icon.stroked path.short,
|
||
.reveal .fragment.visible .icon.stroked path.short {
|
||
display: block;
|
||
-webkit-animation: icon-animation-short 3.5s 0.5s 1 !important;
|
||
-moz-animation: icon-animation-short 3.5s 0.5s 1 !important;
|
||
animation: icon-animation-short 3.5s 0.5s 1 !important;
|
||
}
|
||
.reveal .triangle-element {
|
||
transition: all 0.4s cubic-bezier(0.21, 0.9, 0.55, 1) 5s;
|
||
}
|
||
.reveal.reveal:hover .triangle-element {
|
||
transition: all 1s cubic-bezier(0.21, 0.9, 0.55, 1.16) 0s !important;
|
||
top: 100% !important;
|
||
left: 100% !important;
|
||
opacity: 0.95;
|
||
}
|
||
.reveal .has-dark-background .only-dark {
|
||
display: none;
|
||
}
|
||
.reveal .has-light-background .only-light {
|
||
display: none;
|
||
}
|
||
.reveal .thinner .icon.stroked path {
|
||
stroke-width: 1px !important;
|
||
}
|
||
.reveal .thinnest .icon.stroked path {
|
||
stroke-width: 0.05em !important;
|
||
}
|
||
.reveal .thicker .icon.stroked path {
|
||
stroke-width: 3px !important;
|
||
}
|
||
.reveal .thickest .icon.stroked path {
|
||
stroke-width: 4px !important;
|
||
}
|
||
.reveal .angle {
|
||
-ms-transform: rotate(-45deg);
|
||
-moz-transform: rotate(-45deg);
|
||
-webkit-transform: rotate(-45deg);
|
||
transform: rotate(-45deg);
|
||
}
|
||
.reveal .rangle {
|
||
-ms-transform: rotate(45deg);
|
||
-moz-transform: rotate(45deg);
|
||
-webkit-transform: rotate(45deg);
|
||
transform: rotate(45deg);
|
||
}
|
||
.reveal .sl-block > .vertical {
|
||
-ms-transform: rotate(-90deg);
|
||
-moz-transform: rotate(-90deg);
|
||
-webkit-transform: rotate(-90deg);
|
||
transform: rotate(-90deg);
|
||
}
|
||
.reveal .skewed {
|
||
transition: all 1s cubic-bezier(0.13, 0.81, 0.08, 1);
|
||
-moz-transform: skew(-45deg, 0);
|
||
-ms-transform: skew(-45deg, 0);
|
||
-webkit-transform: skew(-45deg, 0);
|
||
transform: skew(-45deg, 0);
|
||
}
|
||
.reveal .future .skewed {
|
||
margin-left: -800%;
|
||
opacity: 0;
|
||
}
|
||
.reveal .past .skewed {
|
||
margin-left: 800%;
|
||
opacity: 0;
|
||
}
|
||
.reveal .item-label,
|
||
.reveal .item-box {
|
||
letter-spacing: 0em;
|
||
font-weight: 500;
|
||
}
|
||
.reveal .epic-content-box {
|
||
height: 100%;
|
||
width: 100%;
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
}
|
||
.reveal .has-dark-background .epic-content-box {
|
||
box-shadow: inset 0 0 0.51em rgba(0, 0, 0, 0.25), 0 0.05em 0.05em rgba(255, 255, 255, 0.1);
|
||
background-color: rgba(0, 0, 0, 0.15);
|
||
}
|
||
.reveal .has-light-background .epic-content-box {
|
||
box-shadow: inset 0 0 0.2em rgba(255, 255, 255, 0.5), 0 0.06666em 0.555em 0 rgba(0, 0, 0, 0.12);
|
||
}
|
||
.reveal .controls {
|
||
bottom: 1%;
|
||
right: 1%;
|
||
}
|
||
.reveal .controls button {
|
||
opacity: 0;
|
||
}
|
||
.reveal .controls button.enabled {
|
||
opacity: 1;
|
||
}
|
||
.reveal .controls {
|
||
opacity: 0 !important;
|
||
transition: opacity .5s ease 4.8s, transform .5s ease 4.8s;
|
||
transform: scale(0.4);
|
||
}
|
||
.reveal.reveal:hover .controls {
|
||
transform: scale(1);
|
||
opacity: 1 !important;
|
||
transition: opacity .5s ease 0s, transform .5s ease 0s;
|
||
}
|
||
.reveal .backgrounds {
|
||
transition-property: height;
|
||
transition-duration: 1s;
|
||
perspective: 1000px;
|
||
transform-style: preserve-3d;
|
||
}
|
||
.reveal .complex-logo {
|
||
min-height: 70px;
|
||
min-width: 70px;
|
||
width: 100%;
|
||
}
|
||
.reveal .complex-logo,
|
||
.reveal .complex-logo svg,
|
||
.reveal .complex-logo > div {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
.reveal .complex-logo > div.line-icon,
|
||
.reveal .complex-logo svg > div.line-icon,
|
||
.reveal .complex-logo > div > div.line-icon,
|
||
.reveal .complex-logo > div.logomark,
|
||
.reveal .complex-logo svg > div.logomark,
|
||
.reveal .complex-logo > div > div.logomark {
|
||
transform-origin: 12% 50%;
|
||
}
|
||
.reveal .animated .complex-logo div {
|
||
transition: all .5s ease;
|
||
}
|
||
.reveal .animated .complex-logo div.line-icon {
|
||
transition-delay: 2s;
|
||
}
|
||
.reveal .animated .complex-logo div.line-icon path {
|
||
transition: all 1s ease .52s;
|
||
stroke-dasharray: 100 ,10;
|
||
}
|
||
.reveal .animated .complex-logo div.event-name {
|
||
transition-delay: 1s;
|
||
}
|
||
.reveal .animated .complex-logo div.location {
|
||
transition-delay: 1.4s;
|
||
}
|
||
.reveal .future .animated .complex-logo > div {
|
||
transition: none;
|
||
}
|
||
.reveal .future .animated .complex-logo > div.line-icon path {
|
||
stroke-dasharray: 0 ,100;
|
||
transition: none;
|
||
}
|
||
.reveal .future .animated .complex-logo {
|
||
/*.line-icon{transform:rotate(30deg); opacity:0;}*/
|
||
|
||
}
|
||
.reveal .future .animated .complex-logo .logomark {
|
||
transform: translate(0, -20%);
|
||
}
|
||
.reveal .future .animated .complex-logo .location {
|
||
transform: translate(0, 0.5em);
|
||
opacity: 0;
|
||
}
|
||
.reveal .future .animated .complex-logo .event-name {
|
||
opacity: 0;
|
||
transform: translate(-0.6em, 0);
|
||
}
|
||
.reveal .lowercase {
|
||
text-transform: lowercase;
|
||
}
|
||
.reveal .pop-in.fragment {
|
||
-webkit-transform: scale(0.2);
|
||
-moz-transform: scale(0.2);
|
||
-ms-transform: scale(0.2);
|
||
transform: scale(0.2);
|
||
-webkit-transition: 2s ease 0.25s;
|
||
-moz-transition: 2s ease 0.25s;
|
||
-ms-transition: 2s ease 0.25s;
|
||
transition: 2s ease 0.25s;
|
||
-webkit-animation-delay: 0.66s;
|
||
-moz-animation-delay: 0.66s;
|
||
-ms-animation-delay: 0.66s;
|
||
animation-delay: 0.66s;
|
||
}
|
||
.reveal .pop-in.fragment.visible {
|
||
-webkit-transform: scale(1);
|
||
-moz-transform: scale(1);
|
||
-ms-transform: scale(1);
|
||
transform: scale(1);
|
||
}
|
||
.reveal .pop-in.fragment.current-fragment {
|
||
color: #c22;
|
||
}
|
||
.reveal .grow-width {
|
||
-webkit-transition: all 0.5s ease 0.2s;
|
||
-moz-transition: all 0.5s ease 0.2s;
|
||
-o-transition: all 0.5s ease 0.2s;
|
||
-ms-transition: all 0.5s ease 0.2s;
|
||
transition: all 0.5s ease 0.2s;
|
||
}
|
||
.reveal .future .grow-width {
|
||
width: 0% !important;
|
||
-webkit-transition: none;
|
||
-moz-transition: none;
|
||
-o-transition: none;
|
||
-ms-transition: none;
|
||
transition: none;
|
||
}
|
||
.reveal .stampit {
|
||
-webkit-transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
||
-moz-transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
||
-ms-transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
||
transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
||
}
|
||
.reveal .future .stampit {
|
||
-webkit-transform: rotate(-12deg) scale(2);
|
||
-moz-transform: rotate(-12deg) scale(2);
|
||
-ms-transform: rotate(-12deg) scale(2);
|
||
transform: rotate(-12deg) scale(2);
|
||
-webkit-transition: none;
|
||
-moz-transition: none;
|
||
-ms-transition: none;
|
||
transition: none;
|
||
opacity: 0;
|
||
}
|
||
.reveal .headshot img {
|
||
border-radius: 50%;
|
||
border: 4px solid #c00 !important;
|
||
}
|
||
.reveal .condensed {
|
||
letter-spacing: 0.02em;
|
||
}
|
||
.reveal .condensed li {
|
||
margin-bottom: 1em ;
|
||
}
|
||
.reveal .has-light-background .sl-block .has-dark-background > svg.redhat-logo .logotext {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal .has-light-background .sl-block .reversed.redhat-logo .logotext,
|
||
.reveal .has-light-background .sl-block .reversed .redhat-logo .logotext,
|
||
.reveal .has-light-background .sl-block .has-dark-background > .redhat-logo .logotext {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal .has-dark-background .sl-block .reversed.redhat-logo .logotext,
|
||
.reveal .has-dark-background .sl-block .reversed .redhat-logo .logotext,
|
||
.reveal .has-dark-background .sl-block .has-light-background > .redhat-logo .logotext {
|
||
fill: #000000 !important;
|
||
}
|
||
.reveal .has-dark-background .has-light-background .logo .only-dark path,
|
||
.reveal .has-light-background .mono.redhat-logo path {
|
||
fill: #000000 !important;
|
||
}
|
||
.reveal .has-dark-background .mono.redhat-logo path {
|
||
fill: #ffffff;
|
||
}
|
||
.reveal .has-dark-background .logo .only-dark {
|
||
display: block;
|
||
}
|
||
.reveal .has-light-background .logo .only-light {
|
||
display: block;
|
||
}
|
||
.reveal .has-light-background .logo .only-dark {
|
||
display: none;
|
||
}
|
||
.reveal .has-dark-background .logo .only-light {
|
||
display: none;
|
||
}
|
||
.reveal .has-light-background .reversed svg path {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal .has-dark-background .reversed svg path {
|
||
fill: currentcolor;
|
||
}
|
||
.reveal .has-dark-background .has-light-background .logo .only-light,
|
||
.reveal .has-dark-background .reversed .logo .only-dark {
|
||
display: block;
|
||
}
|
||
.reveal .has-light-background .has-dark-background .logo .only-dark,
|
||
.reveal .has-light-background .logo .only-light {
|
||
display: block;
|
||
}
|
||
.reveal .has-light-background .has-dark-background .redhat-logo .only-dark,
|
||
.reveal .has-light-background .redhat-logo .only-light {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal .has-light-background .has-dark-background .logo .only-light,
|
||
.reveal .has-light-background .logo .only-dark,
|
||
.reveal .has-dark-background .has-light-background .logo .only-dark,
|
||
.reveal .has-dark-background .logo .only-light {
|
||
display: none;
|
||
}
|
||
.reveal .future .fade-up,
|
||
.reveal .future .fade-down,
|
||
.reveal .future .fade-left,
|
||
.reveal .future .fade-right,
|
||
.reveal .future .fade-zoom {
|
||
-webkit-transition: none;
|
||
transition: none;
|
||
opacity: 0;
|
||
filter: alpha(opacity=0);
|
||
}
|
||
.reveal .future .fade-up,
|
||
.reveal .fade-up.fragment {
|
||
-webkit-transform: translate(0, 2em);
|
||
-ms-transform: translate(0, 2em);
|
||
transform: translate(0, 2em);
|
||
opacity: 0;
|
||
filter: alpha(opacity=0);
|
||
}
|
||
.reveal .future .fade-down,
|
||
.reveal .fade-down.fragment {
|
||
-webkit-transform: translate(0, -2em);
|
||
-ms-transform: translate(0, -2em);
|
||
transform: translate(0, -2em);
|
||
opacity: 0;
|
||
filter: alpha(opacity=0);
|
||
}
|
||
.reveal .future .fade-left,
|
||
.reveal .fade-left.fragment {
|
||
-webkit-transform: translate(2em, 0);
|
||
-ms-transform: translate(2em, 0);
|
||
transform: translate(2em, 0);
|
||
opacity: 0;
|
||
filter: alpha(opacity=0);
|
||
}
|
||
.reveal .future .fade-right,
|
||
.reveal .fade-right.fragment {
|
||
-webkit-transform: translate(-2em, 0);
|
||
-ms-transform: translate(-2em, 0);
|
||
transform: translate(-2em, 0);
|
||
opacity: 0;
|
||
filter: alpha(opacity=0);
|
||
}
|
||
.reveal .future .fade-zoom,
|
||
.reveal .fade-zoom.fragment {
|
||
-webkit-transform: scale(0.1);
|
||
-ms-transform: scale(0.1);
|
||
transform: scale(0.1);
|
||
opacity: 0;
|
||
filter: alpha(opacity=0);
|
||
}
|
||
.reveal .future .fade-in {
|
||
transition: none;
|
||
opacity: 0;
|
||
}
|
||
.reveal .present .fade-in,
|
||
.reveal .present .fade-up,
|
||
.reveal .present .fade-down,
|
||
.reveal .present .fade-left,
|
||
.reveal .present .fade-right,
|
||
.reveal .present .fade-zoom {
|
||
-webkit-transition: all .5s ease .5s;
|
||
transition: all .5s ease .5s;
|
||
opacity: 1;
|
||
filter: alpha(opacity=100);
|
||
}
|
||
.reveal .present .fragment.visible.fade-up,
|
||
.reveal .present .fragment.visible.fade-down,
|
||
.reveal .present .fragment.visible.fade-left,
|
||
.reveal .present .fragment.visible.fade-right,
|
||
.reveal .present .fragment.visible.fade-zoom {
|
||
-webkit-transform: none ;
|
||
-ms-transform: none ;
|
||
transform: none ;
|
||
opacity: 1;
|
||
filter: alpha(opacity=100);
|
||
}
|
||
.reveal .sl-block {
|
||
font-family: "Overpass 2", "Hiragino Kaku Gothic", "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ Pro W3", Overpass, sans-serif !important;
|
||
}
|
||
.reveal .has-light-background .icon.stroked {
|
||
color: currentcolor;
|
||
}
|
||
.reveal .has-dark-background .icon.stroked path {
|
||
stroke: currentcolor;
|
||
}
|
||
.reveal .has-dark-background .only-light-background {
|
||
display: none !important;
|
||
}
|
||
.reveal .has-dark-background .only-dark-background {
|
||
display: block !important;
|
||
}
|
||
.reveal a.call-to-action:hover {
|
||
background-color: #d00 !important;
|
||
box-shadow: 0 0.5em 1em rgba(0, 0, 0, 0.05) !important;
|
||
text-shadow: none !important;
|
||
}
|
||
.reveal .sl-block[data-block-type="snippet"] table {
|
||
width: 100% !important;
|
||
max-width: 100% !important;
|
||
}
|
||
.reveal .sl-block[data-block-type="snippet"] table td {
|
||
border-color: currentcolor !important;
|
||
}
|
||
.reveal .sl-block[data-block-type="snippet"] table td {
|
||
text-align: inherit !important;
|
||
}
|
||
.reveal .sl-block[data-block-type="text"] table {
|
||
width: 100%;
|
||
}
|
||
.reveal .sl-block[data-block-type="text"] table td {
|
||
border-color: currentcolor;
|
||
}
|
||
.reveal .sl-block[data-block-type="text"] table td {
|
||
text-align: inherit;
|
||
}
|
||
.reveal.reveal .sl-block[data-block-type="image"] .person {
|
||
border-radius: 50%;
|
||
position: relative !important;
|
||
background-color: transparent;
|
||
height: auto !important;
|
||
}
|
||
.reveal.reveal .sl-block[data-block-type="image"] .person:before {
|
||
content: "" !important;
|
||
display: block !important;
|
||
padding-top: 100% ;
|
||
position: relative !important ;
|
||
/* 4:3 aspect ratio */
|
||
|
||
}
|
||
.reveal.reveal .sl-block[data-block-type="image"] .person > img {
|
||
position: absolute ;
|
||
margin: 0 auto !important;
|
||
left: 0% ;
|
||
right: 0 ;
|
||
width: auto !important;
|
||
top: 0 ;
|
||
bottom: 0 ;
|
||
}
|
||
.reveal .present .delay-1 {
|
||
transition-delay: 0.1s;
|
||
}
|
||
.reveal .present .delay-2 {
|
||
transition-delay: 0.2s;
|
||
}
|
||
.reveal .present .delay-3 {
|
||
transition-delay: 0.3s;
|
||
}
|
||
.reveal .present .delay-4 {
|
||
transition-delay: 0.4s;
|
||
}
|
||
.reveal .present .delay-5 {
|
||
transition-delay: 0.5s;
|
||
}
|
||
.reveal .present .delay-6 {
|
||
transition-delay: 0.6s;
|
||
}
|
||
.reveal .present .delay-7 {
|
||
transition-delay: 0.7s;
|
||
}
|
||
.reveal .present .delay-8 {
|
||
transition-delay: 0.8s;
|
||
}
|
||
.reveal .present .delay-9 {
|
||
transition-delay: 0.9s;
|
||
}
|
||
.reveal .present .delay-10 {
|
||
transition-delay: 1s;
|
||
}
|
||
.reveal .present .delay-11 {
|
||
transition-delay: 1.1s;
|
||
}
|
||
.reveal .present .delay-12 {
|
||
transition-delay: 1.2s;
|
||
}
|
||
.reveal .present .delay-13 {
|
||
transition-delay: 1.3s;
|
||
}
|
||
.reveal .present .delay-14 {
|
||
transition-delay: 1.4s;
|
||
}
|
||
.reveal .present .delay-15 {
|
||
transition-delay: 1.5s;
|
||
}
|
||
.reveal .present .delay-16 {
|
||
transition-delay: 1.6s;
|
||
}
|
||
.reveal .present .delay-17 {
|
||
transition-delay: 1.7s;
|
||
}
|
||
.reveal .present .delay-18 {
|
||
transition-delay: 1.8s;
|
||
}
|
||
.reveal .present .delay-19 {
|
||
transition-delay: 1.9s;
|
||
}
|
||
.reveal .present .delay-20 {
|
||
transition-delay: 2s;
|
||
}
|
||
.reveal .present .delay-21 {
|
||
transition-delay: 2.1s;
|
||
}
|
||
.reveal .present .delay-22 {
|
||
transition-delay: 2.2s;
|
||
}
|
||
.reveal .present .delay-23 {
|
||
transition-delay: 2.3s;
|
||
}
|
||
.reveal .present .delay-24 {
|
||
transition-delay: 2.4s;
|
||
}
|
||
.reveal .present .delay-25 {
|
||
transition-delay: 2.5s;
|
||
}
|
||
.reveal .present .delay-26 {
|
||
transition-delay: 2.6s;
|
||
}
|
||
.reveal .present .delay-27 {
|
||
transition-delay: 2.7s;
|
||
}
|
||
.reveal .present .delay-28 {
|
||
transition-delay: 2.8s;
|
||
}
|
||
.reveal .present .delay-29 {
|
||
transition-delay: 2.9s;
|
||
}
|
||
.reveal .present .delay-30 {
|
||
transition-delay: 3s;
|
||
}
|
||
.reveal .present .delay-31 {
|
||
transition-delay: 3.1s;
|
||
}
|
||
.reveal .present .delay-32 {
|
||
transition-delay: 3.2s;
|
||
}
|
||
.reveal .present .delay-33 {
|
||
transition-delay: 3.3s;
|
||
}
|
||
.reveal .present .delay-34 {
|
||
transition-delay: 3.4s;
|
||
}
|
||
.reveal .present .delay-35 {
|
||
transition-delay: 3.5s;
|
||
}
|
||
.reveal .present .delay-36 {
|
||
transition-delay: 3.6s;
|
||
}
|
||
.reveal .present .delay-37 {
|
||
transition-delay: 3.7s;
|
||
}
|
||
.reveal .present .delay-38 {
|
||
transition-delay: 3.8s;
|
||
}
|
||
.reveal .present .delay-39 {
|
||
transition-delay: 3.9s;
|
||
}
|
||
.reveal .present .delay-40 {
|
||
transition-delay: 4s;
|
||
}
|
||
.reveal .light-foreground .sl-block * {
|
||
color: #fff;
|
||
}
|
||
.reveal .dark-foreground .sl-block * {
|
||
color: #000;
|
||
}
|
||
.reveal .has-dark-background .invert {
|
||
color: #000;
|
||
}
|
||
.reveal .has-light-background .invert * {
|
||
color: #fff ;
|
||
}
|
||
.reveal .has-light-background .invert .only-light-background {
|
||
display: none ;
|
||
}
|
||
.reveal .has-light-background .invert .only-dark-background {
|
||
display: block !important;
|
||
}
|
||
.reveal .has-dark-background .invert .only-light-background {
|
||
display: block !important ;
|
||
}
|
||
.reveal .has-dark-background .invert .only-dark-background {
|
||
display: none !important;
|
||
}
|
||
.reveal .slide-number {
|
||
position: absolute !important;
|
||
opacity: 1;
|
||
right: 1em;
|
||
height: 28px;
|
||
min-width: 28px;
|
||
bottom: auto;
|
||
left: auto;
|
||
text-align: center;
|
||
font-size: 14px;
|
||
border-radius: 28px;
|
||
line-height: 28px;
|
||
color: white;
|
||
text-shadow: 0 0.1em 0.5em rgba(0, 0, 0, 0.4);
|
||
top: 1em;
|
||
font-family: "Overpass 2", Overpass, sans-serif;
|
||
font-weight: 500;
|
||
white-space: nowrap;
|
||
padding: 4px;
|
||
box-sizing: content-box;
|
||
}
|
||
.reveal .slide-number-delimiter {
|
||
margin: 0 1px;
|
||
}
|
||
.reveal.reveal .present.in-3d-appear {
|
||
transform: translatez(0em) !important;
|
||
animation: none !important;
|
||
transition: transform 1s ease !important;
|
||
}
|
||
.reveal.reveal .future.in-3d-appear {
|
||
transform: translatez(10em) rotateX(21deg) !important;
|
||
animation: none !important;
|
||
}
|
||
.reveal .no-filter img,
|
||
.reveal .no-filter {
|
||
filter: none !important;
|
||
-webkit-filter: none !important;
|
||
}
|
||
.reveal .present .fade-in-slow {
|
||
transition: all 5s ease;
|
||
}
|
||
.reveal .future .fade-in-slow {
|
||
transition: none;
|
||
opacity: 0;
|
||
}
|
||
.reveal .redhat-logo .logotext {
|
||
fill: #000000 !important;
|
||
}
|
||
.reveal .has-dark-background .redhat-logo .logotext {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal [data-block-type="table"] .sl-block-content {
|
||
font-size: .75em;
|
||
background-color: #c00;
|
||
color: #fff;
|
||
}
|
||
.reveal [data-block-type="table"] td {
|
||
background-color: #e5e5e5;
|
||
color: #333;
|
||
border-color: white;
|
||
}
|
||
.reveal div[data-block-type="table"] th {
|
||
font-weight: 500;
|
||
}
|
||
.reveal [data-block-type="table"] tr:nth-child(odd) td {
|
||
background-color: #f5f5f5;
|
||
color: #333;
|
||
}
|
||
.reveal .has-dark-background > [data-block-type="table"] td {
|
||
background-color: #131619;
|
||
color: #fff;
|
||
}
|
||
.reveal .has-dark-background > [data-block-type="table"] tr:nth-child(odd) td {
|
||
background-color: #232629;
|
||
color: #fff;
|
||
}
|
||
.reveal [data-block-type="code"],
|
||
.reveal .hljs {
|
||
background-color: white ;
|
||
color: rgba(55, 55, 55, 0.85) !important;
|
||
}
|
||
.reveal section .hljs {
|
||
background-color: white !important;
|
||
}
|
||
.reveal .has-dark-background [data-block-type="code"],
|
||
.reveal .has-dark-background .hljs {
|
||
background-color: #012736!important ;
|
||
color: rgba(255, 255, 255, 0.85) !important;
|
||
}
|
||
.reveal [data-block-type="code"] pre {
|
||
letter-spacing: 0.015em;
|
||
line-height: 1.5em;
|
||
}
|
||
.reveal .has-light-background[data-block-type="code"] pre,
|
||
.reveal [data-block-type="code"] pre {
|
||
background-color: white ;
|
||
color: currentcolor;
|
||
padding: 1em !important;
|
||
}
|
||
.reveal .has-dark-background [data-block-type="code"] pre {
|
||
background-color: #012736 ;
|
||
}
|
||
.reveal .hljs,
|
||
.reveal pre,
|
||
.reveal code {
|
||
font-family: 'Overpass Mono', monospace !important;
|
||
font-weight: 200 !important;
|
||
}
|
||
.reveal .hljs-literal {
|
||
color: #ffb612 !important;
|
||
}
|
||
.reveal .hljs-keyword {
|
||
color: #ffb612;
|
||
font-weight: 700 !important;
|
||
}
|
||
.reveal .hljs-string {
|
||
color: #88c639;
|
||
font-weight: 700;
|
||
}
|
||
.reveal .hljs-comment {
|
||
color: #94a0a7 !important;
|
||
font-weight: 400 !important;
|
||
}
|
||
.reveal .hljs-params {
|
||
color: #028c98 ;
|
||
font-weight: 700;
|
||
}
|
||
.reveal .hljs-attr {
|
||
color: #EC7A08 !important;
|
||
}
|
||
.reveal .hljs-tag {
|
||
color: #7F5FAE !important;
|
||
}
|
||
.reveal .hljs-name {
|
||
color: #028c98 !important;
|
||
}
|
||
.reveal .hljs-string {
|
||
color: #7f5fae !important;
|
||
}
|
||
.reveal .hljs-comment {
|
||
color: rgba(125, 125, 125, 0.65) !important;
|
||
}
|
||
.reveal .hljs-number {
|
||
color: #4e9fdd !important;
|
||
}
|
||
.reveal .hljs-attribute {
|
||
color: #ec9e34 !important;
|
||
}
|
||
.reveal .hljs-variable {
|
||
color: #4e9fdd !important;
|
||
}
|
||
.reveal .hljs-built_in {
|
||
color: #ee1122!important;
|
||
}
|
||
.reveal .hljs-selector-class {
|
||
color: #55aab2 !important;
|
||
}
|
||
.reveal [data-line-end-type="line-arrow"] line,
|
||
.reveal [data-line-start-type="line-arrow"] line,
|
||
.reveal [data-line-end-type="line-arrow"] path {
|
||
stroke-linecap: round;
|
||
stroke-linejoin: square;
|
||
}
|
||
.reveal div[data-block-type="line"] line[stroke="#000000"],
|
||
.reveal div[data-block-type="line"] path[stroke="#000000"] {
|
||
stroke: currentcolor;
|
||
}
|
||
.reveal [fill="none"] {
|
||
fill: none !important;
|
||
}
|
||
.reveal [fill="#a30000"] {
|
||
fill: #aa0000 !important;
|
||
}
|
||
.reveal [fill="#cc2029"],
|
||
.reveal [fill="#cb2027"],
|
||
.reveal [fill="#c00"] {
|
||
fill: #cc0000 !important;
|
||
}
|
||
.reveal [fill="#fff"] {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal [fill="#6d6e70"] {
|
||
fill: #6d6e70 !important;
|
||
}
|
||
.reveal [fill="#231f20"] {
|
||
fill: currentcolor !important;
|
||
}
|
||
.reveal [fill="#efab1f"] {
|
||
fill: #efab1f !important;
|
||
}
|
||
.reveal [fill="#92d400"] {
|
||
fill: #92d400 !important;
|
||
}
|
||
.reveal .has-dark-background [fill="#6d6e70"] {
|
||
fill: #266272 !important;
|
||
}
|
||
.reveal .has-dark-background [fill="#fff"] {
|
||
fill: #555555 !important;
|
||
}
|
||
.reveal .has-dark-background [fill="#fff"] {
|
||
fill: #333333 !important;
|
||
}
|
||
.reveal .has-dark-background [stroke="#231f20"] {
|
||
stroke: currentcolor;
|
||
}
|
||
.reveal .has-dark-background [fill="#221F1F"],
|
||
.reveal .has-dark-background [fill="#221f1f"],
|
||
.reveal .has-dark-background [fill="#231F20"],
|
||
.reveal .has-dark-background [fill="#010101"] {
|
||
fill: #ffffff !important;
|
||
}
|
||
.reveal [data-inline-svg="true"] img {
|
||
display: none;
|
||
}
|
||
.reveal .corner {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
overflow: hidden;
|
||
z-index: 8;
|
||
}
|
||
.reveal .corner svg {
|
||
transition: all .75s ease 5s;
|
||
}
|
||
|
||
</style>
|
||
|
||
</head>
|
||
<body class="reveal-viewport theme-font-overpass2 theme-color-no-color">
|
||
<div class="reveal">
|
||
<div class="slides">
|
||
<section data-id="23f97d8ca3692213d683eacd3fe8cc7c" data-background-color="rgb(12,61,71)" data-background-image="passive-filesystem-validation-asg2018/de26049e2540667b94b3ebaac424f755.jpg"><div class="sl-block" data-block-type="text" style="width: 800px; left: 80px; top: 250px; height: auto;" data-block-id="587376a0a305b36ca2e64db6da8b098a"><div class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 11;">
|
||
<h1 style="text-align:center">Passive FIlesystem VAlidation</h1>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 438px;" data-block-id="f27620cfa7bcea365c6956cbb6cd1dbc"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<p style="text-align:center"><a href="http://bit.ly/asg2018-vbatts-pfv" target="_blank">bit.ly/asg2018-vbatts-pfv</a></p>
|
||
|
||
<p style="text-align:center">Vincent Batts @vbatts</p>
|
||
</div></div>
|
||
</section><section data-id="7bbbb4c9cbb216b56050675ec07af48b"><div class="sl-block" data-block-type="code" style="min-width: 30px; min-height: 30px; width: 905px; height: 399px; left: 41px; top: 21px;" data-block-id="35547d2adfb96c21145c398dc1121461"><div class="sl-block-content notranslate" style="z-index: 11; font-size: 140%;" data-highlight-theme="ascetic"><pre><code>$> finger $(whoami)
|
||
Login: vbatts Name: Vincent Batts
|
||
Directory: /home/vbatts Shell: /bin/bash
|
||
Such mail.
|
||
Plan:
|
||
OHMAN
|
||
$> id -Gn
|
||
devel opencontainers docker appc redhat golang slackware</code></pre></div></div>
|
||
<div class="sl-block" data-block-type="image" style="min-width: 4px; min-height: 4px; width: 360px; height: 202.5px; left: 301px; top: 436px;" data-block-id="2480ba02cf3f27856e51aa83f42825ed"><div class="sl-block-content" style="z-index: 12;"><img data-natural-width="320" data-natural-height="180" data-lazy-loaded="" data-src="passive-filesystem-validation-asg2018/339e84e5deca8af62480a1dc3fb7af96.gif"></div></div></section><section data-background-color="#e9f4f6" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="d659a1b8073978dad27c4730b27c8e32"><div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 140px;" data-block-id="b72b9d2c71371a1b48e454d2dc117e4f"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<ul>
|
||
<li><span style="font-size:1.4em">Packaging</span></li>
|
||
<li class="fragment" data-fragment-index="0"><span style="font-size:1.4em">Content Addressibility</span></li>
|
||
<li class="fragment" style="color:rgb(53, 64, 69)" data-fragment-index="1"><span style="font-size:1.4em">Compression!</span></li>
|
||
<li class="fragment" data-fragment-index="2"><span style="font-size:1.4em">Reproducible Archives</span></li>
|
||
<li class="fragment" data-fragment-index="3"><span style="font-size:1.4em">Verify at rest filesystems</span></li>
|
||
</ul>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 80px; top: 70px;" data-block-id="0f7d4e0f40aceaf4e8bec594816d419e"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<h2>Agenda</h2>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="image" style="min-width: 4px; min-height: 4px; width: 360px; height: 270px; left: 300px; top: 355px;" data-block-id="5c34b45ca8cf3d6341bc375a97ad1ab7"><div class="sl-block-content fragment" style="z-index: 13;" data-fragment-index="4"><img data-natural-width="240" data-natural-height="180" data-lazy-loaded="" data-src="passive-filesystem-validation-asg2018/29583aa0f6502646cc4a405a00d175f1.jpg"></div></div></section><section data-background-color="#d4e8ec" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="98bfaf83d159474b370e8c0cd538eb75"><div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 80px; top: 70px;" data-block-id="edfbe434b245149557abe4ed0374699f"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Packaging</h2>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 120px; top: 140px;" data-block-id="5ea57af00cdbe78b2d98422f09c95846"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="1">
|
||
<p>tar archives</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 136px; top: 170px;" data-block-id="ea406a80f3812d8532f5e742026cabc4"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="2">
|
||
<p>Slackware packages (<a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 160px; top: 200px;" data-block-id="fbfee24bb7275c4b078df32f91811d84"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="3">
|
||
<p>Debian *.deb (<a href="http://linux.die.net/man/1/ar" target="_blank">ar(1)</a> archive of <a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 179px; top: 230px;" data-block-id="e674ef9dd70fc8d1802c77fa40e12a95"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;" data-fragment-index="4">
|
||
<p>Red Hat *.rpm (custom key/value binary and <a href="http://linux.die.net/man/1/cpio" target="_blank">cpio(1)</a>)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 200px; top: 260px;" data-block-id="9751f8af7ce297589a8630de3dd390f7"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 16;" data-fragment-index="5">
|
||
<p>Java *.jar and *.war (<a href="http://linux.die.net/man/1/zip" target="_blank">zip(1)</a> archive)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 228px; top: 290px;" data-block-id="962409707608e049261b890d083fc75a"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 17;" data-fragment-index="6">
|
||
<p>Ruby *.gem (<a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archive of <a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 246px; top: 320px;" data-block-id="2d56fec8bc2cf27ab82678d790d6ea60"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 18;" data-fragment-index="7">
|
||
<p>Container Images (<a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="image" style="min-width: 4px; min-height: 4px; width: 360px; height: 202.5px; left: 299px; top: 420px;" data-block-id="0e6ea5f9a4e64d1a8ed813745c2ceabe"><div class="sl-block-content fragment" style="z-index: 19;" data-fragment-index="0"><img data-natural-width="400" data-natural-height="225" data-lazy-loaded="" data-src="passive-filesystem-validation-asg2018/52bae18fc307ddf4e5bfe956296b0c0b.gif"></div></div></section><section data-background-color="#bbdde7" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="7892d6dfb0e286632d32cd4e0679931f"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="1ee0ca6ebbd1643ea9592902281d44ed"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Content Addressibility</h2>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 228px; top: 210px;" data-block-id="2900872241fd527d9b2c32d057bc5e5b"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="0">
|
||
<p>Opaque Object storage</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 200px; top: 240px;" data-block-id="6a4c935bc542f8d291b03e99699e313a"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="1">
|
||
<p>changed object = new object</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 270px;" data-block-id="fab9de1be18702477ee016e8866abc58"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="2">
|
||
<p>cryptographic assurance</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="image" style="min-width: 4px; min-height: 4px; width: 360px; height: 202.5px; left: 300px; top: 406px;" data-block-id="20e74f193f70fa15a337252c235ac403"><div class="sl-block-content fragment" style="z-index: 15;" data-fragment-index="3"><img data-natural-width="320" data-natural-height="180" data-lazy-loaded="" data-src="passive-filesystem-validation-asg2018/d1512c362a98d9ec4ccf4c33bb2064a7.gif"></div></div></section><section data-id="c095b0e8e95f59e5159f0839b919afb1" class="stack"><section data-background-color="#9fd4eb" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="191b0a4496689bf1a09515092f1dac47"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="b600581c1e08ba03a4d3098888cfda87"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>compression!</h2>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 335px;" data-block-id="3aaec9f2c5e2512af131e9949039afa5"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="1">
|
||
<p>inflate/deflate (RFC1951)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 135px; top: 180px;" data-block-id="ac13de5666ac7b72b6e979bd6307eb12"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="0">
|
||
<p>same objects, but variation in compression</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 210px; top: 365px;" data-block-id="b8a594e8ff539d120b7f658116d5971c"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="2">
|
||
<p>Gzip (RFC1952)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 232px; top: 395px;" data-block-id="8c39b951e4f2ddeec7dd96c98e34459e"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;" data-fragment-index="3">
|
||
<p>`gzip` vs Golang `compress/gzip` vs Zlib</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 100px; top: 490px;" data-block-id="52dd15e6c458c2ead4bbd4eb5a677963"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 16;" data-fragment-index="4">
|
||
<p>ideally compress for transfer and storage, but not for identity</p>
|
||
</div></div></section><section data-background-color="#9fd4eb" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="0c55eeb9a60659b64c85ed2af6b7de8d"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="4d68270abac5e5498c0e16c858d411f0"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
||
<h2>compression!</h2>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="code" style="width: 797px; height: 360px; left: 83px; top: 130px;" data-block-id="ff61fb20706a34931dfb288b0764074d"><div class="sl-block-content notranslate" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre><code>#!/bin/sh
|
||
dd if=/dev/urandom of=rando.img bs=1M count=2
|
||
cat rando.img | gzip -n > rando.img.gz
|
||
cat rando.img | gzip -n -9 > rando.img.9.gz
|
||
cat rando.img | xz > rando.img.xz
|
||
cat rando.img | xz -9 > rando.img.9.xz
|
||
sha1sum rando.img* > SHA1
|
||
|
||
cat rando.img | gzip -n > rando.img.gz
|
||
cat rando.img | gzip -n -9 > rando.img.9.gz
|
||
cat rando.img | xz > rando.img.xz
|
||
cat rando.img | xz -9 > rando.img.9.xz
|
||
sha1sum -c ./SHA1</code></pre></div></div></section><section data-background-color="#9fd4eb" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="b03d420eef149b7a255b09452e70846c"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="1816317af5d50947042c7daacf8b5f07"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>compression!</h2>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="code" style="width: 797px; height: 314px; left: 82px; top: 146px;" data-block-id="2ccaa735c0f479fdc19a4a40d2035187"><div class="sl-block-content notranslate" style="z-index: 13;" data-highlight-theme="solarized-dark"><pre><code>#!/usr/bin/env ruby
|
||
|
||
require 'zlib'
|
||
include Zlib
|
||
|
||
input = File.open(ARGV.first)
|
||
GzipWriter.open(ARGV.first + '.gz', DEFAULT_COMPRESSION, HUFFMAN_ONLY) do |gz|
|
||
gz.write(IO.binread(input))
|
||
end
|
||
input.flush()
|
||
input.close()</code></pre></div></div></section><section data-background-color="#9fd4eb" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="8ed56a11a24a87544db45844eb49f2ff"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="63660628cd9d020fda9cc2583b7a2d98"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>compression!</h2>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="code" style="width: 815px; height: 584px; left: 73px; top: 116px;" data-block-id="b9c9d66df18aa4ea66d038b0bf51b739"><div class="sl-block-content notranslate" style="z-index: 13;" data-highlight-theme="solarized-dark"><pre><code>package main
|
||
|
||
import (
|
||
"compress/gzip"
|
||
"io"
|
||
"os"
|
||
)
|
||
|
||
func main() {
|
||
input, err := os.Open(os.Args[1])
|
||
if err != nil {
|
||
println(err.Error())
|
||
os.Exit(1)
|
||
}
|
||
output, err := os.Create(os.Args[1] + ".gz")
|
||
if err != nil {
|
||
println(err.Error())
|
||
os.Exit(1)
|
||
}
|
||
gz := gzip.NewWriter(output)
|
||
if _, err := io.Copy(gz, input); err != nil {
|
||
println(err.Error())
|
||
os.Exit(1)
|
||
}
|
||
}</code></pre></div></div></section></section><section data-id="b934cded2ffaa3b885bbf648e9c2a8f0" class="stack"><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="82f0029078f19a23fd0232830442c176"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="406f53dc04435cfdf373efc090f6b69c"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 92px; top: 210px;" data-block-id="f78b20b98c43a5a56ec67372a34f4682"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="0">
|
||
<p>Regardless of transport, ensure resulting filesystem</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 120px; top: 240px;" data-block-id="64d77dbc5a9ef9d278d10780fce44bb8"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="1">
|
||
<p>(*.tar archive, rsync, bittorrent, IPFS, etc)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 286px; top: 295px;" data-block-id="6f2a201c1c894dd63babd9e85721cd30"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="2">
|
||
<p>`rpm -qV <package>` functionality</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 348px; top: 405px;" data-block-id="da8a2832445447eef9bc2a7574feab1d"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;" data-fragment-index="3">
|
||
<p>Future hopes could be <a href="http://linux-ima.sourceforge.net/" target="_blank">IMA/EVM</a></p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 160px; top: 460px;" data-block-id="6a32cc54b613bfef88733e16f0f956bf"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 16;" data-fragment-index="4">
|
||
<p>Passive validation of directory hierarchies</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 189px; top: 491px;" data-block-id="2d623785dd35b371c57374ccf6576c18"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 17;" data-fragment-index="5">
|
||
<p>BSD mtree(8)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 517px; left: 431px; top: 350px;" data-block-id="a35fd9f8f1c02406cdc52a2471e2e72e"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 18;">
|
||
<p><span style="color:#4c575e">dm-verity in select use-cases</span></p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="f4ec084cf5e959da310fde14a07c796e"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="9302588306260d7cf1b230811f29f70c"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 102px; top: 185px;" data-block-id="5e29f53ab1accbc5573700a121ca9af6"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<p><a href="http://www.freebsd.org/cgi/man.cgi?mtree(8)" target="_blank">FreeBSD mtree(8)</a></p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 182px; top: 255px;" data-block-id="87fde9a6a5f57bc73f68daf49b83e9a9"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<p><a href="https://github.com/archiecobbs/mtree-port" target="_blank">mtree-port (for linux)</a></p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 262px; top: 325px;" data-block-id="4e046b35652b3179bb6af7f43bedfb76"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
||
<p><a href="https://github.com/vbatts/go-mtree" target="_blank">go-mtree (golang cli and library)</a></p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 548px; left: 342px; top: 395px;" data-block-id="c185f40c5832e81f4991245d5c514aea"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;">
|
||
<p><a href="https://www.freebsd.org/cgi/man.cgi?query=libarchive-formats&sektion=5" target="_blank">libarchive-formats(5)</a> (so `bsdtar`)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 438px; left: 424px; top: 460px;" data-block-id="ee203ef833918aeec6f2c41699256c63"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;">
|
||
<p><a href="https://github.com/systemd/casync" target="_blank">casync mtree</a></p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 259px; left: 499px; top: 530px;" data-block-id="92457b90deb4da778c5e306e5a93e485"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 17;">
|
||
<p><a href="https://github.com/openSUSE/umoci" target="_blank">umoci unpack</a></p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="9d8c207f6c3e68a45c7f4887a6c4e365"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="be273642037446a8ae974f1155cc2c9c"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="code" style="width: 924px; height: 500px; left: 19px; top: 177px;" data-block-id="935ad7e5769aa3c9b174622a991cd588"><div class="sl-block-content notranslate" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>[root@host /]# gomtree -c -K sha256 -p /usr/ | head -30
|
||
# user: root
|
||
# machine: host
|
||
# tree: /usr
|
||
# date: Wed Sep 26 16:07:53 2018
|
||
# keywords: size,type,uid,gid,mode,link,nlink,time,sha256digest
|
||
|
||
# .
|
||
/set type=file nlink=1 mode=0664 uid=0 gid=0
|
||
. size=100 type=dir mode=0755 time=1524747817.000000000
|
||
tmp size=10 type=link mode=0777 link=../var/tmp time=1517996467.000000000
|
||
|
||
# bin
|
||
bin size=5268 type=dir mode=0555 time=1537977678.074646319
|
||
\133 size=48 mode=0555 time=1521637266.000000000 sha256digest=afd97bbd643bfe1473794af167cd5c6f44fe449681033e3584b40b836f624b4b
|
||
alias size=29 mode=0755 time=1521122304.000000000 sha256digest=c9e358c5012c2cf9171ec4f7692ac3a1cbc280617b610d77d813653a1d0dfeb8
|
||
applydeltarpm size=72752 mode=0755 time=1517985721.000000000 sha256digest=359f076a0a259bdab3d8139546319efe076fe49733c44aae1a823872e51451eb
|
||
arch size=51 mode=0555 time=1521637267.000000000 sha256digest=209bae4071910ef54b4a3bd302059bf7e00870d8bacffcd7c5489425f37ed16f
|
||
</code></pre></div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 160px; top: 134px;" data-block-id="4667c4f2892b5cc6ee0285c710306e19"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
||
<p>gomtree</p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="b25b06acc08f25f75c2875d8b132e653"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="92b701d6e5694a79a70ed43fcabfff4a"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="code" style="width: 924px; height: 385px; left: 18px; top: 175px;" data-block-id="74c0a6b6747c2b5226ba091dbd0448b9"><div class="sl-block-content notranslate" style="z-index: 11;" data-highlight-theme="solarized-dark"><pre class="bash"><code>[root@host /]# casync mtree /usr/
|
||
. type=dir mode=0755 uid=0 gid=0 time=1524747817.000000000
|
||
bin type=dir mode=0555 uid=0 gid=0 time=1537977212.955190222
|
||
bin/[ type=file mode=0555 size=48 uid=0 gid=0 time=1521637266.000000000 sha512256digest=f02fe283c47d25e8273a4ce6297eef3e9f2300f597207fa6b82fc12694bd9771
|
||
bin/alias type=file mode=0755 size=29 uid=0 gid=0 time=1521122304.000000000 sha512256digest=c526d0d764732aa40fa866033bc49882f1e575ff89f969261eb354945db57d75
|
||
bin/applydeltarpm type=file mode=0755 size=72752 uid=0 gid=0 time=1517985721.000000000 sha512256digest=794cd98d3aac69cd3a2ab0e6820e0070555fdbc79de906a79addb98b919baa47
|
||
bin/arch type=file mode=0555 size=51 uid=0 gid=0 time=1521637267.000000000 sha512256digest=5516a6b4ee54e9f5fa7d8842781bcb6b3799e2dfa581ce1941c1c9f06a22d648
|
||
bin/awk type=link mode=0777 link=gawk uid=0 gid=0 time=1519649348.000000000
|
||
bin/b2sum type=file mode=0555 size=52 uid=0 gid=0 time=1521637266.000000000 sha512256digest=423c318bb3cad9826bf3b932baccb66baf2c7f0d55cb0d7d10f41d7e4ebb8fe6
|
||
bin/base32 type=file mode=0555 size=53 uid=0 gid=0 time=1521637266.000000000 sha512256digest=45b43efd608aca559aa0dea075a46a554f7e7fcc3534ea2c7f8edc344a342ead
|
||
bin/base64 type=file mode=0555 size=53 uid=0 gid=0 time=1521637266.000000000 sha512256digest=d63d00e263f95f09a27ddd4fc6a00b76835e5371af0a2c9a32e3929305810536
|
||
[...]</code></pre></div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 160px; top: 134px;" data-block-id="2f365ffc15f07d31a483e847d2150d21"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<p>casync mtree</p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="ff37ed541457eeca9c7ca5304a482fa3"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="63fc9d3ffb000e20cf14f61b6e3d52f0"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="code" style="width: 924px; height: 506px; left: 18px; top: 175px;" data-block-id="5f076fa7713a18d9cd31b0a97ef29003"><div class="sl-block-content notranslate" style="z-index: 11;" data-highlight-theme="solarized-dark"><pre class="bash"><code>> skopeo copy docker://docker.io/busybox:latest oci:busybox:latest
|
||
> umoci unpack --image ./busybox:latest busybox-bundle
|
||
> cat busybox-bundle/sha256_9b9b48e2d92691f344ad1701e7df04f89dd2041f2f05cccfec39af8ac3a62d25.mtree
|
||
# user: root
|
||
# machine: host
|
||
# tree: busybox-bundle/rootfs
|
||
# date: Wed Sep 26 16:21:46 2018
|
||
# keywords: size,type,uid,gid,mode,link,nlink,tar_time,sha256digest,xattr
|
||
|
||
# .
|
||
/set type=file nlink=1 mode=0664 uid=0 gid=0
|
||
. size=52 type=dir mode=0755 tar_time=0.000000000
|
||
|
||
# bin
|
||
bin size=4638 type=dir mode=0755 tar_time=1533068407.000000000
|
||
\133 size=1083720 mode=0755 nlink=393 tar_time=1533068407.000000000 sha256digest=ee8001feee768df41ff9a2b704b4a027d7ed76f78f09648a5b7ad9f1d7d45640
|
||
\133\133 size=1083720 mode=0755 nlink=393 tar_time=1533068407.000000000 sha256digest=ee8001feee768df41ff9a2b704b4a027d7ed76f78f09648a5b7ad9f1d7d45640
|
||
acpid size=1083720 mode=0755 nlink=393 tar_time=1533068407.000000000 sha256digest=ee8001feee768df41ff9a2b704b4a027d7ed76f78f09648a5b7ad9f1d7d45640
|
||
add-shell size=1083720 mode=0755 nlink=393 tar_time=1533068407.000000000 sha256digest=ee8001feee768df41ff9a2b704b4a027d7ed76f78f09648a5b7ad9f1d7d45640
|
||
addgroup size=1083720 mode=0755 nlink=393 tar_time=1533068407.000000000 sha256digest=ee8001feee768df41ff9a2b704b4a027d7ed76f78f09648a5b7ad9f1d7d45640
|
||
adduser size=1083720 mode=0755 nlink=393 tar_time=1533068407.000000000 sha256digest=ee8001feee768df41ff9a2b704b4a027d7ed76f78f09648a5b7ad9f1d7d45640
|
||
adjtimex size=1083720 mode=0755 nlink=393 tar_time=1533068407.000000000 sha256digest=ee8001feee768df41ff9a2b704b4a027d7ed76f78f09648a5b7ad9f1d7d45640
|
||
[...]</code></pre></div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 160px; top: 134px;" data-block-id="b862ab0acc85d92cc33852b120ffae85"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<p>umoci unpack</p>
|
||
</div></div></section><section data-id="cf2e4fa4d2fe6beb563c42a748b48c45" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-background-color="#b6e7f5"><div data-block-id="f97a4fd08cdd781f9f794fb490d31a10" class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div data-block-id="16d5b84fe59587b1ddd37cb1e6f26ab6" class="sl-block" data-block-type="code" style="width: 780px; height: 300px; left: 91px; top: 200px;"><div class="sl-block-content notranslate" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>tar cf /tmp/demo.tar .
|
||
gomtree -c -T /tmp/demo.tar -K sha256digest | tee /tmp/demo.mtree
|
||
|
||
gomtree -f /tmp/demo.mtree -T /tmp/demo.tar
|
||
echo $?
|
||
|
||
read
|
||
|
||
gomtree -f /tmp/demo.mtree -p ./
|
||
echo $?
|
||
|
||
|
||
touch $0 # SCANDALOUS
|
||
gomtree -f /tmp/demo.mtree -p ./</code></pre></div></div>
|
||
<div data-block-id="ab7c06375138d25ed1fd3351d21cc03b" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 181px; top: 140px;" data-block-type="text" class="sl-block"><div style="z-index: 13;" data-placeholder-text="Text" data-placeholder-tag="p" class="sl-block-content">
|
||
<p style="text-align: center;"><strong>Tar Archive Support</strong></p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="504b417f0e0fcada82f82c7f48fc8a05"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="1e5a6e8d13c057b214edfee228188103"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="code" style="width: 780px; height: 300px; left: 91px; top: 200px;" data-block-id="f37698d51ebf54832b858fbc234d92bc"><div class="sl-block-content notranslate" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>go get -u github.com/vbatts/go-mtree/cmd/gomtree
|
||
gomtree -c -p ./ -K sha256digest | tee /tmp/demo.mtree
|
||
|
||
gomtree -f /tmp/demo.mtree -p ./
|
||
echo $?
|
||
|
||
read
|
||
|
||
touch $0 # SCANDALOUS
|
||
gomtree -f /tmp/demo.mtree -p ./</code></pre></div></div>
|
||
<div data-block-id="22c062ff0668f453894679acb8a4f28c" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 140px;" data-block-type="text" class="sl-block"><div style="z-index: 13;" data-placeholder-text="Text" data-placeholder-tag="p" class="sl-block-content">
|
||
<p style="text-align: center;"><strong>Directory Path</strong></p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="6d5f286ddb5ec2821099d0319b33e9f1"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="8cd0066bebc1bb7565e477b3bae75c83"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="code" style="min-width: 30px; min-height: 30px; width: 780px; height: 300px; left: 91px; top: 200px;" data-block-id="284eb47327380fb50ef0dc90e2462f89"><div class="sl-block-content notranslate" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>mtree -c -p ./ -K sha256digest | tee /tmp/demo.mtree
|
||
|
||
mtree -f /tmp/demo.mtree -p ./
|
||
echo $?
|
||
|
||
read
|
||
|
||
touch $0 # SCANDALOUS
|
||
mtree -f /tmp/demo.mtree -p ./</code></pre></div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 174px; top: 125px;" data-block-id="07e4d8f94efdc457b271c63c6115d630"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
||
<p>BSD mtree || mtree-port</p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="8526a808386bdf837654854c12116ea7"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="4aba5be50744290c8c19011eb041b2c6"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="code" style="width: 780px; height: 300px; left: 91px; top: 200px;" data-block-id="606237f9a965810ca6da8a1b5d3e39ec"><div class="sl-block-content notranslate" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>#!/usr/bin/env python
|
||
|
||
import libarchive
|
||
|
||
with libarchive.file_writer('../demo.mtree', 'mtree') as a:
|
||
a.add_files('./')
|
||
|
||
</code></pre></div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 146px; top: 140px;" data-block-id="6a03374c2a727dd1a22d15b70d91c645"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
||
<p>with packages: libarchive and python-libarchive-c</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 172px; top: 507px;" data-block-id="25867140c0fce8ffba59ab44535fc1b4"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;">
|
||
<p style="text-align: center;"><font color="#b21a0f"><span style="font-size:28px">NOTICE: libarchive uses older mtree format</span></font></p>
|
||
</div></div></section><section data-background-color="#b6e7f5" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="2fb0b8cf01c73a1eb5eff6da50267c09"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="2acc55ddaddbab37adb0aac14230c294"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
||
<h2>Verify at rest Filesystems</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="code" style="width: 780px; height: 300px; left: 91px; top: 200px;" data-block-id="2198836d801d84032f4dcac49ee2536a"><div class="sl-block-content notranslate" style="z-index: 11;" data-highlight-theme="solarized-dark"><pre class="bash"><code>[root@host /]# bsdtar --format mtree -cf foo.mtree /usr
|
||
bsdtar: Removing leading '/' from member names
|
||
[root@fa97e1919c44 /]# more foo.mtree
|
||
#mtree
|
||
./usr gname=root uname=root time=1524747817.0 mode=755 gid=0 uid=0 type=dir
|
||
./usr/tmp gname=root uname=root time=1517996467.0 mode=777 gid=0 uid=0 type=link link=../var/tmp
|
||
./usr/bin gname=root uname=root time=1537976676.897120032 mode=555 gid=0 uid=0 type=dir
|
||
./usr/bin/[ gname=root uname=root time=1521637266.0 mode=555 gid=0 uid=0 type=file size=48
|
||
./usr/bin/alias gname=root uname=root time=1521122304.0 mode=755 gid=0 uid=0 type=file size=29
|
||
[...]</code></pre></div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 146px; top: 140px;" data-block-id="c460848cd87c8bd5b074b790291f2469"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<p>bsdtar (libarchive)</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 181px; top: 510px;" data-block-id="3e201828ba700942ca43ee80197adb4e"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
||
<p style="text-align: center;"><font color="#b21a0f"><span style="font-size:28px">NOTICE: libarchive uses older mtree format</span></font></p>
|
||
</div></div></section></section><section data-background-color="#cfe68f" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="e476ce5949f36b4e3a4e1a50925175f0"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="3d645fb9a1d58446f89e01b5c3ca6abf"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h2>Call to Action</h2>
|
||
</div></div>
|
||
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 120px; top: 210px;" data-block-id="6b8eca2e2e70cdaec390a2eb3d54dc3d"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<p>get familiarized with mtree format</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 240px; top: 376px;" data-block-id="15c4892f73b935f2a962a2363232d2d6"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
||
<p><span><a href="https://github.com/vbatts/go-mtree" target="_blank">github.com/vbatts/go-mtree</a></span></p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 166px; top: 265px;" data-block-id="0b2331d2fc8045d127715c446094d6df"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;">
|
||
<p>make your implementation compatible</p>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 200px; top: 320px;" data-block-id="a5b43d78fb90bd4127a24ba43a7bc565"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;">
|
||
<p>consider your provenance and sharing fs metadata use-cases</p>
|
||
</div></div></section><section data-background-color="#f08d24" data-background-image="passive-filesystem-validation-asg2018/60672f0849c5b758b11dc0905dc42c02.svg" data-id="461b39bbf2bb2801c38afe7639a44279"><div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 444px;" data-block-id="74dc5cae72dc0f9e4fe69169ea811245"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
||
<h3 style="text-align:center"><a href="https://github.com/vbatts/talks" target="_blank">github.com/vbatts/talks</a></h3>
|
||
|
||
<h3 style="text-align:center">Thank You!</h3>
|
||
</div></div>
|
||
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 766px; left: 97px; top: 186px;" data-block-id="e149c15aec00cfa9da0b05bf6cc4670d"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
||
<h2 style="color:rgb(53, 64, 69); text-align:center">VINCENT BATTS</h2>
|
||
|
||
<h2 style="color:rgb(53, 64, 69); text-align:center">@VBATTS| VBATTS@REDHAT.COM</h2>
|
||
</div></div></section>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
var SLConfig = {"deck": {"id":1335325,"slug":"passive-filesystem-validation-asg2018","title":"Passive Filesystem Validation (ASG 2018)","description":"A side effect of the many new ways to package filesystems (here's looking at you, containers!), is that filesystems are being copied around without many of the features that traditional packaging provided (i.e. `rpm -qV ...`). Much progress has been made for reproducible checksums, of which Docker now includes for better content addressibility. In this talk Vincent Batts will review options for distributing filesystems with reproducibility, and verifying the at-rest outcomes.","width":960,"height":700,"visibility":"self","published_at":null,"sanitize_messages":null,"thumbnail_url":"https://s3.amazonaws.com/media-p.slid.es/thumbnails/bcc13f2c53c69ec1ab3fe7c84d78c158/thumb.jpg?1538194878","view_count":2,"user":{"id":352550,"username":"vbatts","name":"Vincent Batts","description":"","thumbnail_url":"https://www.gravatar.com/avatar/a76bbb02d3ce311820f53ef484c0f8bf?s=140\u0026d=https%3A%2F%2Fstatic.slid.es%2Fimages%2Fdefault-profile-picture.png","paid":true,"pro":true,"lite":false,"team_id":32,"settings":{"id":185974,"present_controls":true,"present_upsizing":true,"present_pointer":false,"present_notes":true,"default_deck_tag_id":null},"enterprise":true,"membership":{"role":"member","manager":false,"activated":true}},"background_transition":"none","transition":"none","theme_id":176,"theme_font":"overpass2","theme_color":"no-color","auto_slide_interval":0,"comments_enabled":true,"forking_enabled":false,"rolling_links":false,"center":false,"shuffle":false,"should_loop":false,"share_notes":false,"slide_number":false,"slide_count":23,"rtl":false,"version":2,"collaborative":false,"deck_user_editor_limit":1,"data_updated_at":1538195188575,"font_typekit":null,"font_google":null,"notes":{"8ed56a11a24a87544db45844eb49f2ff":"demo","0c55eeb9a60659b64c85ed2af6b7de8d":"demo","b03d420eef149b7a255b09452e70846c":"demo","0a9edb24c627567228da4a3955f93338":"demo","504b417f0e0fcada82f82c7f48fc8a05":"demo ./go-mtree.sh","6d5f286ddb5ec2821099d0319b33e9f1":"demo ./mtree.sh","8526a808386bdf837654854c12116ea7":"no demo for this, they can do that on their own"}}};
|
||
|
||
SLConfig.theme = {"id":176,"created_at":"2014-05-27T12:38:16.183Z","updated_at":"2018-05-04T07:53:25.097Z","name":"Red Hat Corporate","thumbnail_url":"https://s3.amazonaws.com/media-p.slid.es/thumbnails/66755080be2b0c8c0146bfa70069ef16/thumb.jpg?1525420403","sanitize_messages":null,"slide_template_ids":[56706,56689,28642,36442,27160,26765,26762,56684,56696,56704,56703],"font_typekit":"","font_google":"","width":960,"height":700};
|
||
|
||
// Use local fonts
|
||
SLConfig.fonts_url = 'lib/fonts/';
|
||
</script>
|
||
|
||
<script src="lib/head.min.js"></script>
|
||
<script src="lib/reveal.min.js"></script>
|
||
<script src="lib/offline.js"></script>
|
||
|
||
<!-- Initialize the presentation -->
|
||
<script>
|
||
Reveal.initialize({
|
||
width: 960,
|
||
height: 700,
|
||
margin: 0.05,
|
||
|
||
controls: true,
|
||
progress: true,
|
||
history: true,
|
||
mouseWheel: false,
|
||
showNotes: false,
|
||
slideNumber: false,
|
||
|
||
autoSlide: 0 || 0,
|
||
autoSlideStoppable: true,
|
||
|
||
center: false,
|
||
shuffle: false,
|
||
loop: false,
|
||
rtl: false,
|
||
|
||
transition: "none",
|
||
backgroundTransition: "none",
|
||
|
||
dependencies: [
|
||
{ src: 'lib/reveal-plugins/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
||
{ src: 'lib/reveal-plugins/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
||
{ src: 'lib/reveal-plugins/highlight/highlight.js', async: true, callback: function() { hljs.initHighlighting(); hljs.initHighlightingOnLoad(); } },
|
||
{ src: 'lib/reveal-plugins/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },
|
||
{ src: 'lib/reveal-plugins/zoom/zoom.js', async: true }
|
||
]
|
||
});
|
||
</script>
|
||
|
||
|
||
<script id="theme-js-output" type="text/javascript">var themeHTMLOutput = document.getElementById('theme-html-output');
|
||
if( themeHTMLOutput ) {
|
||
themeHTMLOutput.innerHTML = '<link rel="stylesheet" href="https://overpassmonotest-30e2.kxcdn.com/overpass-mono.css" />';
|
||
}
|
||
|
||
// (function() {
|
||
//
|
||
// var slidesInitInterval = setInterval( function() {
|
||
// if( window.SL && window.SL.view ) {
|
||
// // If we're in the editor, wait for the Blocks controller
|
||
// // to be initialized
|
||
// if( SL.editor ) {
|
||
//
|
||
// if( SL.editor.controllers && SL.editor.controllers.Blocks && SL.editor.controllers.Blocks.textSaved ) {
|
||
// SL.editor.controllers.Blocks.textSaved.add( function( element ) {
|
||
// var html = element.html();
|
||
// html = html.replace( /(@RedHat | @redhat)/g, '@redhat' );
|
||
// html = html.replace( 'redhat.com', 'redhat.com' );
|
||
// html = html.replace( /(Red Hat|red hat|RedHat|Red hat|Redhat|redHat|red Hat)/g, '<span class="name">Red Hat</span>' );
|
||
// html = html.replace( /( redhat |redhat )/g, ' <span class="name">Red Hat</span> ' );
|
||
// html = html.replace( 'REDHAT', '<span class="name">RED HAT</span>' );
|
||
// html = html.replace( 'redhat<', '<span class="name">Red Hat</span><' );
|
||
// html = html.replace( 'openshift', '<span class="name">OpenShift</span>' );
|
||
// html = html.replace( '<span class="name"><span class="name">Red Hat</span></span>', '<span class="name">Red Hat</span>' );
|
||
// html = html.replace( 'redhat.com', 'redhat.com' );
|
||
// html = html.replace( 'REDHAT.COM', 'REDHAT.COM' );
|
||
// html = html.replace( '@redhat', '@redhat' );
|
||
// html = html.replace( /(@RedHatNews | @redhatnews)/g, '@RedHatNews' );
|
||
// html = html.replace( /(@RedHat | @redhat)/g, '@RedHatInc' );
|
||
// html = html.replace( /(RHEL-OSP|RHELOSP|Red Hat Enterprise Linux OpenStack Platform)/g, 'Red Hat OpenStack Platform' );
|
||
// html = html.replace( /(openstack |openstack|open stack|openStack|Openstack)/g, 'OpenStack' );
|
||
// html = html.replace( 'openstack', 'OpenStack' );
|
||
// html = html.replace( 'openstack<', 'OpenStack<' );
|
||
//
|
||
// element.html( html );
|
||
// } );
|
||
//
|
||
// clearInterval( slidesInitInterval );
|
||
// }
|
||
//
|
||
// }
|
||
// else {
|
||
// clearInterval( slidesInitInterval );
|
||
// }
|
||
// }
|
||
// }, 500 );
|
||
//
|
||
// })();
|
||
|
||
|
||
|
||
// piwik script
|
||
var _paq = _paq || [];
|
||
_paq.push(["trackPageView"]);
|
||
_paq.push(["enableLinkTracking"]);
|
||
|
||
(function() {
|
||
var u = (("https:" == document.location.protocol) ? "https" : "http") +
|
||
"://engstats.redhat.com/piwik/";
|
||
_paq.push(["setTrackerUrl", u+"piwik.php"]);
|
||
_paq.push(["setSiteId", "8"]);
|
||
var d=document, g=d.createElement("script"),
|
||
s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
|
||
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
|
||
})();
|
||
|
||
|
||
|
||
|
||
function sliceString(selector) {
|
||
var elements = document.getElementsByClassName(selector);
|
||
|
||
|
||
for (var h=0; h<elements.length; h++){
|
||
var string = elements[h].innerText,
|
||
total = string.length,
|
||
div = '';
|
||
|
||
// futile attempt to clean space
|
||
var string = elements[h].innerText.trim();
|
||
|
||
for (var i=0; i<total; i++) {
|
||
var letter = string.charAt(i);
|
||
div+= '<span class="'+letter+'">'+letter+'</span>';
|
||
}
|
||
elements[h].innerHTML = div;
|
||
}
|
||
}
|
||
sliceString('lettering');
|
||
sliceString('lettering'); //no rogue spaces when fired twice for some reason
|
||
|
||
|
||
|
||
// function sliceString(selector) {
|
||
// if (!document.querySelector) return;
|
||
// var string = document.querySelector(selector).innerText,
|
||
// total = string.length,
|
||
// html = '';
|
||
// for (var i=0; i<total; i++) {
|
||
// var letter = string.charAt(i);
|
||
// html+= '<span class="'+letter+'">'+letter+'</span>';
|
||
// }
|
||
// document.querySelector(selector).innerHTML = html;
|
||
//}
|
||
//sliceString('.lettering');</script>
|
||
|
||
</body>
|
||
</html>
|