How to Install a Debian 10 (Buster) Minimal Server

This tutorial shows how to install a Debian 10 - Buster - minimal server in detail with many screenshots. The purpose of this guide is to provide a minimal setup that can be used as the basis for our other Debian 10 tutorials here at howtoforge.com.

1 Requirements

To install a Debian 10 server system you will need the following:

I will use the Debian 10.0 64Bit (amd64) installation media.

The Debian Download links change regularly. If the above links do not work anymore, then go here to fetch the latest Debian netinst image: https://www.debian.org/distrib/netinst or from https://cdimage.debian.org/mirror/cdimage/

2 Preliminary Note

In this tutorial, I will use the hostname server1.example.com with the IP address 192.168.0.100 and the gateway 192.168.0.1. These settings might differ for you, so you have to replace them where appropriate.

3 The Debian Base System

Insert your Debian 10 (Buster) network installation CD into your system (or a USB drive where you installed the iso file on) and boot from it. When you use virtualization software like VMware or Virtualbox, then select the Debian 10 minimal iso file as source file for the DVD drive of the VM, you don't have to burn it to a CD or DVD for that first.

Select Install (this will start the text installer - if you prefer a graphical installer, select Graphical install):

Debian 10 Boot Screen

Select your language:

Select Debian installation language

Then choose your location and select the keyboard layout. the next screens will differ depending on your choices. Just select which country and keyboard layout are the right ones for you as they define the language that your Debian system will use on the shell and which keyboard layout is used. In my case, I'll have a german keyboard layout but prefer English as the language on the shell.

Select Country, territory or area:

Select server location / country

Select your location, territory again and locale and keyboard:

Continent or region

select location

configure locale

select keymap

The installer checks the installation CD, your hardware and configures the network with DHCP if there is a DHCP server in the network:

Loading additional components

Configure network with DHCP

Enter hostname. In this example, my system is called server1.example.com, so I enter server1:

Enter the server hostname

Enter your domain name. In this example, this is example.com:

Enter the domain name of the Debian server

Afterward, give the root user a password:

Enter the root password

Confirm that password to avoid typos:

Confirm the root password

Create a Linux user account, e.g. your name or nickname. For this example installation, I will choose the name "administrator" with the user name administrator (don't use the user name admin as it is a reserved name on Debian Linux):

Enter realname of the user

Enter username

Set a password

Repeat the user password

Now you have to partition your hard disk. For simplicity's sake, I select Guided - use entire disk - this will create a large partition for the / file system and another one for swap (of course, the partitioning is totally up to you - if you know what you're doing, you can also set up your partitions manually). For hosting systems like the ISPConfig 3 perfect server tutorials you might want to choose e.g. 60GB for / and a large /var partition as all website and email data is stored in subdirectories of /var.

Partition method

Select the disk that you want to partition:

Select Disk partition

Then select the partitioning scheme. As mentioned before, I select All files in one partition (recommended for new users) for simplicity's sake - it's up to your likings what you choose here:

Partition scheme

When you're finished, select Finish partitioning and write changes to disk:

Finish partitioning

Select Yes when you're asked: "Write changes to disk?":

Write partitions to disk

Afterward, your new partitions are created and formatted. Now the partitions are created and the base system is installed:

Creating Partitions

Installing the base system

It might be that the following screens pop's up, depending on your install media. I will do a network-based installation (all additional installation packages get downloaded from the internet), so I choose here to not scan any additional install disks.

Scan installation media

Next, you must configure apt. Because we are using the Debian Netinstall CD, which contains only a minimal set of packages, we must use a network mirror. Select the country where the network mirror that you want to use is located (usually this is the country where your Server system is located):

Configure apt country

Then select the mirror you wish to use (e.g. deb.debian.org):

Select Debian mirror

Unless you use an HTTP proxy, leave the following field empty and hit Continue:

Configure apt proxy

Apt is now updating its packages database:

apt downloads packages

You can skip the package usage survey by selecting No:

skip package survey

