|
| 1 | +\documentclass{beamer} |
| 2 | + |
| 3 | +\usetheme[progressbar=frametitle]{metropolis} |
| 4 | +%\setbeamertemplate{frame numbering}[fraction] |
| 5 | +\useoutertheme{metropolis} |
| 6 | +\useinnertheme{metropolis} |
| 7 | +\usefonttheme{metropolis} |
| 8 | +\usecolortheme{spruce} |
| 9 | +\setbeamercolor{background canvas}{bg=white} |
| 10 | + |
| 11 | +\usepackage{listings} |
| 12 | +% storing our images |
| 13 | +\usepackage{graphicx} |
| 14 | +\graphicspath{{./images/}} |
| 15 | + |
| 16 | +%Information to be included in the title page: |
| 17 | +\title{Building SCaLE's OpenWrt Conference WiFi} |
| 18 | +\subtitle{Yes...The very network you're connected to right now} |
| 19 | +\author{ |
| 20 | + Robert Hernandez \\ |
| 21 | + CTO @ Nebulaworks \\ |
| 22 | + @sarcasticadmin |
| 23 | +} |
| 24 | +\date{July 2022} |
| 25 | + |
| 26 | +\setbeameroption{hide notes} % Only slides |
| 27 | +%\setbeameroption{show only notes} % Only notes |
| 28 | +%\setbeameroption{show notes on second screen=right} % Both |
| 29 | + |
| 30 | +%\setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote}\usepackage{palatino} |
| 31 | + |
| 32 | +\begin{document} |
| 33 | +\metroset{block=fill} |
| 34 | +\frame{\titlepage} |
| 35 | + |
| 36 | +\begin{frame} |
| 37 | +\frametitle{Tech Team} |
| 38 | + %{\large \textbf{SCaLE Tech Team}} |
| 39 | + \begin{center} |
| 40 | + \includegraphics[scale=.5]{scale-tech} |
| 41 | + \end{center} |
| 42 | + \note[item]{SCaLE is run by many volunteers and traditionally the scale-network team provides this service} |
| 43 | + \note[item]{Our tech team is made up by 10 dedicated team members who have been dedicated to the conference for many years} |
| 44 | +\end{frame} |
| 45 | + |
| 46 | +\begin{frame} |
| 47 | +\frametitle{Why} |
| 48 | + \begin{center} |
| 49 | + {\large \textbf{Conference attendees need WiFi} \\[20pt]} |
| 50 | + \includegraphics[scale=.5]{wifi-signage} |
| 51 | + \end{center} |
| 52 | + \note[item]{And countless options to choose from: many propertary and only a few open} |
| 53 | + \note[item]{SCaLE is run by many volunteers and traditionally the scale-network team provides this service} |
| 54 | +\end{frame} |
| 55 | + |
| 56 | + |
| 57 | +\begin{frame} |
| 58 | +\frametitle{History} |
| 59 | + % Alert to highlight each part of the timeline |
| 60 | + \begin{itemize}[<alert@+>] |
| 61 | + % TODO: What about prior years? |
| 62 | + \item Jan 2017 - "Does anyone know how to build OpenWrt?" |
| 63 | + \note[item]{During one of my first conference calls on the tech team prior to SCaLE 15x in Jan 2017} |
| 64 | + \note[item]{Previous Tech Team was no more and everyone was new for the coming year} |
| 65 | + \note[item]{Bare minimum for SCaLE 15x but config was kept} |
| 66 | + \onslide<2->{ |
| 67 | + \item March 2017 - SCaLE 15x |
| 68 | + } |
| 69 | + \onslide<3->{ |
| 70 | + \item Sept 2017 - Decision to stick with OpenWrt |
| 71 | + } |
| 72 | + \onslide<4->{ |
| 73 | + \item July 2022 - SCaLE 19x |
| 74 | + } |
| 75 | + \end{itemize} |
| 76 | + \note[item]{This led to 5 years of iteration by the entire Tech Team} |
| 77 | + \note[item]{Many of the things Ill be covering were built out of necessity and in an effort to provide a reliable network come show time} |
| 78 | +\end{frame} |
| 79 | + |
| 80 | +% TODO: Where to put "how" might need to be before history |
| 81 | +\begin{frame} |
| 82 | +\frametitle{Hardware} |
| 83 | + \begin{center} |
| 84 | + {\large \textbf{ \textasciitilde 120 consumer "routers"} \\[20pt]} |
| 85 | + \small{ |
| 86 | + \begin{tabular}{| l | l | l | l | l |} |
| 87 | + \hline |
| 88 | + Model & WiFi Chipsets & 2.4 GHz & 5 GHz & RAM \\ \hline |
| 89 | + Netgear 3700v2 & Ath AR9220 + AR9223 & b/g/n & a/n & 64MB \\ \hline |
| 90 | + Netgear 3800[CH] & Ath AR9220 + AR9223 & b/g/n & a/n & 64MB \\ \hline |
| 91 | + \end{tabular} \\[20pt] |
| 92 | + } |
| 93 | + \includegraphics[scale=.3]{wndr3700_v2} |
| 94 | + \end{center} |
| 95 | + \note[item]{Netgear 3700v2 and 3800 series} |
| 96 | + \note[item]{We do have support the TPlink C2600 but wireless driver support has been unreliable of the past couple of years} |
| 97 | +\end{frame} |
| 98 | + |
| 99 | +\begin{frame} |
| 100 | +\frametitle{Repo} |
| 101 | + \begin{center} |
| 102 | + {\large \textbf{https://github.com/socallinuxexpo/scale-network}} |
| 103 | + \end{center} |
| 104 | + \note[item]{SCaLE techs single source of truth for all deployments} |
| 105 | +\end{frame} |
| 106 | + |
| 107 | + |
| 108 | +\begin{frame} |
| 109 | + \frametitle{Build} |
| 110 | + {\large \textbf{SCaLE's OpenWrt image}} \\[20pt] |
| 111 | + \begin{block}{16MB max} |
| 112 | + Kernel: Linux 5.10.89 2022 mips GNU/Linux \\ |
| 113 | + Pkgs: Bash, Python, OpenSSH, lldp, tcpdump, rsyslog, apinger, zabbix \\ |
| 114 | + Files: Openwrt Configs, ssh keys, etc. |
| 115 | + \end{block} |
| 116 | + Removed: luci, dropbear, dnsmasq, logd \\[20pt] |
| 117 | + |
| 118 | + \note[item]{openwrt is built of snapshots of upstream master for both kernel and packages} |
| 119 | + \note[item]{periodically bumped throughout the year} |
| 120 | + \note[item]{limited to 16MB on netgears} |
| 121 | + \note[item]{unnecessary packages and defaults are stripped out [luci, nat, etc.]} |
| 122 | + \note[item]{Bash, Python, OpenSSH, tcpdump, zabbix, rsyslog installed via opkg at image build time} |
| 123 | + \note[item]{mixin config files via templating process} |
| 124 | +\end{frame} |
| 125 | + |
| 126 | +% TODO: How to convey the image of massflash |
| 127 | +\begin{frame} |
| 128 | + \frametitle{Flash} |
| 129 | + \only<1>{\line(1,0){50}} |
| 130 | + \only<2>{\textcolor{red}{Traditional}} |
| 131 | + \note[item]{manual setup, paperclip and detection of flash process} |
| 132 | + \only<3>{ |
| 133 | + \begin{center} |
| 134 | + \includegraphics[scale=.25]{wifi-hard-reset} |
| 135 | + \end{center} |
| 136 | + } |
| 137 | + \only<4>{\textcolor{orange}{Solo}} |
| 138 | + \note[item]{expect script that waits for signals from AP that its in the proper mode} |
| 139 | + \only<5>{ |
| 140 | + \textcolor{green}{Mass} |
| 141 | + } |
| 142 | + \only<9>{\textcolor{green}{Autoflash}} |
| 143 | + \note[item]{Tease this and mention that well discuss this last option later when we discuss testing} |
| 144 | + \only<1,2,4,5,9>{OpenWrt Flash} |
| 145 | + \only<6>{ |
| 146 | + \begin{center} |
| 147 | + \includegraphics[scale=.25]{massflash-1} |
| 148 | + \end{center} |
| 149 | + } |
| 150 | + \only<7>{ |
| 151 | + \begin{center} |
| 152 | + \includegraphics[scale=.25]{massflash-2} |
| 153 | + \end{center} |
| 154 | + } |
| 155 | + \only<8>{ |
| 156 | + \begin{center} |
| 157 | + \includegraphics[scale=.25]{massflash-3} |
| 158 | + \end{center} |
| 159 | + } |
| 160 | + \note[item]{Requires openwrt and SSH access to the hardware} |
| 161 | + \note[item]{Via DHCP lease event then SCP and trigger reflash of hardware} |
| 162 | + \note[item]{Reflash fleet of 100 APs in 2 hours} |
| 163 | + \note[item]{Limited by switch ports and power strips} |
| 164 | + \note[item]{Consistent, prior we often werent sure if image was flashed} |
| 165 | +\end{frame} |
| 166 | + |
| 167 | +\begin{frame} |
| 168 | + \frametitle{Management} |
| 169 | + {\large \textbf{SCaLE's OpenWrt management} \\[20pt]} |
| 170 | + \begin{itemize} |
| 171 | + \item Custom DHCP options: WiFi Channels and Network Config |
| 172 | + \item Re-flash APs for any major system updates |
| 173 | + \item SSH |
| 174 | + \item Rsyslog and zabbix for observability |
| 175 | + \end{itemize} |
| 176 | + \note[item]{Leverage custom DHCP options and scripts local to the AP} |
| 177 | + \note[item]{Network trunks and bridges are configured to accomediate all SCaLE needs (N buildins, etc.)} |
| 178 | + \note[item]{WiFi Channel info, network config provided via DHCP options} |
| 179 | + \note[item]{Anything adhoc is dealt with via SSH} |
| 180 | + \note[item]{Reflash APs for any major changes to configuration} |
| 181 | + \note[item]{mixin config files} |
| 182 | +\end{frame} |
| 183 | + |
| 184 | +\begin{frame}[label=foo] |
| 185 | + \frametitle{Automated Testing} |
| 186 | + \only<1>{ |
| 187 | + {\large \textbf{Golden Tests}} \\[20pt] |
| 188 | + \lstinputlisting[language=bash]{snippets/golden.sh} |
| 189 | + } |
| 190 | + \only<2-4>{ |
| 191 | + {\large \textbf{Weekly Image Build}} \\[20pt] |
| 192 | + } |
| 193 | + \only<3>{ |
| 194 | + \includegraphics[scale=.1]{build-weekly-2} |
| 195 | + } |
| 196 | + \only<4>{ |
| 197 | + \includegraphics[scale=.1]{build-weekly-1} |
| 198 | + } |
| 199 | + \note[item]{Ensure that existing upstream sources still build correctly} |
| 200 | + |
| 201 | + %\item<1,2> |
| 202 | + %\note[item]{Check templated configuration against expected outputs in our CI} |
| 203 | + \only<5>{ |
| 204 | + {\large \textbf{Serverspec}} \\[20pt] |
| 205 | + \lstinputlisting[language=ruby]{snippets/serverspec.rb} |
| 206 | + } |
| 207 | + \only<6>{ |
| 208 | + {\large \textbf{Autoflash}} \\[20pt] |
| 209 | + } |
| 210 | + \only<7>{ |
| 211 | + {\large \textbf{Autoflash}} \\[20pt] |
| 212 | + \begin{block}{Configuration} |
| 213 | + \small |
| 214 | + Hardware: Raspberry Pi 4, Relay, USB Ethernet Adapter, AP Board \\ |
| 215 | + Software: FreeBSD 13, GitLab runner, magic wormhole, and expect |
| 216 | + \end{block} |
| 217 | + } |
| 218 | + \only<8>{ |
| 219 | + \includegraphics[scale=.05]{autoflash-1} |
| 220 | + } |
| 221 | + \only<9>{ |
| 222 | + \includegraphics[scale=.05]{autoflash-2} |
| 223 | + } |
| 224 | + \only<10>{ |
| 225 | + \includegraphics[scale=.05]{autoflash-3} |
| 226 | + } |
| 227 | +\end{frame} |
| 228 | + |
| 229 | +\begin{frame} |
| 230 | + \frametitle{Radio Testing} |
| 231 | + \begin{enumerate} |
| 232 | + \item iperf |
| 233 | + \item Dogfooding |
| 234 | + \item Surveying |
| 235 | + \note[item]{WiFi driver performance and stability is tested by contributors dogfooding the configuration throghout the year} |
| 236 | + \end{enumerate} |
| 237 | +\end{frame} |
| 238 | + |
| 239 | +\begin{frame} |
| 240 | + \frametitle{Impact} |
| 241 | + \begin{itemize} |
| 242 | + \item Stable platform for the conference |
| 243 | + \item Saves an entire day during show prep |
| 244 | + \item Autoflash decreased feedback loops from 20+min to 5 min per test |
| 245 | + \item 52 serverspec tests being checked on all images |
| 246 | + \item Enables expanding AP hardware to support more than 1 model with limited overhead |
| 247 | + \end{itemize} |
| 248 | + \note[item]{} |
| 249 | +\end{frame} |
| 250 | + |
| 251 | +\begin{frame} |
| 252 | + \frametitle{Errata @ 19x} |
| 253 | + \begin{itemize} |
| 254 | + \item WiFi radios remaining up if initial boot had no connectivity |
| 255 | + \item DHCP reservations mismatches and range overlap |
| 256 | + \item DNS ACL assumptions for Pasadena Convention Center |
| 257 | + \end{itemize} |
| 258 | + \note[item]{} |
| 259 | +\end{frame} |
| 260 | + |
| 261 | +\begin{frame} |
| 262 | + \frametitle{Future} |
| 263 | + \begin{itemize} |
| 264 | + \item Belkin RT3200: WiFi 6 |
| 265 | + \item DAWN: https://github.com/berlin-open-wireless-lab/DAWN |
| 266 | + \item Automated client WiFi testing in CI |
| 267 | + \item Advanced surveying process |
| 268 | + \end{itemize} |
| 269 | + \note[item]{DAWN works best with networks where AP and devices have 802.11k capabilities for discovering the quality of radio signals, plus 802.11v for requesting devices to move to a different AP.} |
| 270 | +\end{frame} |
| 271 | + |
| 272 | +\begin{frame} |
| 273 | +\frametitle{Repo} |
| 274 | + \begin{center} |
| 275 | + {\large \textbf{https://github.com/socallinuxexpo/scale-network}} |
| 276 | + \end{center} |
| 277 | + \note[item]{SCaLE techs single source of truth for all deployments} |
| 278 | +\end{frame} |
| 279 | + |
| 280 | +\begin{frame} |
| 281 | +\frametitle{This talk} |
| 282 | + \begin{center} |
| 283 | + {\large \textbf{https://github.com/sarcasticadmin/talks}} |
| 284 | + \end{center} |
| 285 | +\end{frame} |
| 286 | + |
| 287 | +\begin{frame} |
| 288 | +\frametitle{End} |
| 289 | + \begin{center} |
| 290 | + {\large \textbf{Thank you}} |
| 291 | + \end{center} |
| 292 | +\end{frame} |
| 293 | + |
| 294 | +\end{document} |
0 commit comments