Project Requirements

One key step to the process is to become familiar with the requirements of the project. These requirements can include things like having enough finances to fund the purchase of anything required to accomplish the project goals. If such requirements are unavailable, then changes will be necessary before the project will be completable.

Very often, a person might not know the requirements of a project when there is a decision that a specific project may be desirable. So, some research may be required to determine what is required.

The following guide is simply meant to be an overview of some common requirements that many projects may have.

Requirements
Basic computer familiarity

This guide assumes that the user is familiar with some basic computer terminology, such as “hardware” and “software”. This guide is designed for people who already have that level of knowledge.

This guide does NOT assume that people have an understanding of some professional computer networking terms, such as Ethernet and TCP/IP. Actually, some skills with subnetting are useful, but people who are not familiar with subnetting will be directed to a resource to learn that specific skill.

Computer(s)

This can be effectively done using a single computer, or multiple computers. There are multiple tasks to be performed. Thanks to the fact that computers can perform multiple tasks, a single computer or multiple computers can be used to accomplish the tasks described by this guide.

There are different ways to accomplish the tasks described by this guide. One method is to use a technology called “virtualization”. This recommended strategy involves having one machine “emulate” the functionality of a “virtual machine” inside a single program. Since computers can easily run multiple programs, a single computer can run multiple “virtual machines” at the same time. The process of acting like another computer is called “emulating”. Software designed to run a “virtual machine” is also known as an “emulator”.

By having one machine “emulate” the functionality of a “virtual machine”, one machine can act like multiple machines. In fact, the initial author of this guide was able to use this process to effectively learn many commercially viable skills of handling computer networks, all while using a single home computer. The current version of this guide does focus a bit on using this strategy of using “virtual machine” software. Adapting this guide to use multiple machines, or even to use a single machine without needing to use “virtual machine” software, ought to be relatively minimal changes.

Virtualization support

Some CPUs have an available feature to provide a superior experience when using “virtual machine” software. Some “virtual machine” software has actually been known to require that this feature is enabled (which, of course, requires that the CPU has the ability to support this feature). Some “virtual machine” software might not effectively use such a CPU feature.

There are some reasons why some people do not have a CPU enable the complex functionality of virtualization support:

  • Malicious software has been known to take advantage of such a feature
  • Some CPUs have not supported the feature (as a way to seperate the experiences between people who want advanced support from the CPU from the experiences for people who would care less, and as an excuse to charge more money from the people who may actually care)
  • Some computer vendors have been known to disable the feature by default, thinking that this reduction in complexity might result in simplifying the task of providing support to end users

In general, having the feature enabled is strongly recommended if the computer is going to be actively using “virtual machine” software. If there is a reasonably high possibility that this feature may be useful, then enabling the feature makes sense. Although there may be some potential security costs, there may also be some potential security benefits when “virtual machine” software is taking advantage of such a feature. Security concerns should generally be addressed using methods other than relying on this feature being disabled. (Proper network design is a far more critical method.)

Credit: Some of the perspectives described by this section came after reviewing tjrobinson's question, from ServerFault.com, about disabling hardware-assisted virtualization.

Have a good place to write data

It is nice, though not absolutely required, to be able to type notes, and to save those notes, on a computer that is not going to need to have the operating system be re-installed as part of this process.

[#fndskrqm]: Disk space for services and virtual machines

The precise amount of disk space may vary based on what software is going to be used.

The operating system is one piece of software to count on. Here are some recommendations for various operating systems:

OpenBSD

For OpenBSD, an amount more than 8GB can be good. For example, 16 GB. (True as of version 4.8, and presumably will remain true for some time.)

Microsoft Windows

Microsoft Windows Disk Requirements has some information, or handy references, for some versions of the Microsoft Windows operating systems.

What to do if the desired operating system isn't one of the ones that was just described?

One resource, which may be helpful in determining the amount of disk space to use, may be found in an old guide. (That guide was not part of this guide, and may not refer you back to this guide. So, remember to return to this guide after getting the details about the size of the computer's disks.) The information in that guide is Creating a “parent/base image”/“backing file”, “Determining a size” sub-section.

Another resource may be some documentation specific to operating systems. For example: for OpenBSD, OpenBSD disk sizes contained some details that was useful for determining some of the earlier recommendations. Information about some other operating systems may be available by exploring the section about full operating systems (or the more general section on operating systems). Some details might be provided in a tutorial that is specific to an operating system: operating system installation might have some useful references.

Before determining that all requirements are fulfilled, think about whether that is the case. This guide provided information about some details, but might have provided information about some detail that may be critically important for some project(s). Consider what the project's goals(hyperlink-should-be-added-here-soon) are, and what else may be required.