We just select Standard system utilities and SSH server (so that I can immediately connect to the system with an SSH client such as PuTTY after the installation has finished) and hit Continue.

Some might argue that one should not install the Standard System Utilities on a minimal server but in my opinion, you will need most of the standard utilities later anyway so I will install them on this server as part of the base setup.

software selection

The required packages are downloaded and installed on the system:

Select and install software

When you're asked to Install the GRUB boot loader to the master boot record?, select Yes:

Install GRUB in MBR

The installer might ask you in which partition Grub shall be installed. This server has just one hard disk, so I choose /dev/sda here.

Select device for boot loader installation

Press enter and the Installer will install Grub and finishes the installation.

Installing GRUB boot loader and finishing the installation

The base system installation is now finished. Remove the Debian Netinstall CD from the CD drive and hit Continue to reboot the system:

Installation complete

The first boot of the newly installed Debian 10 server: first you will see the boot screen of the Grub Boot Loader, press enter or wait a few seconds, the boot process will continue automatically.

Booting Debian 10

A few seconds later the login prompt should show up.

Debian 10 (Buster) server first boot

Login with username "root" and the root password that you have chosen during installation. When you log in by SSH, then use the username "administrator" as the root user is disabled for remote logins. Then run the command "su":

su

To become root user.

On to the next step...

4 Install The SSH Server (Optional)

If you did not install the OpenSSH server during the system installation, you could do it now:

apt-get -y install ssh openssh-server

From now on you can use an SSH client such as PuTTY and connect from your workstation to your Debian Jessie server and follow the remaining steps from this tutorial.

5 Install a shell editor (Optional)

I'll use nano as my favorite shell text editor, others prefer vi that is not that easy to use for beginners. With the following command I will install both editors:

apt-get -y install vim-nox nano

