These are my install notes to configure a Raspberry Pi with an External USB hard drive as super lightweight media server for smart TV's.
I have started off with Raspbian-lite Stretch
user@local: ~$ wget http://director.downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-03-14/2018-03-13-raspbian-stretch-lite.zip
user@local: ~$ unzip raspbian_lite-2018-03-14/2018-03-13-raspbian-stretch-lite.zipNow burn the image to an SDCard using whatever sw is appropriate for your operating system. On Windows I use Win32 Disk Imager
After the image is written, mount the boot (fat) partition and edit /config.txt as follows:
# /boot/config.txt for Pi DLNA Server
# CPU Frequency
arm_freq=1200
# minimize memory reserved for GPU
gpu_mem=64
# disable interfaces we don't need
dtparam=i2c_arm=off
dtparam=i2s=off
dtparam=spi=off
dtparam=audio=off
# disable wifi and bluetooth radios
dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt
# turn off display, instead of blank screen
hdmi_blanking=1
disable_splash=1Finally, create an empty file named ssh on the boot partition to enable an ssh daemon, then eject it, pop it in the Pi, and boot it up.
Now connect to the Pi via SSH
Note: The IP will be assigned by your router
user@local: ~$ ssh [email protected]
[email protected]'s password: raspberry
Linux raspberrypi 4.9.80-v7+ #1098 SMP Fri Mar 9 19:11:42 GMT 2018 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Mar 21 04:36:43 2018 from 192.168.0.8
SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.Configure DHCP to use Google DNS (no country-level DNS blocking)
pi@raspberrypi:~ $ echo "static domain_name_servers=8.8.8.8 8.8.4.4" | sudo tee -a /etc/dhcpcd.confNow we can change the hostname from the default 'raspberrypi' to 'media'
pi@raspberrypi:~ $ echo "media" | sudo tee /etc/hostname
mediaThen edit the /etc/hosts file to look like this:
pi@raspberrypi:~ $ sudo nano /etc/hosts127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 mediaConfigure the locale
pi@raspberrypi:~ $ sudo nano /etc/locale.genUncomment only en_US.UTF-8 UTF-8 (everything else should be commented), the re-generate:
pi@raspberrypi:~ $ sudo /usr/sbin/locale-genCreate a new user admin with the same permissions as the default pi user
pi@raspberrypi:~ $ sudo adduser admin
Adding user `admin' ...
Adding new group `admin' (1001) ...
Adding new user `admin' (1001) with group `admin' ...
Creating home directory `/home/admin' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for admin
Enter the new value, or press ENTER for the default
Full Name []: Media Admin
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
pi@raspberrypi:~ $ for GROUP in adm dialout cdrom sudo audio video plugdev games users netdev input spi i2c gpio; do sudo adduser admin $GROUP; done
Adding user `admin' to group `adm' ...
Adding user admin to group adm
Done.
Adding user `admin' to group `dialout' ...
Adding user admin to group dialout
Done.
Adding user `admin' to group `cdrom' ...
Adding user admin to group cdrom
Done.
Adding user `admin' to group `sudo' ...
Adding user admin to group sudo
Done.
Adding user `admin' to group `audio' ...
Adding user admin to group audio
Done.
Adding user `admin' to group `video' ...
Adding user admin to group video
Done.
Adding user `admin' to group `plugdev' ...
Adding user admin to group plugdev
Done.
Adding user `admin' to group `games' ...
Adding user admin to group games
Done.
Adding user `admin' to group `users' ...
Adding user admin to group users
Done.
Adding user `admin' to group `netdev' ...
Adding user admin to group netdev
Done.
Adding user `admin' to group `input' ...
Adding user admin to group input
Done.
Adding user `admin' to group `spi' ...
Adding user admin to group spi
Done.
Adding user `admin' to group `i2c' ...
Adding user admin to group i2c
Done.
Adding user `admin' to group `gpio' ...
Adding user admin to group gpio
Done.Create an .authorized keys file for the admin user.
pi@raspberrypi:~ $ sudo -u admin mkdir /home/admin/.ssh
pi@raspberrypi:~ $ sudo -u admin touch /home/admin/.ssh/authorized_keys
pi@raspberrypi:~ $ sudo -u admin chmod 700 /home/admin/.ssh/
pi@raspberrypi:~ $ sudo -u admin chmod 700 /home/admin/.ssh/authorized_keysReboot the Pi to make our hostname change stick
pi@raspberrypi:~ $ sudo reboot
[sudo] password for pi: raspberry
Connection to 192.168.0.14 closed by remote host.
Connection to 192.168.0.14 closed.Wait for it restart, then copy our exiting public key to the admin user for easier ssh logins
user@local@:~ $ cat ~/.ssh/id_rsa.pub | ssh [email protected] 'cat > .ssh/authorized_keys'
[email protected]'s password: passwordNow we can login without having to type a password
user@local@:~ $ ssh [email protected]
Linux media 4.9.80-v7+ #1098 SMP Fri Mar 9 19:11:42 GMT 2018 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Mar 21 05:35:56 2018 from 192.168.0.8
SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.Delete the pi user
admin@media:~ $ sudo deluser --remove-home pi
Looking for files to backup/remove ...
Removing files ...
Removing user `pi' ...
Warning: group `pi' has no more members.
Done.Now, tighten up the OpenSSH configuration a bit
admin@media:~ $ sudo nano /etc/ssh/sshd_configMake sure the follow lines are not commented
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
ChallengeResponseAuthentication no
UsePAM norestart the ssh daemon
admin@media:~ $ sudo service ssh restartFinally we can set setup our firewall
admin@media:~ $ sudo apt-get install iptables iptables-persistent -y
admin@media:~ $ nano /etc/iptables/rules.v4Add the following text to create some iptables rules:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allow SSH connections, the -dport number should be the same port number you set in sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -j ACCEPT
# Log iptables dropped packets
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables dropped: " --log-level 7
# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT