Hello, and welcome to CS615 System Administration. That’s right - we’re dealing with a sysadmin here. But don’t panic - we’ll learn how to deal with those types in this class… My name is Jan Schaumann — I’m from the internet, and I'm here to help! As a recovering System Administrator come Information Security Infrastructure Architect, I moonlight as an adjunct professor at Stevens Institute of Technology, and so I get to tell you a bit about System Administration. This is the class CS615 "Aspects of System Administration", which in the Spring semester of 2021 will be 100% online for the first time since I created the course syllabus back in... 2005 or so. Since we are holding the class entirely online now, I've decided to flip the classroom, and rather than drone on for two and a half hours in a single long lecture, I'm preparing smaller bite-sized video lectures that I will post online here on this YouTube channel throughout the semester. But before we begin to talk about System Administration, we'll have to cover a few of the basics in this video: we'll look at the syllabus, discuss expectations and grading, and what resources you should bookmark to get the most out of this class. These videos are available publicly for anybody to subscribe and follow along, regardless of whether or not you are enrolled in the class, and I do hope that you will find them useful. Please do leave comments on YouTube or email me at the address shown here with any feedback you might have. But let's begin. Perhaps by asking How does System Administration fit into an academic curriculum? Isn't it just... "operations"? How is that Computer Science? --- Well, funny you should ask. It just so happens that I have a convenient Venn diagram handy to help you understand where we fit in. As so many things having to do with what I by and large like to refer to as "computering", there is at best an intersection with the academic field of "Computer Science". But then again, most of "programming" isn't really "Computer Science", either. As I'm sure you've come to realize by now, a degree in Computer Science does not a skilled programmer make. (And yes, it is true that nobody really knows how 'git' works; we all just periodically delete our tree and check out a fresh copy. But that's a different discussion to be had another day.) Ok, so the field of "operations", into which System Administration seems to fall -- or at least fit in better than into either of the other circles here -- isn't congruent with "programming" nor "computer science". Yet we do offer this class within the CS degree program... why is that? Perhaps it’s because it fits in here better than elsewhere; perhaps it’s because, hey, it’s got to do with computers, and yes, as we will see, you can approach it in a scientific way (even if that is not always obvious). We’ll get back to some of that in our next videos, but perhaps let’s take a quick step back and see how System Administration is traditionally learned. --- System Administration is a profession, and it obviously has to do -- to a rather significant part, anyway -- with computers. Well, I’ll later and throughout this semester try to convince you that it very much focuses on people, too, but either way, System Administration doesn't have any strict career path. To be honest, it doesn't even have a fixed job description, as we'll see in our next video segments: what is described as "System Administration" by some is "Site Reliability Engineering" to others; what is regarded as "DevOps" in one organization is called "full stack operations" or "agile sysadmin" in another. And learning this profession... well, - for starters, you can't go to SysAdmin college and get a degree. There are relatively few schools that offer a degree -- either a Bachelor or a Master's -- in System Administration. In fact, even offering a _class_ in system administration was not particularly common even a few years ago. Stevens didn't -- at least until I proposed this class, worked out the syllabus, and began to teach it. Then how did you become a System Administrator? - Most people in this field entered via a non-traditional career path, often relying heavily on coincidental and practical experience, yielding a field where no two professional backgrounds are the same. - The field of System Administration allows for an incredible opportunity to specialize in a number of areas, - but also requires a significant breadth of experience and background knowledge, each - depending on the particulars of the specific job. It is this combination of breadth and depth of knowledge that make this field so interesting, challenging, and hard to define. --- From a teaching perspective, we can see how System Administration might fit into the CS curriculum: As a sysadmin, you will need to have a background and solid understanding of: - operating system concepts - TCP/IP networking - programming concepts as well as practical experience in a number of languages - cloud computing - and any number of other topics. As you can tell, all of these areas are part of your CS curriculum, and hopefully you already have taken some classes covering these subjects. But the profession also requires some specific knowledge. This area of expertise is less universal, and you may specialize based on your own interests or experiences. For example, you might become the subject matter expert for - a specific operating system or even a single variant of a specific operating system family; - or you might specialize in the operation and tuning of a specific service, such as the DNS, SMTP, databases etc. Each of these sound like simple services to set up and run, but as you are trying to scale them up, you will require increasingly specific domain knowledge, which of course builds upon the broad subjects on the left. - you might even specialize in the single product of a single software provider or vendor; - or you might instead specialize in a broader area of expertise - As you can tell, there really are no limits to where this career path may take you. Which... makes teaching System Administration rather challenging -- there is no fixed syllabus, no standards body, no common body of knowledge, yet there's so much ground to cover... --- So here's how _I_ will try to approach this vast subject of System Administration. As you've seen, the subjects I mentioned could easily each fill a semester on their own, and in some cases could even be covered in a separate degree or certificate program, but all I have is approximately 14 weeks... So what we'll do is scratch the surface on just a few things. I'll try not to teach you everything there is to know about all the topics, but rather just enough about some of the most important topics to pique your curiosity, to get you started with some of the basics, to give you a foundation from which to deepen your knowledge. This, by the way, is why the course was originally called "Aspects of System Administration": I can't possibly teach you all of System Administration, only some of its aspects. But that's a bit awkward to say, so "cs615asa" is generally referred to simply as "System Administration". Anyway, so what are we going to cover? - In our first week, we'll discuss the general field of System Administration; the profession, the practice, and what it means to be a system administrator or an SRE. We'll spend one of our next video segments on this introduction to the field. While System Administration is a practice independent of any specific operating system, we are going to frequently focus on and use Unix systems, so we will also briefly cover the Unix history and some basics. For most of you, this is hopefully just a quick refresher. - Next, we'll talk about storage models, devices and -technologies, and - in Week 3, then, we'll discuss filesystem basics before we cover the distinction between different types of software. - Once we have covered that, we talk about OS- and software installation, package management, and a few multi-user basics. - - Weeks 5 and 6 will cover TCP/IP networking in some detail, with practical examples and tools illustrating implementation of abstract concepts across all layers of the networking stack. - From there, we can then talk about some of the most critical services: the domain name system, the HTTP protocol, - securing traffic using TLS, and the Simple Mail Transfer Protocol (aka email). - We'll spend some time discussing software development in a system administration context, - talk about monitoring, backup, and disaster recovery, - as well as the broad, complex, and very sysadmin centric topic of configuration management. - After that, we'll move on to topics that you should by then have observed as permeating all previous lectures in some shape or form: system security as well as - ethical responsibility in the field of system administration. - Finally, we'll wrap up the semester with a "Capture the Flag" challenge that will hopefully help us review all the material we covered. As you can tell, we have a full semester ahead of ourselves! --- Now one of the things that I hope will take place in this class is... actual learning. Learning is a critical and _ongoing_ component of a System Administrator's career, and when you're in school, one of the most important things you can learn is _how to learn_. That is, besides learning _about_ system administration, we will also practice a few of the best ways to learn more generically. That is, we will -- necessarily -- practice - how to ask questions such that you get the answers you are seeking - where to ask questions - to read critically, and not just follow the first Google result to the StackOverflow top answer and then copy and paste what we find there; We'll discuss how to find online materials, studies, articles, and research, and how to help determine whether they are current, accurate, and of what quality or relevance, as unfortunately you will frequently find that you have to sift through a lot of useless information to get to what you are looking for. - One of the more important things to learn in general is to understand what it is that you know and what it is that you _don't_ know. There is an interesting cognitive phenomenon known as the "Dunning-Kruger effect", which describes how the more you know, the less certain you become, the more it feels like you know nothing, while it's really easy to think that you know a whole lot about a given topic if you only know a little bit... --- So consider that -- and I know this will quickly sound a bit confusing -- there are things that we know, and things that we don't know. We usually are aware that there are some things we don't know - represented here as the intersection, labeled as "B". Now the interesting thing is that the ratio of what we know versus what we don't know can influence how much of an expert we consider ourselves in a counter-intuitive way. --- So suppose you're a novice. Say, you're a CS major sophomore. You've learned a little bit about programming, and you may even have implemented Huffman compression in Java. So you think to yourself: "Hey, I really learned a lot! Look at all the things I know! And sure, there are probably a few things left that I don't know yet, but by and large, I'm probably an expert coder now. Let me put that down on my resume." This is because the ratio of what you know versus what _we know we don't know_ is large. --- On the other hand, the more you study and learn, the more you realize that there are all these other things you don't know! And yes, you pick up many more things, but for everything you learn, you also learn that there is so much more to learn about the given subject, so many ways to branch out or dig deeper. So your ratio of what you know -- although that is now notably larger than what you previously knew -- to what you are aware that you don't know, what you _could_ know, _decreases_. As a result, you feel less sure of yourself, and if asked to say, rate yourself in proficiency in a programming language, you might say that you're "ok", or have medium proficiency even though you have ten years of experience under your belt. So that's the Dunning-Kruger cognitive bias in a nutshell, and it's something that it's important to recognize in yourself. I find this sort of thing fascinating, and I do recommend that you perhaps read up on this and similar biases, and I hope that this class will help push you closer to both increasing what you know as well as what you know you don't know without making you feel like an imposter in the process. --- Anyway, after talking about knowing what we know and don't know, let's get back to learning to learn... The next important skill we'll practice is to - understand what you're doing. This may seem obvious, but all too often when we're computering our hearts out and just want to fix the damn build or get the code to compile, we end up trying out things we found on the internet without actually understanding what the commands or the code shown there actually does. Instead, we want to make sure that we not only understand what we're doing, but also - why we're doing it, why the system suddenly started working again, or why the change we made did fix the printer. Just kidding, nobody knows how to fix printers, they have a life of their own and we periodically make blood sacrifices to the printer gods. But other than for printers, we do like to understand what we're doing and why things work the way they do. And finally... - we'll seek out ways to exchange information with our peers, with other communities on the internet and with one another, as a critical part of our learning process. We'll see in a minute how we will try to emphasize this particular aspect in this class. --- Now this is a graduate level university class, so I'm afraid that at some point I'll have to give you a grade. Now given how varied the field of System Administration is, it's not easy to come up with assignments that appropriately measure what you might learn here, but Stevens really wants me to enter a grade for you at the end of the semester, so here's what I came up with: - Even though I'm providing the bulk of the materials in these video lectures for you to consume on your own schedule, I want to make sure that we have an appropriate level of interactive engagement. So to this end, we'll factor class participation into the grade. This will include weekly questionnaires -- a few very short questions about the topic at hand to prime your mental cache and get you to start thinking. These questionnaires are not graded themselves -- that is, there are no right and wrong answers -- but you do have to fill them out. A second part of the participation will be your course notes -- more on that in a minute -- and your contributions in our synchronous discussions, on the class mailing list, or on the class Slack. Secondly, and this is where we're going back to the need to seek information exchange in our efforts to learn, - there will be a requirement to attend -- albeit virtually -- a community meetup. For this, you will look for an online event somehow relevant to this class. This can be a conference, a tech talk, a virtual presentation, ... anything that engages the tech community you're interested in. Now in the past, this has involved actually attending a meetup in a physical space, but for obvious reasons we're making this requirement a virtual one this year. Still, you should be able to find an event that interests you, attend, and then provide a summary to the rest of the class. - We'll also have a small number of practical assignments, involving different exercises that may include some level of coding as well as - a class project, whereby we will work on developing a software project together. In this, your grade will depend on your contributions ranging from project management, design and architecture, documentation, to code. Don't worry, I'll provide more details on these assignments in a separate video segment. - Finally, we'll also exercise a lot of what we will have learned by the end of a semester via a Capture the Flag contest. This has been a lot of fun in the past, and I'm sure you will enjoy the experience. --- Next, let's talk about which systems we'll be using in this class. Since we will often need to be able to run commands as root -- to install software, or to create a file system, for example -- and since we need to be able to access different operating systems, we'll be making use of - Amazon's Elastic Compute Cloud or EC2 service in AWS. This will give you the experience of using a public cloud service while at the same time letting you mess up an instance and not lose your personal work or data. Please make sure to sign up for Amazon's EC2 service; as a student at Stevens, you should be entitled to the educational credits via Amazon's "AWS Educate" program, but don't worry: the resources we'll use will not be expensive so long as you remember to shut down your instances after you've completed the exercises. In addition to these systems, we'll also make use of - the Stevens shared Linux systems, commonly referred to as 'linux-lab'. You should already have an account on these systems -- check the course website for a link with instructions if you do not have this set up yet. - Finally, you may also make use of a virtual machine running locally on your system, such as via VirtualBox. The recommended reference platform here is NetBSD, and you can find instructions on how to install NetBSD in VirtualBox at this link from my other class, CS631 Advanced Programming in the UNIX Environment. You should note that all of the systems we'll use here are Unix systems, and that all access will always be exclusively via the command-line. Please do consider this: this class is _not_ meant to be an introduction to using Unix, and you are assumed to be very comfortable using Unix via the command-line. --- As mentioned, your course participation will in part be evaluated based on the course notes you take. This is something that I've found to be useful to help students come to class prepared, to help guide them through the semester and to reflect on what you've learned. Here's how we will do this: - create a git repository with a single text file for each lecture; then - before each lecture: answer that week's questionnaire (the link for which you'll find on the course website) Make a note of what you've read, what exercises you completed, and what questions you have. - after each lecture: review the questionnaire and your answers to see if you have gained a better understanding Make a note of anything of interest you learned, and jot down any new questions that came to mind or anything that was left unclear. - follow up on unanswered questions in class or on the mailing list to ensure you complete your understanding. This will factor into your course participation, obviously, though do of course note that this is not graded as a factor of answering questions correctly. The goal of all this is for you to have a way to review your progress throughout the semester. Something that might not have made much sense in the second or third week may become clearer towards the end of the semester. - At the end of the semester, I will review the notes to gauge your progress myself; the more detailed your notes are, the easier it will be for me to give you credit here, even though the biggest benefit to you will hopefully be the preparation and follow-up done in this manner. --- Furthermore, in order to encourage more discussions and to stress how actively evolving the profession is, we'll use the time we have in our synchronous Zoom class to have two students each present one interesting article or a paper or anything else they came across relating to the topic at hand. For this, you'd - share a link by Friday afternoon, to give your classmates -- and myself, of course -- time to read the document - then summarize the information in class, providing a short, say... 5 minute presentation of the topic - and hopefully we'll end up with a few discussions and follow-up questions. This way, our classes will hopefully not be quite so boring. --- Now one more important note about completing the assignments in this class: You are responsible for completing them on your own. I will post them to the course website and class mailing list, but it is your responsibility to note the due date and submit your code on time. I understand that especially at this time many people have different obligations and anything may come up that may derail your plans. If that happens, please come to me right away -- I'm ok with granting an extension if circumstances require it, but I cannot grant extensions simply for poor time management or planning. The assignments are given with sufficient time to complete them, but in my experience students often start much too late. You will not be able to complete the assignments in a rushed manner in the last minute or even within the last 24 hours before they are due. Please do not delay starting to work on the assignments, as often times unexpected problems arise and clarifications are necessary -- the sooner you discover these issues, the better for you! Give then current circumstances and trying to adopt the new online-only syllabus, I'm also changing another important part of this class: while there will not be any make-up assignments or extra-credit work, I will allow you to resubmit your individual assignments after you have received your grade to correct any major problems. This option will be available if the work you submitted did not receive an A. In that case, you may take my comments and resubmit your improved code a week later to attempt to bump up your grade. Finally, I'm sad to have to explicitly point out that you are responsible for all your work yourself. Every semester I have at least one student who will hand in code or content that they did not write themselves -- this constitutes plagiarism and possibly copyright violations and _will_ yield a failing grade. If you run into problems, if you have questions about how to best do something, please reach out on our class mailing list, where I encourage all of you to share code segments, assignment solutions, and to discuss the best approach to any given issue. --- Ok, finally, here are the primary course resources that you should have bookmarked. The most important link is the course website, shown here. This website is linked to from the Stevens Canvas shell and remains authoritative for all information about the class. There is no other information in the Stevens Canvas shell, so please do make sure to refer to the course website for all materials. The second most important part is the course mailing list, which will be our primary means of communication. I have subscribed all students who are currently enrolled in the class; if you are not subscribed, please do subscribe yourself, using your stevens.edu email address. (I'm afraid I cannot allow subscriptions from non-Stevens addresses.) The mailing list is a discussion list, not an announcements-only list: I will send announcements there, but I expect you to participate in discussions on the list. If you have a question or seek clarification about anything, please send a mail to the mailing list. If you send it to me in private, chances are that I will reply saying "please send your question to the class mailing list", so save yourself that roundtrip. The only time you should email me off-list is if you are referring to your grades or any other personal circumstances; any generic questions should go to the list. The reason for this is that it is quite likely that if _you_ have a question, that the other students would also benefit from the answer or clarification. Please don't be shy! In addition, I want you to practice and improve being able to communicate clearly in an asynchronous manner, as this is something that in the world of System Administration is paramount. To this end, please also do not rely on me to respond to any questions you see on the class mailing list: if you know the answer, or you think you do, please reply on the mailing list. If you come across an interesting link relevant to the class in general or a specific topic in particular, please share it! I'm looking for actual interactions on the list. I've also set up a Slack channel for this class, and have invited all registered students to join. If you have not received an invite, please email me and I will add you. The Slack channel is intended to let us discuss anything semi-synchronously. You may share links, post questions, or engage in discussions of the assignments and even your proposed solutions. However, while the mailing list is mandatory reading, the Slack channel is optional for you to join. That is, any announcements of importance are sent to the mailing list, but I hope that we can enjoy chatting on Slack as time permits. I myself will peek in on the Slack channel every so often, but you shouldn't expect an immediate response from me. Finally, here is also a link to the recommended coursebook from which I will assign reading on the different topics we discuss. This book is available online for free in PDF format. --- Ok, phew, we're coming to the end of the first segment of week 1. That was a lot of administrative overhead. Don't worry, the next video segments will be a lot more entertaining. I hope, anyway. But let's quickly recap what homework you have in order to get the most our of this class. This is, in effect, the prep work you should do for the course notes every week, and is something that I'd expect any good students to already be in the habit of: Before every lecture: review the previous week's slides and notes submit class questionnaire watch the video lectures and slides for that class follow up with questions on the course mailing list prepare for class by reading the recommended materials Note that the course website has a number of recommended exercises that are not graded assignments. That is, I put together a few problems or tasks that I believe will help you better understand the topic for the given week, and I very much recommend that you use them as a self-guided study tool. The more time you spend on this, the more you will get out of this class. You will also note that my lecture slides include a lot of command-line examples. Even in the video lecture, these may fly by quickly, so I recommend that after you have viewed the lecture you take some time to run the commands and examples we used. This will help you understand what we're trying to do or may lead you to discover additional questions. --- Now for this week specifically, your homework is basically to get fully set up for this class, to bookmark all the resources, to initialize your course notes, and to ensure that you have access to all the systems we'll be using. This includes the linux-lab access as well as setting yourself up for AWS. If you run into problems, please send a mail to the mailing list and / or ask on Slack! I will post separate videos with details regarding the individual, graded homework assignments. --- Alright - this concludes our first video segment for week 1 of the Spring 2021 semester of CS615 System Administration! IX Environment! I hope you were able to pay attention and find that this video introduction helpful. The slides accompanying this video are of course available from the course website as well. Now keep your eyes open for the coming video segments. We'll cover: - our homework assignments - how to set up git on linux-lab -- yes, it's true: you can use git without using GitHub! - I'll provide a video with a bit of information about the history of the Unix operating systems, and finally - we'll talk about what exactly a system administrator does. Yes, it's true, it often boils down to "duct tape and WD40" and may involve cable ties and a fair bit of cursing, but there's also a bit more to it. So make sure to tune in next time. Until then - thanks for watching. Cheers!