(You don't have to do this if you use a different text editor such as joe or the built-in editor from mc).

6 Configure The Network

You can get your current IP address with the command:

ip a

By default, some network tools are not available. Install the package with:

apt-get install net-tools

Because the Debian 10 installer has configured our system to get its network settings via DHCP, we have to change that now because a server should have a static IP address. Edit /etc/network/interfaces and adjust it to your needs (in this example setup I will use the IP address 192.168.0.100) (please note that I replace allow-hotplug ens33 with auto ens33; otherwise restarting the network doesn't work, and we'd have to reboot the whole system):

nano /etc/network/interfaces

The interfaces file with DHCP enabled as created by the apt installer:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens33
iface ens33 inet dhcp
# This is an autoconfigured IPv6 interface
iface ens33 inet6 auto

And here the edited interfaces file with the static IP 192.168.0.100 configured.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens33 iface ens33 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1

# This is an autoconfigured IPv6 interface
iface ens33 inet6 auto

Then restart your network:

systemctl restart networking

Then edit /etc/hosts. Make it look like this:

nano /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Now edit the hostname in case you did not select the final hostname in the installer

nano /etc/hostname

The /etc/hostname file contains the hostname without the domain part, so in our case just "server1".

Then reboot the server to apply the hostname change:

systemctl reboot

After you logged in again, run:

hostname
hostname -f

To verify that the new hostname is set correctly. The output should be:

[email protected]:/home/administrator# hostname
server1
[email protected]:/home/administrator# hostname -f
server1.example.com
[email protected]:/home/administrator#

7 Update Your Debian Installation

First, make sure that your /etc/apt/sources.list contains the buster/updates repository (this makes sure you always get the newest updates), and that the contrib and non-free repositories are enabled.

nano /etc/apt/sources.list
deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free

deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

Run

apt-get update

to update the apt package database and

apt-get upgrade

to install the latest updates (if there are any).

8 Debian 10 VMWare server image

This tutorial is available as ready to use virtual machine image in ovf/ova format that is compatible with VMWare and Virtualbox. The virtual machine image uses the following login details:

SSH / Shell Login

Username: administrator
Password: howtoforge

Username: root
Password: howtoforge

The IP of the VM is 192.168.0.100, it can be changed in the file /etc/network/interfaces. Please change all the above passwords to secure the virtual machine.

Share this page:

Suggested articles

24 Comment(s)

Add comment

Comments

By: Mat at: 2019-06-28 17:29:32

Hi Till,

thanks for your great work here as well the very good tutorials.

I have never used a pre-final-release of an os (i test it at the moment with your perfect server debian 9 nginx guide, no issues until now - excepting some adjustments in how to install some little parts).

Does the now available RC2 get automatically updated to final release with regulare apt-get updates/upgrades via ssh ?Or is there anything additional to do?

Thanks & best regards,

Mat

By: till at: 2019-06-28 17:32:32

You can update the RC2 to the final release with the usual apt-get update && apt-get upgrade when the final is available.

By: till at: 2019-07-08 13:33:09

Please take a look here on how to switch a server based on Debian 10 RC to stable branch: https://www.faqforge.com/linux/switch-debian-10-rc-release-to-stable/

By: Siegfried Schnieders at: 2019-07-02 06:57:36

I think you installed ssh server with

[*] SSH server

in the software selection, so step 4 does nothing new.

By: till at: 2019-07-02 07:04:16

Please read the whole text from chapter 4 and not just the commands as it explains why the apt-get command is shown there: "If you did not install the OpenSSH server during the system installation, you could do it now". So in case you skipped installing SSL during initial software selection, then the command in chapter 4 shows you how to do it now.

By: 18TommyBoy at: 2019-07-10 09:07:10

Yes, but in tutorial forget the standard settings: can´t connect to root with Putty in Debian 9-10 (Connection refused)

By: till at: 2019-07-10 09:59:57

There is nothing missing. You connect with the user that you created during installation (you should know the name and password that you have chosen) and with the IP address of your server which you should know as well. And the settings that I have chosen are listed in chapter 8 and you can see them in the screenshots in the article as well.

By: Jehu at: 2019-07-17 19:12:31

Could you do a raid 6 install on disk over 3GB...Thanks!

By: rozana alam at: 2019-07-23 14:24:54

 love it!!

Thank you so much !!

By: Eric Flores at: 2019-08-02 20:45:03

This is a great article.  I followed step-by-step except for the VM.  It works as descbied.

 

Tks.

By: andreas at: 2019-08-02 21:59:57

thanks a lot for this perfect description and greets from vienna!

By: nada at: 2019-08-20 18:40:53

I find it useful to update/upgrade right after the base install before installing any packages.

You can also pre-cache all the updates by running apt upgrade --download-only and then run the upgrade itself...to avoid any potential interruptions...this is especially handy when doing the apt dist-upgrade

 

By: Victor Andrei at: 2019-09-12 12:12:17

Debian 10.1.0 has been released. You should update the link to the ISO file. It's now

https://cdimage.debian.org/mirror/cdimage/release/current/amd64/iso-cd/debian-10.1.0-amd64-netinst.iso

By: adamjedgar at: 2019-11-03 05:13:54

I am confused by the /etc/hosts file.

you have the line 192.168.0.100 server1.example.com server1

 

why is a local ip address being used in this tutorial here? Are we supposed to use this ip address or should this be the public ip address of the server?

Because these systems are going on the internet, why are tutorials telling us to use non public ip addresses? This does not make any sense...which should i use here?

By: till at: 2019-11-04 06:29:41

You use your server IP address there of course. This IP can be an Internal or external IP, so using an internal IP can make sense, it all depends on your server setup.

By: Carlos at: 2019-11-12 16:49:11

Hello Till, Thank you very much for your time making this tutorial.

Im looking for a cluster installation, could I use the Installing a Web, Email & MySQL Database Cluster on Debian 8.4 Jessie with ISPConfig 3.1 using this tutorial instead of the Debian 8(Jessie) Minimal server?

By: till at: 2019-11-12 16:57:17

Yes and no, the setup is very similar for all Debian versions, but package names may differ. So when using Debian 10 I recommend using the debian 8 cluster tutorial as a guide what and how to install and then use the Debian 10 perfect server guide to find the actual package names for the steps. I'm sorry that there is no debian 10 cluster tutorial, simply had no time to write it yet.

By: KOCT at: 2019-12-18 07:51:35

Where to download VMWare image

By: till at: 2019-12-18 07:53:29

The download link is below the big red download icon in the menu on the right page of the site, near the top.

By: GaryS at: 2020-01-01 01:28:19

Just a small suggestion."su -"  instead of "su" (can save grief for people later :)

 

By: davek at: 2020-05-06 06:51:52

What is the difference between Debian-10 and Debian-tiny ? I imagine there is a list of packages for both, but what is missing from Debian-10, and what are the missing packages doing ?  Can any Debian-10 be turned into Debian-tiny by a series of "sudo apt remove" commands ?

By: David at: 2020-05-08 14:48:40

I am following your tutorial but can't seem to get through it.  When I try to restart the networking, I get an error message.  I'll post it below. I think that the problem is that enol should be ens33, or am I wrong? If you have suggestions, I'd appreciate them and thanks for any help you have to offer.

[email protected]:/home/administrator# systemctl status networking.service? networking.service - Raise network interfaces   Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)   Active: failed (Result: exit-code) since Thu 2020-05-07 16:13:03 CDT; 34s ago     Docs: man:interfaces(5)  Process: 2232 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE) Main PID: 2232 (code=exited, status=1/FAILURE)May 07 16:13:03 db10server systemd[1]: Starting Raise network interfaces...May 07 16:13:03 db10server ifup[2232]: Cannot find device "ens33"May 07 16:13:03 db10server ifup[2232]: ifup: failed to bring up ens33May 07 16:13:03 db10server systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILMay 07 16:13:03 db10server systemd[1]: networking.service: Failed with result 'exit-code'.May 07 16:13:03 db10server systemd[1]: Failed to start Raise network interfaces.lines 1-13/13 (END)[email protected]:~$ ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000    link/ether 5c:26:0a:26:cb:0a brd ff:ff:ff:ff:ff:ff3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000    link/ether 00:24:d7:6c:3e:10 brd ff:ff:ff:ff:ff:ff    inet 192.168.0.6/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp2s0       valid_lft 82655sec preferred_lft 82655sec    inet6 fe80::224:d7ff:fe6c:3e10/64 scope link noprefixroute        valid_lft forever preferred_lft forever

By: David at: 2020-05-15 11:39:57

I am following your tutorial but can't seem to get through it.  When I try to restart the networking, I get an error message.  I'll post it below. I think that the problem is that enol should be ens33, or am I wrong? If you have suggestions, I'd appreciate them and thanks for any help you have to offer.

[email protected]:/home/administrator# systemctl status networking.service? networking.service - Raise network interfaces   Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)   Active: failed (Result: exit-code) since Thu 2020-05-07 16:13:03 CDT; 34s ago     Docs: man:interfaces(5)  Process: 2232 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE) Main PID: 2232 (code=exited, status=1/FAILURE)May 07 16:13:03 db10server systemd[1]: Starting Raise network interfaces...May 07 16:13:03 db10server ifup[2232]: Cannot find device "ens33"May 07 16:13:03 db10server ifup[2232]: ifup: failed to bring up ens33May 07 16:13:03 db10server systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILMay 07 16:13:03 db10server systemd[1]: networking.service: Failed with result 'exit-code'.May 07 16:13:03 db10server systemd[1]: Failed to start Raise network interfaces.lines 1-13/13 (END)[email protected]:~$ ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000    link/ether 5c:26:0a:26:cb:0a brd ff:ff:ff:ff:ff:ff3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000    link/ether 00:24:d7:6c:3e:10 brd ff:ff:ff:ff:ff:ff    inet 192.168.0.6/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp2s0       valid_lft 82655sec preferred_lft 82655sec    inet6 fe80::224:d7ff:fe6c:3e10/64 scope link noprefixroute        valid_lft forever preferred_lft forever

By: till at: 2020-05-15 11:47:47

The network device name can differ depending on the hardware that is used in your server.