- 関連記事
- はじめに
- SSHからログインして初期設定
- パッケージを最新にアップデート
- JSTに変更
- ホスト名の設定
- rootユーザーのパスワード変更
- IPv6を無効化
- sshdの設定
- ほかサーバにsshするときにssh-rsaの鍵も利用できるようにする
- 管理用ユーザにsuして秘密鍵公開鍵を作成する
- 秘密鍵を使った管理用ユーザログインを確認する
- firewall(ufw)の設定
- Ctrl+Alt+Del の無効化
- chrony の設定
- リブート
- aptコマンドでrecommendsやsuggestedのパッケージをインストールしない
- emacs, git, zsh のインストール
- Syslogの設定追加
- Logrotateの設定変更(日次、28世代、1世代遅れで圧縮、postfixに日付)
- motdの更新スクリプトを作る
- Postfixのインストール
- ai-stack ユーザのshellをzshに変更
- aptのアップデートチェック
- 初期設定後のdf状態
- nVIDIAドライバのインストール
関連記事
- 自前LLM構築ガイド(1) Ubuntuサーバーセットアップ編 ← このページ
- 自前LLM構築ガイド(2) HuggingFaceモデルセットアップ編
はじめに
当記事は、LLM構築前のサーバーセットアップ手順です。
今回用意したサーバーは以下です。
| 項目 | 内容 |
|---|---|
| モデル | Dell PowerEdge R760 |
| CPU | Intel Xeon Gold 5415+ ×2(2.9GHz / 8コア16スレッド ×2 / 合計16コア32スレッド) |
| メモリ | 32GB RDIMM DDR5-5600 ×4(計128GB) |
| ストレージ(SSD) | 960GB SSD SATA 6Gbps 2.5インチ ×2(RAID 1構成) |
| GPU | NVIDIA L40S(PCIe, 350W, 48GB GDDR6) |
今回は以下をセットアップします。
- OS: Ubuntu Server 24.04 LTS
- ミドルウェア: Python, nvidia driverの最新版.
- ネットワーク: 最初はローカルIPのみで対応.あとからグローバルIPを追加する.
SSHからログインして初期設定
パッケージを最新にアップデート
# apt update
# apt full-upgrade
# apt autoremove
JSTに変更
# timedatectl set-timezone Asia/Tokyo
ホスト名の設定
# hostnamectl set-hostname aitest.ai-stack.jp
rootユーザーのパスワード変更
# passwd
→ xxxxxxxx
IPv6を無効化
# vi /etc/default/grub
> GRUB_CMDLINE_LINUX="ipv6.disable=1"
# update-grub
sshdの設定
root での ssh ログインを無効化
# vi /etc/ssh/sshd_config
- #PermitRootLogin prohibit-password
+ PermitRootLogin no
ユーザーのパスワード認証を無効化して鍵認証にする
# vi /etc/ssh/sshd_config
- #PasswordAuthentication yes
- #PermitEmptyPasswords no
+ PasswordAuthentication no
+ PermitEmptyPasswords no
ssh-rsaの鍵も利用できるようにする
# vi /etc/ssh/sshd_config
+ PubkeyAcceptedAlgorithms +ssh-rsa
外部設定ファイルを削除
# rm /etc/ssh/sshd_config.d/50-cloud-init.conf
ほかサーバにsshするときにssh-rsaの鍵も利用できるようにする
# vi /etc/ssh/ssh_config
+ PubkeyAcceptedAlgorithms +ssh-rsa
+ HostkeyAlgorithms +ssh-rsa
管理用ユーザにsuして秘密鍵公開鍵を作成する
# su - ai-stack
$ ssh-keygen -t rsa
$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa
$ exit
秘密鍵を使った管理用ユーザログインを確認する
# systemctl restart ssh
> 別コンソールから ai-stack ユーザで秘密鍵認証の確認
firewall(ufw)の設定
# vi /etc/default/ufw
- IPV6=yes
+ IPV6=no
# ufw default REJECT
# ufw allow from 192.168.8.0/24 to any app OpenSSH comment 'SSH from Local'
# ufw enable
# ufw reload
Ctrl+Alt+Del の無効化
# systemctl mask ctrl-alt-del.target
chrony の設定
# apt install chrony
# vi /etc/chrony/chrony.conf
- pool ntp.ubuntu.com iburst maxsources 4
- pool 0.ubuntu.pool.ntp.org iburst maxsources 1
- pool 1.ubuntu.pool.ntp.org iburst maxsources 1
- pool 2.ubuntu.pool.ntp.org iburst maxsources 2
+ pool 210.173.160.27 iburst
+ pool 210.173.160.57 iburst
+ pool 210.173.160.87 iburst
# systemctl enable chrony
# systemctl restart chrony
# chronyc sources
210 Number of sources = 3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp1.jst.mfeed.ad.jp 2 6 7 1 -73us[+3126us] +/- 79ms
^+ ntp2.jst.mfeed.ad.jp 2 6 7 1 +11us[+3211us] +/- 72ms
^+ ntp3.jst.mfeed.ad.jp 2 6 7 1 -197us[+3002us] +/- 101ms
リブート
# shutdown -r now
各種パッケージインストール
aptコマンドでrecommendsやsuggestedのパッケージをインストールしない
# vi /etc/apt/apt.conf.d/00no-install-recommends
APT::Install-Suggests 0;
APT::Install-Recommends 0;
emacs, git, zsh のインストール
# apt install emacs-nox anthy-el plocate zsh net-tools
Syslogの設定追加
# vi /etc/rsyslog.d/50-default.conf
- *.*;auth,authpriv.none -/var/log/syslog
+ #*.*;auth,authpriv.none -/var/log/syslog
+ *.info;mail,authpriv,cron.none /var/log/messages
- #cron.* /var/log/cron.log
+ cron.* /var/log/cron.log
+ *.* /var/log/all.log
# systemctl restart rsyslog
Logrotateの設定変更(日次、28世代、1世代遅れで圧縮、postfixに日付)
# vi /etc/logrotate.d/rsyslog
/var/log/syslog
/var/log/mail.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/cron.log
/var/log/messages
/var/log/all.log
/var/log/console.log
{
rotate 28
daily
dateext
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
# vi /etc/logrotate.d/ufw
/var/log/ufw.log
{
rotate 28
daily
dateext
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
[ -x /usr/lib/rsyslog/rsyslog-rotate ] && /usr/lib/rsyslog/rsyslog-rotate || true
endscript
}
motdの更新スクリプトを作る
Ubuntuの場合は /etc/update-motd.d 以下に実行スクリプトを配置するとファイル名順に実行される
# apt install figlet
# vi /usr/local/bin/ai-stack-motd.sh
#!/bin/bash
# 文字色
#echo -e "\e[30m黒色"
#echo -e "\e[31m赤色"
#echo -e "\e[32m緑色"
#echo -e "\e[33m黄色"
#echo -e "\e[34m青色"
#echo -e "\e[35m赤紫色(マゼンタ)"
#echo -e "\e[36m水色(シアン)"
#echo -e "\e[37m白色"
#echo -e "\e[mリセット"
FONT=standard
HOSTNAME=`hostname`
ETHDEV1='eno8403'
IP_ADDR1=`ip -f inet -o addr show $ETHDEV1|cut -d\ -f 7 | cut -d/ -f 1`
#ETHDEV2='eno8403'
#IP_ADDR2=`ip -f inet -o addr show $ETHDEV2|cut -d\ -f 7 | cut -d/ -f 1`
source /etc/os-release
echo -e "\e[36m$(figlet -f $FONT Ai)\e[m"
echo -e "\e[36m$(figlet -f $FONT Stack)\e[m"
echo -e "\e[35mos\t$NAME $VERSION\e[m"
echo -e "\e[35mhost\t$HOSTNAME\e[m"
echo -e "\e[35m$ETHDEV1\t$IP_ADDR1\e[m"
#echo -e "\e[35m$ETHDEV2\t$IP_ADDR2\e[m"
# chmod a+x /usr/local/bin/ai-stack-motd.sh
# ln -s /usr/local/bin/ai-stack-motd.sh /etc/update-motd.d/01-ai-stack-motd
# chmod a-x /etc/update-motd.d/{10-help-text,50-motd-news}
# vi /etc/cron.daily/000-hostname
#!/bin/sh
figlet -c -w 72 aitest
# chmod a+x /etc/cron.daily/000-hostname
Postfixのインストール
# apt install postfix mailutils
# cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf
# vi /etc/postfix/main.cf
-#mail_owner = postfix
+mail_owner = postfix
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
+myhostname = aitest.ai-stack.jp
#mydomain = domain.tld
+mydomain = aitest.ai-stack.jp
#myorigin = /etc/mailname
#myorigin = $myhostname
-#myorigin = $mydomain
+myorigin = $mydomain
-#inet_interfaces = all
+inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost
-#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
+mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
# mail.$mydomain, www.$mydomain, ftp.$mydomain
-#local_recipient_maps = unix:passwd.byname $alias_maps
+local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =
#mynetworks_style = class
-#mynetworks_style = subnet
+mynetworks_style = subnet
#mynetworks_style = host
#alias_maps = dbm:/etc/aliases
-#alias_maps = hash:/etc/aliases
+alias_maps = hash:/etc/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases
#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
-#alias_database = hash:/etc/aliases
+alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
#home_mailbox = Mailbox
-#home_mailbox = Maildir/
+home_mailbox = Maildir/
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
-smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
+#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
+smtpd_banner = $myhostname ESMTP
-sendmail_path =
+sendmail_path = /usr/sbin/postfix
-newaliases_path =
+newaliases_path = /usr/bin/newaliases
-mailq_path =
+mailq_path = /usr/bin/mailq
-setgid_group =
+setgid_group = postdrop
-html_directory =
+#html_directory =
-manpage_directory =
+#manpage_directory =
-sample_directory =
+#sample_directory =
-readme_directory =
+#readme_directory =
+
inet_protocols = ipv4
# systemctl enable postfix
# systemctl start postfix
# vi /etc/aliases
> root: server@ai-stack.jp
# newaliases
# mail root
ai-stack ユーザのshellをzshに変更
# chsh -s /usr/bin/zsh ai-stack
aptのアップデートチェック
# vi /etc/cron.daily/001-apt_upgradable
#!/bin/sh
apt update && apt list --upgradable
# chmod a+x /etc/cron.daily/001-apt_upgradable
初期設定後のdf状態
root@aitest:~# df -h -T
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 13G 2.2M 13G 1% /run
efivarfs efivarfs 304K 114K 185K 39% /sys/firmware/efi/efivars
/dev/sda2 xfs 893G 29G 865G 4% /
tmpfs tmpfs 63G 0 63G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda1 vfat 1.1G 6.2M 1.1G 1% /boot/efi
tmpfs tmpfs 13G 12K 13G 1% /run/user/1000
nVIDIAドライバのインストール
# apt install python3-pip
# cd /usr/local/src/
# wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
# dpkg -i cuda-keyring_1.1-1_all.deb
# apt update
# apt install nvidia-driver-580
→エラーでインストールできない...
→ビルドに必要なパッケージが足りていない模様
# apt install build-essential
# apt install nvidia-driver-580
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
nvidia-driver-580 is already the newest version (580.95.05-0ubuntu1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
→インストール済みの表示になったので、上記の build-essential のインストールと同時に途中だったドライバ関係もインストールされた.
# apt install cuda-toolkit-13-0
# nvidia-smi
Thu Nov 6 16:46:22 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05 Driver Version: 580.95.05 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA L40S Off | 00000000:B5:00.0 Off | 0 |
| N/A 35C P0 83W / 350W | 0MiB / 46068MiB | 2% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
以上でUbuntuサーバーのセットアップが完了しました。
次回はHuggingFaceからモデルをロードして、LLMを動かします。



コメント