Add files via upload

This commit is contained in:
2026-09-24 09:52:57 -04:00
committed by GitHub
commit 95c614fb95
18 changed files with 3718 additions and 0 deletions
+2365
View File
File diff suppressed because it is too large Load Diff
+5
View File
@@ -0,0 +1,5 @@
This assignment guides students through a reproducible DevOps activity. It
defines the learning objectives, environment boundary, workflow, evidence,
reflection, and submission criteria. Replace bracketed text with assignment-
specific facts before release. Students should be able to recreate the work
from the submitted automation and runbook rather than from undocumented manual steps.
+367
View File
@@ -0,0 +1,367 @@
%%
%% This is file `cornell.cls',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% cornell.dtx (with options: `class')
%%
%% IMPORTANT NOTICE:
%%
%% For the copyright see the source file.
%%
%% Any modified versions of this file must be renamed
%% with new filenames distinct from cornell.cls.
%%
%% For distribution of the original source see the terms
%% for copying and modification in the file cornell.dtx.
%%
%% This generated file may be distributed as long as the
%% original source files, as listed above, are part of the
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% Document class `cornell' to use with LaTeX 2e.
%% Based on `crnlphd' class. The following is from the file `crnlphd.dtx':
%% Based loosely on old cuphdthesis style file.
%% Found to give good results, according to the thesis secretary.
%% File: crnlphd.dtx Copyright (C) 1994 Sergio Gelato
%% Made available without any warranty, express or implied.
%% Modifications
%% 03/26/98 Mike Heisler
%% Conform to Eric's final version. Margins are subject to
%% The whim of the printer.
%% 10/10/97 Mike Heisler and Eric Dahl
%% Altered footnotesize and changed the Acknowledgement and
%% Biographical titles per thesis secretary guideline that
%% they must match the rest of the document, i.e. flush left
%% and capitalized rather than all caps
%% 05/21/97 Mike Heisler
%% Added a 'papers' option to handle bibliographis as sections
%% at the end of each chapter. Reduced top margin.
%%
%% $Id$
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%% Digits \0\1\2\3\4\5\6\7\8\9
%% Exclamation \! Double quote \" Hash (number) \#
%% Dollar \$ Percent \% Ampersand \&
%% Acute accent \' Left paren \( Right paren \)
%% Asterisk \* Plus \+ Comma \,
%% Minus \- Point \. Solidus \/
%% Colon \: Semicolon \; Less than \<
%% Equals \= Greater than \> Question mark \?
%% Commercial at \@ Left bracket \[ Backslash \\
%% Right bracket \] Circumflex \^ Underscore \_
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{cornell}
[1998/03/26 v2.0
Cornell University thesis class]
\newif\ifphd
\DeclareOption{phd}{\phdtrue}
\DeclareOption{master}{\phdfalse}
\ExecuteOptions{phd}
\newif\ifpapers
\DeclareOption{papers}{\paperstrue}
\DeclareOption{10pt}{%
\OptionNotUsed%
\ClassWarningNoLine{cornell}{Font size 10pt not allowed; using 12pt}%
}
\DeclareOption{11pt}{%
\OptionNotUsed%
\ClassWarningNoLine{cornell}{Font size 11pt not allowed; using 12pt}%
}
\newcommand{\prelim@contents}[1]{}
\DeclareOption{tocprelim}{%
\renewcommand{\prelim@contents}[1]{\addcontentsline{toc}{section}{#1}}
}
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{report}%
}
\ProcessOptions
\LoadClass[12pt]{report}[1994/06/01]
\renewcommand{\defaultscriptratio}{.75}
\renewcommand{\defaultscriptscriptratio}{.6}
\setlength\headsep{25\p@}
\if@twocolumn
\else
\setlength\oddsidemargin{0in}
\setlength\evensidemargin{0in}
\setlength\textwidth{6.5in}
\setlength\topmargin{-0.5in}
\setlength\headheight{0.2in}
\setlength\headsep{0.35in}
\setlength\textheight{8.85in}
\setlength\footskip{0.5in}
\setlength\marginparwidth{0.85in}
\setlength\marginparsep{0.125in}
\fi
\if@compatibility
\setlength\topmargin{0\p@}
\else
\fi
\newcommand{\ps@cornell}{%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
\def\@oddfoot{}%
\def\@evenhead{\thepage\hfil{\slshape\leftmark}}%
\def\@evenfoot{}%
\def\chaptermark##1{}%
\def\sectionmark##1{}%
}
\newcommand{\ps@cornellc}{%
\def\@oddhead{\hfil\thepage\hfil}%
\def\@oddfoot{}%
\def\@evenhead{\@oddhead}%
\def\@evenfoot{}%
\def\chaptermark##1{}%
\def\sectionmark##1{}%
}
\raggedbottom
\newcommand{\@prolformat}[1]{{\begin{flushleft} \Huge #1 \end{flushleft}} }
\newcommand{\ackname}{\@prolformat{Acknowledgements}}
\newcommand{\bioname}{\@prolformat{Biographical Sketch}}
\renewcommand{\contentsname}{\@prolformat{Table of Contents}}
\renewcommand{\listtablename}{\@prolformat{List of Tables}}
\renewcommand{\listfigurename}{\@prolformat{List of Figures}}
\renewcommand{\l@figure}{\@dottedtocline{1}{1.5em}{2.6em}}
\let\l@table\l@figure
\renewenvironment{thebibliography}[1]
{\ifpapers \clearpage \section*{\bibname%
\@mkboth{\uppercase{\bibname}}{\uppercase{\bibname}}}%
\else%
\chapter*{\bibname%
\@mkboth{\uppercase{\bibname}}{\uppercase{\bibname}}}%
\fi%
\list{\@biblabel{\arabic{enumiv}}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\arabic{enumiv}}}%
\sloppy\clubpenalty4000\widowpenalty4000%
\sfcode`\.\@m\relax
\ifpapers%
\addcontentsline{toc}{section}{\bibname}%
\else%
\addcontentsline{toc}{chapter}{\bibname}%
\fi
\singlespacing}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\normalspacing
\endlist}
\newcommand{\@titlesize}{\Large}
\newcommand{\@subtitlesize}{\large}
\newcommand{\@authorsize}{\normalsize} % No Pharaoh he.
\newcommand{\@conferralmonth}{January}
\newcommand{\@conferralyear}{}
\newcommand{\titlesize}[1]{\renewcommand{\@titlesize}{#1}}
\newcommand{\subtitlesize}[1]{\renewcommand{\@subtitlesize}{#1}}
\newcommand{\authorsize}[1]{\renewcommand{\@authorsize}{#1}}
\newcommand{\conferraldate}[2]{%
\renewcommand{\@conferralmonth}{#1}
\renewcommand{\@conferralyear}{#2}
}
\newcommand{\@degreefield}{Master of Science} %CHANGED
\newcommand{\degreefield}[1]{\renewcommand{\@degreefield}{#1}} %CHANGED
\renewcommand{\maketitle}{%
\begin{titlepage}%
\vspace*{-0.24in}
\begin{center}%
\@titlesize \@title
\end{center}
\vfill
%\begin{center}
%\@subtitlesize
%A \ifphd Dissertation \else Thesis \fi \\ %CHANGED
%Presented to the Faculty of the Graduate School \\
%of Cornell University \\
%in Partial Fulfillment of the Requirements for the Degree of \\
%\ifphd Doctor of Philosophy \else \@degreefield \fi %CHANGED
%\end{center}
\vfill
\begin{center}
\@authorsize
by \\
\@author \\
\@conferralmonth\ \@conferralyear
\end{center}
\vspace*{0.26in}
\end{titlepage}
}
\renewenvironment{titlepage}{%
\typeout{Title page}
\pagestyle{empty}
\doublespacing
}{%
\normalspacing\clearpage
}
\newenvironment{copyrightpage}{%
\typeout{Copyleft page}
\pagestyle{empty}
\null\vfil
\begin{center}
}{%
\end{center}
\vfil\null
\clearpage
}
\newcommand{\makecopyright}{%
\begin{copyrightpage}
\copyright\ \@copyrightholder\ \@copyrightyear \\
ALL RIGHTS RESERVED \\[.5in]
\end{copyrightpage}
}
\newcommand{\@copyrightholder}{\@author}
\newcommand{\@copyrightyear}{\@conferralyear}
\newcommand{\copyrightholder}[1]{\renewcommand{\@copyrightholder}{#1}}
\newcommand{\copyrightyear}[1]{\renewcommand{\@copyrightyear}{#1}}
\newlength{\@abhdskip}
\renewenvironment{abstract}{%
\typeout{Abstract}
\singlespacing
\ifphd %CHANGED
\setlength{\@abhdskip}{.25in}
\addtolength{\@abhdskip}{-\topmargin}
\vspace*{\@abhdskip}
\begin{center}
\@abstracttitle \\
\ \\
\@author \\
\@conferralyear
\end{center}
\vspace{.25in}
\else %CHANGED
\chapter*{%
\begin{center}
\normalsize
ABSTRACT
\end{center}
}
\par
\fi %CHANGED
\pagestyle{empty}
\thispagestyle{empty}
}{%
\clearpage
}
\newcommand{\@abstracttitle}{\@title}
\newcommand{\abstracttitle}[1]{\renewcommand{\@abstracttitle}{#1}}
\newenvironment{biosketch}{%
\typeout{Vita}
\pagestyle{plain}
\pagenumbering{roman}
\setcounter{page}{3}
\prelim@contents{Biographical Sketch}
\chapter*{%
\bioname
}
\par
}{%
\clearpage
}
\newenvironment{dedication}{%
\prelim@contents{Dedication}
\null\vfil
\begin{center}
}{
\end{center}
\vfil\null
\clearpage
}
\newenvironment{acknowledgements}{%
\prelim@contents{Acknowledgments}
\chapter*{%
\ackname
}
\par
}{%
\cleardoublepage
}
\newcommand{\contentspage}{%
\singlespacing
\label{toc}
\prelim@contents{\contentsname}
\tableofcontents
\normalspacing
\clearpage
}
\newcommand{\tablelistpage}{%
\singlespacing
\label{lot}
\prelim@contents{\listtablename}
\listoftables
\normalspacing
\clearpage
}
\newcommand{\figurelistpage}{%
\singlespacing
\label{lof}
\prelim@contents{\listfigurename}
\listoffigures
\normalspacing
\clearpage
}
\newcommand{\abbrlist}{%
\singlespacing
\prelim@contents{List of Abbreviations}
\chapter*{List of Abbreviations}
}
\newcommand{\symlist}{%
\singlespacing
\prelim@contents{List of Symbols}
\chapter*{List of Symbols}
}
\newcommand{\preface}{%
\singlespacing
\prelim@contents{Preface}
\chapter*{Preface}
}
\newcommand{\singlespacing}{%
\let\CS=\@currsize\renewcommand{\baselinestretch}{1.0}\tiny\CS}
\newcommand{\singlespacingplus}{%
\let\CS=\@currsize\renewcommand{\baselinestretch}{1.25}\tiny\CS}
\newcommand{\doublespacing}{%
\let\CS=\@currsize\renewcommand{\baselinestretch}{1.75}\tiny\CS}
\newcommand{\realdoublespacing}{%
\let\CS=\@currsize\renewcommand{\baselinestretch}{2}\tiny\CS}
\newcommand{\normalspacing}{\doublespacing}
\newcommand{\footnotespacing}{\singlespacing}
\newcommand{\changespacing}[2]{%
\renewcommand{#1}{%
\let\CS=\@currsize\renewcommand{\baselinestretch}{#2}\tiny\CS}%
}
\newcommand{\changenormalspacing}[1]{\renewcommand{\normalspacing}{#1}}
\normalspacing
\endinput
%%
%% End of file `cornell.cls'.
+107
View File
@@ -0,0 +1,107 @@
\chapter{AI Agent Usage Guide}
\ChapterLabel{AIAgentGuide}
\index{AI agent}
\index{AI agent!DevOps workflow}
\index{Appendix!AI Agent Usage Guide}
\section{How to Use This Appendix}
An AI agent that creates, reviews, or maintains an assignment shall read this
file first. It shall identify the task in the routing table, read the minimum
authoritative sources, and expand context only for a discovered dependency or
inconsistency. This guide is maintained in LaTeX so it is visible, versioned,
and reviewable with the assignment.
\section{Governing Principles}
The authored LaTeX files, versioned automation, and approved assignment
materials are authoritative. The PDF is a review artifact and shall not be
edited directly. AI may draft, explain, analyze, check consistency, and assist
with builds. It shall not invent completion, evidence, access, costs, grades,
approvals, command output, security posture, or operational results.
\section{Chapter File Convention}
\index{AI agent!chapter file convention}
Every assignment chapter shall be stored in exactly one file named with the
\texttt{devops} prefix, a PascalCase chapter name, and the \texttt{.tex}
suffix. For example, Chapter~2 is fully contained in
\path{devopsExampleAssignment.tex}. A chapter file shall begin with its
\texttt{\string\chapter\{...\}} command and contain all of that chapter's
sections and subsections. Do not split one chapter across files, create
section-only \texttt{.tex} files, or use \texttt{\string\input} or
\texttt{\string\include} to assemble a chapter from smaller fragments.
Supporting non-chapter files may use a different name only when they are not
chapter content: \texttt{prologue.tex}, \texttt{abstract.tex},
\texttt{devopsGlossary.tex}, and \texttt{devopsReferences.bib} are examples.
Appendix chapters follow the same chapter-file convention.
\section{AI Quick Start}
\begin{enumerate}
\item Read this guide and identify the requested outcome.
\item Select the closest task below and load only its listed sources.
\item Inspect supplied facts and report consequential gaps or assumptions.
\item Make narrowly scoped changes; preserve stable IDs, glossary terms, and history.
\item Never request, print, store, or commit credentials, tokens, personal data, or production data.
\item Build the complete PDF, inspect the log, visually inspect affected pages, and record material AI use in \ChapterRef{AIPromptLog}.
\end{enumerate}
\section{Task Routing}
\small
\begin{tabularx}{\linewidth}{L{4.0cm}Y}
\caption{AI Task-Routing Table\label{Table:AITaskRouting}}\\
\toprule \textbf{Task} & \textbf{Minimum authoritative sources}\\ \midrule
Initialize an assignment & \texttt{devopsAssignment.tex}, \texttt{prologue.tex}, \texttt{devopsIntroduction.tex}, \texttt{devopsExampleAssignment.tex}, and the instructor's assignment facts.\\
Develop a workflow & \texttt{devopsExampleAssignment.tex}, source repository materials, and authorized environment constraints.\\
Define evidence & \texttt{devopsExampleAssignment.tex} and controlled execution outputs.\\
Review a retrospective & \texttt{devopsExampleAssignment.tex} and the submitted workflow or runbook.\\
Edit AI guidance & \texttt{devopsAIAgentGuide.tex}, \texttt{devopsAIPromptLog.tex}, \texttt{devopsDocumentGuide.tex}, and \texttt{devopsAssignment.tex}.\\
Compile or troubleshoot & \texttt{devopsAssignment.tex}, \texttt{devopsDocumentGuide.tex}, the affected chapter, and the build log.\\ \bottomrule
\end{tabularx}
\normalsize
\section{DevOps-Specific Rules}
\begin{enumerate}
\item Prefer versioned, repeatable automation over undocumented manual steps.
\item Treat deployment output, monitoring data, and screenshots as evidence only when they reflect an actual execution.
\item Design failure exercises to be isolated, reversible, and authorized.
\item Apply least privilege and never place secrets in LaTeX, source control, prompts, screenshots, or logs.
\item State expected cloud cost, cleanup action, and resource ownership for each remote-environment activity.
\item Identify whether a recommendation is a proposal, an instructor directive, or demonstrated evidence.
\end{enumerate}
\section{Example AI Requests}
\subsection{Create an Assignment Brief}
\begin{verbatim}
Read devopsAIAgentGuide.tex and use the Initialize an Assignment context.
From the supplied SSW 590 objective and constraints, fill only supported
placeholders in the introduction and activity brief. Propose clear, observable
completion criteria, a safe cleanup action, and a rubric. Do not invent cloud
access, due dates, policy, costs, or approved tools. Update history, compile,
and report instructor decisions still needed.
\end{verbatim}
\subsection{Review a Student Workflow}
\begin{verbatim}
Read devopsAIAgentGuide.tex and the workflow, evidence, and retrospective
chapters. Review the supplied repository and sanitized evidence for
reproducibility, least privilege, observability, rollback, and cleanup.
Separate verified facts from gaps and recommendations. Do not claim that an
unexecuted command passed, and do not request credentials or operate resources.
\end{verbatim}
\section{Human Decisions and Information Boundaries}
The instructor retains authority over assignment scope, grading, due dates,
approved tooling, access, budgets, security posture, exceptions, and policy.
An AI agent shall surface alternatives and evidence, not represent a decision
as approved. Record material prompts, assumptions, corrections, and unresolved
issues in \ChapterRef{AIPromptLog}.
\section{Completion Checklist}
\begin{itemize}
\item Scope, deliverables, environment, constraints, and cleanup are clear.
\item Activity identifiers and evidence references are valid and unique.
\item Examples contain no secrets, personal data, or unsafe production actions.
\item New controlled terms are added to the glossary and indexed.
\item The newest approved change is recorded in document history.
\item The complete build succeeds with no unresolved references or missing files.
\item A human reviews all decisions requiring instructional or operational authority.
\end{itemize}
+14
View File
@@ -0,0 +1,14 @@
\chapter{AI Prompt Log}
\ChapterLabel{AIPromptLog}
\index{AI prompt log}
\section{How to Use This Appendix}
Use this log when AI assistance materially affects assignment wording,
automation, evidence interpretation, troubleshooting, or feedback. Record
enough context for an instructor or reviewer to understand the input, output,
assumptions, and human corrections. Do not record credentials or personal data.
\section{Example Record}
Date: \textit{[timestamp]}; Tool and model: \textit{[name]}; Task:
\textit{[requested outcome]}; Inputs: \textit{[sanitized constraints and
evidence]}; Output used: \textit{[summary]}; Human review and corrections:
\textit{[summary]}; Unresolved assumptions: \textit{[list or none]}.
+132
View File
@@ -0,0 +1,132 @@
% SSW 590 DevOps Assignment Template
% Developed by Darian Muresan, Ph.D., with OpenAI Codex and Anthropic Claude Code.
% AI agents: read devopsAIAgentGuide.tex before editing this template.
\documentclass[12pt]{cornell}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{xspace}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{amsmath,amssymb}
\usepackage{array}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{tabularx}
\usepackage{ltablex}
\keepXColumns
\usepackage{enumitem}
\usepackage{listings}
\usepackage{tcolorbox}
\usepackage{makeidx}
\usepackage[colorlinks=true,citecolor=blue,linkcolor=blue,urlcolor=blue]{hyperref}
\usepackage[acronym,toc]{glossaries}
\makeindex
\makeglossaries
\input{devopsGlossary.tex}
\definecolor{devopsBlue}{RGB}{31,78,121}
\definecolor{devopsGreen}{RGB}{46,125,50}
\definecolor{devopsRed}{RGB}{183,28,28}
\definecolor{devopsGray}{RGB}{90,90,90}
\definecolor{devopsLightBlue}{RGB}{232,240,247}
% Replace these values for each assignment.
\newcommand{\AssignmentTitle}{Linux Commands}
\newcommand{\AssignmentNumber}{2}
\newcommand{\DocumentVersion}{1.4}
\newcommand{\DocumentStatus}{}
\newcommand{\CourseNumber}{SSW 590}
\newcommand{\CourseName}{DevOps}
\newcommand{\Instructor}{Maxwell Friedman, Alex Nemirovsky, Sofia Stoeckel, and Magdola Nagy}
\newcommand{\Organization}{Stevens Institute of Technology}
\newcommand{\DocumentDate}{September 16th, 2026}
\newcommand{\DueDate}{}
\newcommand{\VERSION}{Version \DocumentVersion}
\hypersetup{
pdftitle={\CourseNumber\ --- Assignment \AssignmentNumber: \AssignmentTitle},
pdfauthor={\Instructor},
pdfcreator={Darian Muresan, Ph.D., with OpenAI Codex and Anthropic Claude Code},
pdfsubject={Reusable DevOps course assignment template},
pdfkeywords={DevOps, automation, delivery pipeline, infrastructure as code, evidence}
}
\newcolumntype{Y}{>{\raggedright\arraybackslash}X}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\setlength{\tabcolsep}{4pt}
\renewcommand{\arraystretch}{1.12}
\setlength{\LTpre}{6pt}
\setlength{\LTpost}{6pt}
% Stable IDs make activity, evidence, and artifact references durable.
\newcommand{\ArtifactLabel}[2]{\phantomsection\label{#1:#2}}
\newcommand{\ArtifactID}[2]{\texttt{#2}\ArtifactLabel{#1}{#2}\index{#1!#2}}
\newcommand{\ArtifactRef}[2]{\hyperref[#1:#2]{\texttt{#2}}}
\newcommand{\ActivityID}[1]{\ArtifactID{Activity}{#1}}
\newcommand{\ActivityRef}[1]{\ArtifactRef{Activity}{#1}}
\newcommand{\EvidenceID}[1]{\ArtifactID{Evidence}{#1}}
\newcommand{\EvidenceRef}[1]{\ArtifactRef{Evidence}{#1}}
\newcommand{\ChapterLabel}[1]{\label{Chapter:#1}}
\newcommand{\ChapterRef}[1]{\hyperref[Chapter:#1]{Chapter~\ref*{Chapter:#1}}}
\newcommand{\StatusPass}{\textbf{\footnotesize\textcolor{devopsGreen}{PASS}}}
\newcommand{\StatusPending}{\textbf{\footnotesize\textcolor{devopsGray}{PENDING}}}
\newcommand{\StatusFail}{\textbf{\footnotesize\textcolor{devopsRed}{FAIL}}}
\newtcolorbox{devopsNote}[1][]{
colback=devopsLightBlue, colframe=devopsBlue, boxrule=0.6pt, arc=1mm, title=#1
}
\lstset{
backgroundcolor=\color{white}, basicstyle=\ttfamily\footnotesize,
breaklines=true, frame=single, keywordstyle=\color{blue},
commentstyle=\color{devopsGreen}, numbers=left, numbersep=6pt,
numberstyle=\tiny\color{devopsGray}, showstringspaces=false,
stringstyle=\color{devopsRed}, tabsize=2
}
\changenormalspacing{\singlespacing}
\begin{document}
\pagenumbering{roman}
\singlespacing
\include{prologue}
\include{devopsIntroduction}
\include{devopsExampleAssignment}
\include{linuxCommands}
\include{digitalOceanDocker}
\include{latexDocker}
\include{projectProposal}
\setcounter{page}{1}
\pagenumbering{arabic}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\lhead{\small Assignment \AssignmentNumber}
\chead{\small\nouppercase{\leftmark}}
\rhead{\small\thepage}
\lfoot{\small\CourseNumber}
\cfoot{\small\copyright\ \Organization}
\rfoot{\small\VERSION}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
\bibliographystyle{IEEEtran}
\bibliography{devopsReferences}
\appendix
\include{devopsDocumentGuide}
\include{devopsAIAgentGuide}
\include{devopsAIPromptLog}
\glsaddall
\printglossaries
\cleardoublepage
\phantomsection
\ChapterLabel{Index}
\addcontentsline{toc}{chapter}{Index}
\markboth{Index}{Index}
\printindex
\end{document}
+142
View File
@@ -0,0 +1,142 @@
\chapter{Document Authoring Guide}
\ChapterLabel{DocumentGuide}
\index{LaTeX}
\index{document conventions}
\index{Appendix!Document Authoring Guide}
\section{How to Use This Appendix}
Use this appendix to maintain the template's file conventions, build process,
and review rules. Update it when the document structure or toolchain changes.
\section{Template Provenance}
This template was developed by \textbf{Darian Muresan, Ph.D.}, in conjunction
with \textbf{OpenAI Codex} and \textbf{Anthropic Claude Code}. Keep this
attribution distinct from the assignment-specific instructor metadata.
\section{File Naming and Responsibilities}
Every chapter file shall use the \texttt{devops} prefix, a PascalCase chapter
name, and the \texttt{.tex} suffix. Each such file shall contain one complete
chapter, beginning with \texttt{\string\chapter\{...\}}, and all of its
sections and subsections. Do not split one chapter into section-level
\texttt{.tex} files. For example, all of Chapter~2 is contained in
\path{devopsExampleAssignment.tex}. Do not add requirements or
architecture-design chapters; this template records a DevOps learning activity
and its operational evidence.
\section{Synonyms and Controlled Terms}
\index{synonyms}
Use one preferred term for each important concept. If an assignment uses
equivalent terms, record them here before release. For example, state whether
``continuous delivery'' refers to \gls{cd} generally or specifically excludes
automatic production deployment. Add important terms to
\texttt{devopsGlossary.tex} and index them where used.
\section{Building the PDF}
The template requires a LaTeX distribution with \texttt{pdflatex},
\texttt{bibtex}, \texttt{makeglossaries}, and \texttt{makeindex}.
Install the tools using the platform instructions below, then run one of the
following platform builds.
\subsection{macOS and Linux Build}
\begin{verbatim}
make -f makefileMacLinux pdf
\end{verbatim}
\subsection{Windows PowerShell Build}
\begin{verbatim}
.\makefilePowerShell.ps1 -Action pdf
\end{verbatim}
The completed build regenerates references, bibliography, glossary, and index.
Review the log and visually inspect affected PDF pages. Do not edit generated
auxiliary files or the PDF directly.
\section{Install LaTeX Tools on macOS}
\index{macOS}
\index{MacTeX}
\subsection{Recommended Installation}
Install the current full \href{https://www.tug.org/mactex/}{MacTeX}
distribution. It includes TeX Live, \texttt{pdflatex}, \texttt{bibtex},
\texttt{latexmk}, \texttt{makeglossaries}, \texttt{makeindex}, and useful
applications such as TeXShop and TeX Live Utility. The full distribution is the
least troublesome choice for this template because it includes the packages
used by the glossary, table, listing, color, and hyperlink features.
Either download the signed installer from the MacTeX web site and complete the
macOS installation dialog, or, if Homebrew is already installed, run:
\begin{verbatim}
brew install --cask mactex
\end{verbatim}
Close and reopen Terminal after installation. If the TeX commands are not
found, add the MacTeX binary directory to the current shell session:
\begin{verbatim}
export PATH="/Library/TeX/texbin:$PATH"
\end{verbatim}
Do not place this command in a shell profile until it has been verified on the
local computer.
\subsection{Verification and Compilation}
From the template directory, verify the tools:
\begin{verbatim}
command -v pdflatex bibtex latexmk makeglossaries makeindex
\end{verbatim}
Each command should print a path. Then create the PDF:
\begin{verbatim}
make -f makefileMacLinux pdf
\end{verbatim}
To remove generated intermediate files while keeping the PDF, run:
\begin{verbatim}
make -f makefileMacLinux clean
\end{verbatim}
\section{Install LaTeX Tools on Windows}
\index{Windows}
\index{MiKTeX}
\subsection{Recommended Installation}
Install the current Basic MiKTeX distribution using the official
\href{https://miktex.org/howto/install-miktex}{MiKTeX Windows installation
guide}. During installation, choose a per-user installation when appropriate
and set missing-package installation to \emph{Ask me first} or \emph{Yes}.
The latter is convenient for a student machine with Internet access; the former
makes each package installation explicit.
Open MiKTeX Console after installation, apply available updates, and install
the \texttt{latexmk} package if the verification command below cannot find it.
On an organization-managed computer, obtain approval before installing software
or changing execution policy.
\subsection{Verification and Compilation}
Open a new PowerShell window in the template directory and verify:
\begin{verbatim}
Get-Command pdflatex,bibtex,latexmk,makeglossaries,makeindex
\end{verbatim}
Each command should display a command record. Build the PDF with:
\begin{verbatim}
.\makefilePowerShell.ps1 -Action pdf
\end{verbatim}
If PowerShell blocks the script under a managed execution policy, ask the
system administrator for the approved procedure. Do not bypass institutional
security policy. To remove intermediate build files, run:
\begin{verbatim}
.\makefilePowerShell.ps1 -Action clean
\end{verbatim}
\section{Common Build Problems}
\begin{tabularx}{\linewidth}{L{3.0cm}Y}
\toprule \textbf{Symptom} & \textbf{Resolution}\\ \midrule
Command not found & Close and reopen the terminal. On macOS, verify the TeX
binary path; on Windows, verify MiKTeX completed installation and is on the user PATH.\\
Missing LaTeX package & Use MiKTeX Console or its approved on-the-fly package
installation prompt on Windows. On macOS, install the full MacTeX distribution
or use TeX Live Utility to add the missing package.\\
References or glossary incomplete & Run the supplied platform build instead of
a single \texttt{pdflatex} command; it runs BibTeX, the glossary tool, and the
index tool in the required order.\\
Script is blocked & Follow the institution's approved PowerShell policy or run
the documented build commands with an approved administrator.\\ \bottomrule
\end{tabularx}
\section{Authoring and Review Rules}
Replace bracketed placeholders with assignment facts. Keep operational examples
safe, bounded, and free of credentials. Link activities to evidence, retain
history, and state unknowns or instructor decisions explicitly. Rebuild after
structural, cross-reference, table, glossary, or index changes.
+22
View File
@@ -0,0 +1,22 @@
\chapter*{Document History}
\addcontentsline{toc}{chapter}{Document History}
\index{document history}
\section*{How to Use This Chapter}
Add the newest approved change at the top. Retain every approved entry and
link each entry to the changed chapter, table, figure, or controlled artifact.
\begin{tabularx}{\linewidth}{L{3.1cm}L{2.2cm}YL{2.0cm}}
\caption{Document Update History\label{Table:DocumentHistory}}\\
\toprule \textbf{Date / Version} & \textbf{Author Initials} & \textbf{Change} & \textbf{Changed At}\\ \midrule
\endfirsthead
\multicolumn{4}{l}{\small\itshape Document Update History (continued)}\\
\toprule \textbf{Date / Version} & \textbf{Author Initials} & \textbf{Change} & \textbf{Changed At}\\ \midrule
\endhead \bottomrule \endlastfoot
September 24, 2026 / 1.5 & MF, AN, SS, MN & Created the Digital Ocean Docker Deployment, LaTeX, and Project Proposal chapters. & \ChapterRef{DigitalOceanDocker}, \ChapterRef{LatexDocker}, \ChapterRef{ProjectProposal}\\
September 16, 2026 / 1.4 & MF, AN, SS, MN & Created the Linux Commands chapter at \texttt{linuxCommands.tex}. & \ChapterRef{LinuxCommands}\\
September 2, 2026 / 1.3 & DDM, CDX & Established the one-file-per-chapter convention, added it to the AI Agent Usage Guide, and consolidated the complete example assignment chapter into \texttt{devopsExampleAssignment.tex}. & \ChapterRef{ExampleAssignment}, \ChapterRef{AIAgentGuide}, \ChapterRef{DocumentGuide}\\
September 2, 2026 / 1.2 & DDM, CDX & Added macOS MacTeX and Windows MiKTeX installation, verification, compilation, cleanup, and troubleshooting instructions to the Document Authoring Guide appendix. & \ChapterRef{DocumentGuide}\\
September 2, 2026 / 1.1 & DDM, CDX & Reorganized the example assignment as one chapter with activity, workflow, evidence, retrospective, and submission sections so each homework can follow the same chapter pattern. & \ChapterRef{ExampleAssignment}\\
September 2, 2026 / 1.0 & DDM, CDX & Created the reusable SSW 590 DevOps assignment template from the architecture template infrastructure; replaced requirements and design chapters with activity, workflow, evidence, retrospective, and submission chapters. & \ChapterRef{Introduction}, \ChapterRef{ExampleAssignment}, \ChapterRef{AIAgentGuide}\\
\textit{[date / version]} & \textit{[initials]} & \textit{[approved change and rationale]} & \textit{[link]}\\
\end{tabularx}
+126
View File
@@ -0,0 +1,126 @@
\chapter{Example Assignment}
\ChapterLabel{ExampleAssignment}
\index{activity brief}
\index{workflow}
\index{automation}
\index{infrastructure as code}
\index{evidence}
\index{observability}
\index{rollback}
\index{retrospective}
\index{continuous improvement}
\index{submission}
\index{cleanup}
\section{Activity Brief}
\subsection{Scenario}
Describe the operational scenario and why it matters. Use a bounded,
non-production system. \textit{Example: A team must deploy a small service
reliably to a remote Linux host and recover from a failed release.}
\subsection{Activities}
Assign stable IDs to each assessed activity. Add rows as needed.
\begin{tabularx}{\linewidth}{L{2.1cm}L{3.1cm}Y}
\caption{Activity Register\label{Table:ActivityRegister}}\\
\toprule \textbf{ID} & \textbf{Activity} & \textbf{Completion criterion}\\ \midrule
\ActivityID{ACT-01} & \textit{[Prepare environment]} & \textit{[repeatable environment baseline is present]}\\
\ActivityID{ACT-02} & \textit{[Automate workflow]} & \textit{[workflow runs from documented inputs]}\\
\ActivityID{ACT-03} & \textit{[Observe and recover]} & \textit{[evidence shows monitoring and recovery]}\\ \bottomrule
\end{tabularx}
\subsection{Success Criteria}
State observable outcomes, not implementation prescriptions. Include security,
cost, cleanup, and reproducibility criteria where applicable.
\subsection{Assessment Rubric}
\begin{tabularx}{\linewidth}{L{3.2cm}L{2.0cm}Y}
\toprule \textbf{Criterion} & \textbf{Weight} & \textbf{Evidence expected}\\ \midrule
Reproducible workflow & \textit{[points]} & \textit{[automation and clean-run proof]}\\
Operational quality & \textit{[points]} & \textit{[observability, rollback, security]}\\
Evidence and explanation & \textit{[points]} & \textit{[commands, outputs, rationale]}\\
Reflection & \textit{[points]} & \textit{[failure analysis and improvement]}\\ \bottomrule
\end{tabularx}
\section{Workflow and Implementation}
\subsection{Environment Baseline}
Specify the authorized environment, prerequisites, access model, versioned
inputs, and teardown procedure. Record commands in a repository script or
infrastructure-as-code definition; do not rely on a sequence of undocumented
console clicks.
\subsection{Procedure}
For each activity, state the goal, input, command or automation entry point,
expected result, and rollback or cleanup action. Link the corresponding
activity identifier and evidence identifier.
\begin{lstlisting}[language=bash,caption={Replace with a safe, repeatable workflow entry point.}]
# ./scripts/provision.sh --environment sandbox
# ./scripts/deploy.sh --version <tag>
# ./scripts/destroy.sh --environment sandbox
\end{lstlisting}
\subsection{Operational Controls}
Describe least-privilege access, secret handling, logging, monitoring, change
control, budget guardrails, backup or rollback, and resource cleanup. A secret
shall be referenced by its approved storage location, never pasted into this
document or committed to the repository.
\subsection{Failure Exercise}
Define one safe failure or degradation scenario. State the trigger, expected
signal, diagnosis path, recovery action, and evidence required. Never direct
students to disrupt shared or production infrastructure.
\section{Evidence Register}
\subsection{How to Use This Section}
Evidence demonstrates an actual execution; an expected result is not evidence.
Use sanitized command output, logs, screenshots, links to versioned files, or
recorded metrics. Redact secrets and personal information.
\begin{tabularx}{\linewidth}{L{1.7cm}L{2.2cm}L{2.6cm}Y}
\caption{Evidence Register\label{Table:EvidenceRegister}}\\
\toprule \textbf{ID} & \textbf{Activity} & \textbf{Evidence type} & \textbf{Location and interpretation}\\ \midrule
\EvidenceID{EVD-01} & \ActivityRef{ACT-01} & \textit{[log / script / image]} & \textit{[repository path or sanitized URL; what it demonstrates]}\\
\EvidenceID{EVD-02} & \ActivityRef{ACT-02} & \textit{[pipeline output]} & \textit{[location; result and relevant timestamp]}\\
\EvidenceID{EVD-03} & \ActivityRef{ACT-03} & \textit{[monitoring / recovery output]} & \textit{[location; failure signal and recovery result]}\\ \bottomrule
\end{tabularx}
\subsection{Evidence Quality Checks}
Evidence should identify the executed version, environment, time, command or
automation entry point, outcome, and any deviation from the expected result.
State failures plainly; they are valuable inputs to the retrospective.
\section{Retrospective}
\subsection{Outcome}
Summarize what happened, including completed work, gaps, and unexpected
behavior. Distinguish facts from interpretation.
\subsection{Flow and Feedback}
Identify queues, handoffs, manual steps, slow feedback, and sources of rework.
Explain which changes improved delivery flow or made failures visible sooner.
This emphasis on flow, feedback, and continual learning is consistent with the
DevOps framing introduced in \cite{PhoenixProject}.
\subsection{Improvement Experiments}
Propose one or more small, testable improvements. State the hypothesis, change,
measurement, expected result, and risk. Do not represent a proposal as an
approved production change.
\subsection{Team Contributions}
For team assignments, concisely identify each member's meaningful contribution
and any collaboration constraints.
\section{Submission and Cleanup}
\subsection{Submission Checklist}
\begin{itemize}
\item Versioned automation, configuration, and runbook are committed.
\item Evidence links resolve and contain no secrets or personal data.
\item The retrospective is complete and distinguishes results from proposals.
\item Remote resources have been destroyed or explicitly transferred as directed.
\item The repository identifies the final commit or release tag.
\end{itemize}
\subsection{Academic Integrity and Responsible Use}
Follow the course policy for collaboration and AI assistance. Cite external
code, tutorials, and AI-generated material as required by the instructor.
Students remain responsible for understanding, testing, and explaining all
submitted work.
+13
View File
@@ -0,0 +1,13 @@
\newacronym{ai}{AI}{artificial intelligence}
\newacronym{ci}{CI}{continuous integration}
\newacronym{cd}{CD}{continuous delivery or continuous deployment}
\newacronym{iac}{IaC}{infrastructure as code}
\newacronym{slo}{SLO}{service-level objective}
\newglossaryentry{automation}{name={automation},description={A repeatable, version-controlled procedure executed by software rather than undocumented manual steps}}
\newglossaryentry{deployment}{name={deployment},description={The controlled delivery of a versioned change to an environment}}
\newglossaryentry{evidence}{name={evidence},description={A retained record of an actual execution, observation, or review}}
\newglossaryentry{observability}{name={observability},description={The ability to infer system behavior from signals such as logs, metrics, traces, and health checks}}
\newglossaryentry{pipeline}{name={pipeline},description={An automated sequence that builds, tests, packages, and/or deploys a change}}
\newglossaryentry{rollback}{name={rollback},description={A controlled return to a known acceptable version or state after a failed or harmful change}}
\newglossaryentry{runbook}{name={runbook},description={A documented operational procedure for a repeatable task or incident response}}
\newglossaryentry{synonyms}{name={synonyms},description={Equivalent terms used in this assignment; record preferred terms to avoid ambiguity in instructions and evidence}}
+47
View File
@@ -0,0 +1,47 @@
\chapter{Introduction}
\ChapterLabel{Introduction}
\index{introduction}
\index{DevOps}
\section{How to Use This Assignment}
Replace bracketed text with approved assignment facts. Delete instructional
examples before release, but retain the stable identifiers, history, glossary,
index, appendices, and evidence structure. This document is an assignment
brief and operational record, not a requirements or software-design document.
\section{Purpose and Learning Objectives}
State the DevOps capability students will practice and the observable learning
outcomes. \textit{Example: Students will provision a minimal Linux service,
automate its deployment, collect operational evidence, and demonstrate a safe
rollback.}
\section{Scope and Constraints}
State the permitted cloud or local environment, team size, required tools,
budget limits, source-control repository, timebox, and prohibited actions.
Do not include credentials, access tokens, student records, or production data.
\section{Deliverables and Due Date}
\begin{tabularx}{\linewidth}{L{3.2cm}Y}
\toprule \textbf{Item} & \textbf{Expectation}\\ \midrule
Due date & \DueDate\\
Repository & \textit{[repository URL or LMS location]}\\
Required deliverables & \textit{[automation, runbook, evidence, reflection]}\\
Team policy & \textit{[individual or team; contribution expectations]}\\ \bottomrule
\end{tabularx}
\section{Using This Template with AI Agents}
\index{AI agent!DevOps workflow}
AI may assist with explanation, drafting, troubleshooting, and reviewing
automation. It does not replace student understanding or authorize an agent to
operate accounts, approve work, invent results, or receive secrets. Before
editing, an AI agent shall read \texttt{devopsAIAgentGuide.tex}, load only the
relevant assignment files, identify assumptions, and preserve evidence
boundaries. Record material AI assistance in \ChapterRef{AIPromptLog}.
\begin{verbatim}
Read devopsAIAgentGuide.tex first. For this SSW 590 assignment, identify the
requested task and read only the listed sources. Use supplied evidence only;
do not invent commands, deployment results, approvals, credentials, or costs.
Preserve stable IDs and history. Make the smallest appropriate change, build
the PDF, and report assumptions, risks, and actions requiring human approval.
\end{verbatim}
+6
View File
@@ -0,0 +1,6 @@
@book{PhoenixProject,
author = {Kim, Gene and Behr, Kevin and Spafford, George},
title = {The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win},
publisher = {IT Revolution Press},
year = {2018}
}
+3
View File
@@ -0,0 +1,3 @@
\chapter{Digital Ocean Docker Deployment}
\ChapterLabel{DigitalOceanDocker}
+3
View File
@@ -0,0 +1,3 @@
\chapter{LaTeX Docker}
\ChapterLabel{LatexDocker}
+338
View File
@@ -0,0 +1,338 @@
\chapter{Linux Commands}
\ChapterLabel{LinuxCommands}
\begin{figure}[htbp]
\centering
\includegraphics[width=1\textwidth]{terminal.png}
\caption{Linux terminal screenshot of the bash commands ran in Step 2.}
\label{fig:linux_terminal}
\end{figure}
\section{Navigation and File Ops}
1. paris@paris-Precision-3581:~/lx-test
\begin{figure}
\centering
\includegraphics[width=1\linewidth]{linux/image0.png}
\caption{All entries in ~/lx-test.}
\label{fig:img2}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=1\linewidth]{linux/image1.png}
\caption{Copying txt to tmp.}
\label{fig:img3}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image2.png}
\caption{old.txt moved into archive/.}
\label{fig:img4}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image3.png}
\caption{New empty file notes.md created.}
\label{fig:img5}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image4.png}
\caption{Disk usage for the src directory.}
\label{fig:img6}
\end{figure}
\newpage
\section{Viewing and Searching}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image6.png}
\caption{Line numbers printed in sys.log.}
\label{fig:img7}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image7.png}
\caption{sys.log lines filtered by ERROR.}
\label{fig:img8}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image8.png}
\caption{Distinctive words in words.txt counted.}
\label{fig:img9}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image9.png}
\caption{Lines starting with G in words.txt shown.}
\label{fig:img10}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image10.png}
\caption{First two lines of people.csv displayed.}
\label{fig:img11}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image11.png}
\caption{Last three lines of sys.log shown.}
\label{fig:img12}
\end{figure}
\newpage
\section{Text Processing}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image12.png}
\caption{Name column of people.csv printed.}
\label{fig:img13}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image13.png}
\caption{words.txt sorted case-insensitively without duplicates.}
\label{fig:img14}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image14.png}
\label{fig:img15}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/imaging.png}
\caption{"three" replaced with 3 in src.txt with backups.}
\label{fig:placeholder}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image15.png}
\caption{Lines, words, and bytes printed for every *.txt file in src.}
\label{fig:img16}
\end{figure}
\newpage
\section{Permissions and Ownership}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image16.png}
\caption{tmp/ made only read/write/searchable by the owner.}
\label{fig:img17}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image17.png}
\caption{src/lib given group execute permission recursively.}
\label{fig:img18}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image18.png}
\caption{Numeric permissions of src/file2.txt shown.}
\label{fig:img19}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image19.png}
\caption{notes.md made append-nly for the owner.}
\label{fig:img20}
\end{figure}
\newpage
\section{Links and Find}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image20.png}
\caption{link-to-file1's target path.}
\label{fig:img21}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image21.png}
\caption{All regular files over 40 KiB under the current tree.}
\label{fig:img22}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image22.png}
\caption{Files modified in the last 10 minutes under tmp/.}
\label{fig:img23}
\end{figure}
\newpage
\section{Processes and Job Control}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image23.png}
\label{fig:img24}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=1\linewidth]{linux/imagest.png}
\label{fig:placeholder}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=1\linewidth]{linux/imageringest.png}
\caption{Processes shown in tree view.}
\label{fig:placeholder}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image24.png}
\caption{sleep 120 started and its PID.}
\label{fig:img25}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image25.png}
\caption{TERM signal sent to all sleep processes.}
\label{fig:img26}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image26.png}
\caption{Top 5 processes by memory usage shown.}
\label{fig:img27}
\end{figure}
\newpage
\section{Archiving and Compression}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image27.png}
\caption{src.tgz created from src/.}
\label{fig:img28}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image28.png}
\caption{Contents of src.tgz listed.}
\label{fig:img29}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image29.png}
\caption{file2.txt extracted from src.tgz into tmp/.}
\label{fig:img30}
\end{figure}
\newpage
\section{Networking and System Info}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image30.png}
\caption{All listening TCP sockets with PIDs shown.}
\label{fig:img31}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image31.png}
\caption{Default route concisely printed.}
\label{fig:img32}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image32.png}
\caption{Kernel name, release, and machine architecture displayed.}
\label{fig:img33}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image33.png}
\caption{Last five successful logins shown.}
\label{fig:img34}
\end{figure}
\newpage
\section{Package and Services (Ubuntu)}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image34.png}
\caption{Installed version of the coreutils package shown.}
\label{fig:img35}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image35.png}
\caption{Available packages with names containing "ripgrep".}
\label{fig:img36}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image36.png}
\caption{Status line of cron service.}
\label{fig:img37}
\end{figure}
\newpage
\section{Bash and Scripting}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image37.png}
\caption{One-liner that loops over *.txt in src.}
\label{fig:img38}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image38.png}
\caption{Command that exports csv rows where dept == "CS" to cs.txt.}
\label{fig:img39}
\end{figure}
\begin{figure}[hbt!]
\centering
\includegraphics[width=1\linewidth]{linux/image39.png}
\caption{Variable X with value 42 created, printed, and deleted.}
\label{fig:img40}
\end{figure}
+3
View File
@@ -0,0 +1,3 @@
\chapter{Project Proposal}
\ChapterLabel{ProjectProposal}
+25
View File
@@ -0,0 +1,25 @@
\title{\CourseNumber\ --- \CourseName\\[0.5em]\large Assignment \AssignmentNumber: \AssignmentTitle\\[1.5em]\normalsize\VERSION\\\DocumentStatus}
\author{\Instructor\\\Organization}
\conferraldate{}{\DocumentDate}
\copyrightholder{\Organization}
\copyrightyear{2026}
\maketitle
\makecopyright
\cleardoublepage
\phantomsection
\chapter*{Template Attribution}
\ChapterLabel{TemplateAttribution}
\addcontentsline{toc}{chapter}{Template Attribution}
\markboth{Template Attribution}{Template Attribution}
\index{template attribution}
\index{Muresan, Darian}
This DevOps assignment template was developed by \textbf{Darian Muresan, Ph.D.},
in conjunction with \textbf{OpenAI Codex} and \textbf{Anthropic Claude Code}.
\clearpage
\begin{abstract}\input{abstract.tex}\end{abstract}
\input{devopsDocumentHistory.tex}
\contentspage
\tablelistpage
\figurelistpage
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB