LXC用のレシピを作成 #29

Merged
kazu634 merged 6 commits from sshd4LXC into main 2025-04-12 10:18:13 +00:00
22 changed files with 210 additions and 424 deletions

View File

@ -0,0 +1,15 @@
# Check whether it is inside the LXC container:
result = run_command('grep lxc /proc/1/environ', error: false).exit_status
if result == 0
lxc = true
else
lxc = false
end
node.reverse_merge!({
'base' => {
'lxc' => lxc
}
})

View File

@ -1,3 +1,5 @@
include_recipe './attributes.rb'
[ [
# only install amd64 package # only install amd64 package
# http://d.hatena.ne.jp/ritchey/20121229 # http://d.hatena.ne.jp/ritchey/20121229
@ -33,6 +35,17 @@ remote_file '/etc/update-motd.d/99-motd-update' do
mode '755' mode '755'
end end
# If it is inside an LXC, change the apt repository settings:
if node['base']['lxc']
%w( /etc/apt/sources.list /etc/apt/sources.list.d/ubuntu.sources ).each do |conf|
remote_file conf do
mode "0644"
owner "root"
group "root"
end
end
end
# Install the necessary packages: # Install the necessary packages:
include_recipe './packages.rb' include_recipe './packages.rb'
include_recipe './eget.rb' include_recipe './eget.rb'
@ -49,33 +62,37 @@ include_recipe './ufw.rb'
# `sshd` configurations: # `sshd` configurations:
include_recipe './ssh.rb' include_recipe './ssh.rb'
# `fortune` configurations:
include_recipe './fortune.rb'
# timezone configurations: # timezone configurations:
include_recipe './timezone.rb' include_recipe './timezone.rb'
include_recipe './ntp.rb'
# kernel configurations: # If it is a VM, do the followings.
include_recipe './kernel.rb' # If it is inside an LXC container, do NOTHING.
unless node['base']['lxc']
# `fortune` configurations:
include_recipe './fortune.rb'
# Install mc command: # kernel configurations:
include_recipe './mc.rb' include_recipe './kernel.rb'
# Install lsyncd command: # Install mc command:
include_recipe './lsyncd.rb' include_recipe './mc.rb'
# Install starship command: # Install lsyncd command:
include_recipe './starship.rb' include_recipe './lsyncd.rb'
# Install cloudflared command: # Install starship command:
include_recipe './cloudflared.rb' include_recipe './starship.rb'
# Disable Ubuntu Pro # Install cloudflared command:
include_recipe './ubuntupro.rb' include_recipe './cloudflared.rb'
# recipes for Ubuntu 20.04 and later # Disable Ubuntu Pro
case node['platform_version'] include_recipe './ubuntupro.rb'
when "20.04", "22.04", "24.04"
# recipes for Ubuntu 20.04 and later
case node['platform_version']
when "20.04", "22.04", "24.04"
remote_file '/etc/multipath.conf' do remote_file '/etc/multipath.conf' do
owner 'root' owner 'root'
group 'root' group 'root'
@ -87,47 +104,10 @@ when "20.04", "22.04", "24.04"
service 'multipath-tools' do service 'multipath-tools' do
action :nothing action :nothing
end end
package 'systemd-timesyncd'
service 'systemd-timesyncd' do
action :enable
end end
case node['platform_version'] # AWS EC2 Swap Setting:
when "20.04" if node['is_ec2']
remote_file '/etc/systemd/timesyncd.conf' do
owner 'root'
group 'root'
mode '0644'
notifies :restart, 'service[systemd-timesyncd]'
end
when "22.04"
remote_file '/etc/systemd/timesyncd.conf' do
owner 'root'
group 'root'
mode '0644'
source 'files/etc/systemd/timesyncd.2204.conf'
notifies :restart, 'service[systemd-timesyncd]'
end
when "24.04"
remote_file '/etc/systemd/timesyncd.conf' do
owner 'root'
group 'root'
mode '0644'
source 'files/etc/systemd/timesyncd.2404.conf'
notifies :restart, 'service[systemd-timesyncd]'
end
end
end
# AWS EC2 Swap Setting:
if node['is_ec2']
include_recipe './aws_ec2.rb' include_recipe './aws_ec2.rb'
end
end end

View File

@ -0,0 +1,6 @@
# deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
# deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
# deb http://archive.ubuntu.com/ubuntu noble-security main restricted universe multiverse

View File

@ -0,0 +1,11 @@
Types: deb
URIs: http://192.168.10.201:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

39
cookbooks/base/ntp.rb Normal file
View File

@ -0,0 +1,39 @@
package 'systemd-timesyncd'
service 'systemd-timesyncd' do
action :enable
end
case node['platform_version']
when "20.04", "22.04", "24.04"
case node['platform_version']
when "20.04"
remote_file '/etc/systemd/timesyncd.conf' do
owner 'root'
group 'root'
mode '0644'
notifies :restart, 'service[systemd-timesyncd]'
end
when "22.04"
remote_file '/etc/systemd/timesyncd.conf' do
owner 'root'
group 'root'
mode '0644'
source 'files/etc/systemd/timesyncd.2204.conf'
notifies :restart, 'service[systemd-timesyncd]'
end
when "24.04"
remote_file '/etc/systemd/timesyncd.conf' do
owner 'root'
group 'root'
mode '0644'
source 'files/etc/systemd/timesyncd.2404.conf'
notifies :restart, 'service[systemd-timesyncd]'
end
end
end

View File

@ -2,7 +2,7 @@
execute 'apt update' execute 'apt update'
# Install the necessary packages: # Install the necessary packages:
%w[build-essential zsh vim-nox debian-keyring curl direnv jq avahi-daemon wget gpg coreutils].each do |pkg| %w[build-essential zsh vim-nox debian-keyring curl direnv jq avahi-daemon wget gpg coreutils software-properties-common].each do |pkg|
package pkg package pkg
end end

View File

@ -8,9 +8,11 @@ end
case run_command('grep VERSION_ID /etc/os-release | awk -F\" \'{print $2}\'').stdout.chomp case run_command('grep VERSION_ID /etc/os-release | awk -F\" \'{print $2}\'').stdout.chomp
when "24.04" when "24.04"
unless node['base']['lxc']
execute "change link to /etc/resolv.conf" do execute "change link to /etc/resolv.conf" do
command "ln -fs /run/systemd/resolve/resolv.conf /etc/resolv.conf" command "ln -fs /run/systemd/resolve/resolv.conf /etc/resolv.conf"
end end
end
directory "/etc/systemd/resolved.conf.d/" do directory "/etc/systemd/resolved.conf.d/" do
mode "0755" mode "0755"

View File

@ -0,0 +1,12 @@
# If it is a VM, use `zsh`. Otherwise, `bash`:
unless node['base']['lxc']
SHELL = '/usr/bin/zsh'
else
SHELL = '/usr/bin/bash'
end
node.reverse_merge!({
'kazu634' => {
'shell' => SHELL
}
})

View File

@ -1,9 +1,14 @@
include_recipe './attributes.rb'
include_recipe './kazu634.rb' include_recipe './kazu634.rb'
include_recipe './ssh.rb' include_recipe './ssh.rb'
include_recipe './vim.rb' # if it is inside a VM, do the followings:
unless node['base']['lxc']
include_recipe './vim.rb'
include_recipe './mc.rb' include_recipe './mc.rb'
include_recipe './mise.rb' include_recipe './mise.rb'
end

View File

@ -7,63 +7,7 @@ user 'kazu634' do
create_home true create_home true
home HOME home HOME
shell '/usr/bin/zsh' shell node['kazu634']['shell']
end
# Create directories:
%w( repo src tmp works .cache ).each do |d|
directory "#{HOME}/#{d}" do
owner 'kazu634'
group 'kazu634'
mode '755'
end
end
# `git-now` deployment:
git '/home/kazu634/repo/git-now' do
repository 'https://github.com/iwata/git-now.git'
user 'kazu634'
recursive true
end
execute 'make install' do
user 'root'
cwd '/home/kazu634/repo/git-now/'
not_if 'which git-now'
end
# Deploy dot files:
git '/home/kazu634/repo/dotfiles' do
repository 'https://gitea.kazu634.com/kazu634/dotfiles.git'
user 'kazu634'
end
execute 'install_dotfiles' do
user 'root'
command 'su - kazu634 -c "/home/kazu634/repo/dotfiles/install.sh"'
not_if 'test -f /home/kazu634/.zshenv'
end
# Deploy `zplug`:
git '/home/kazu634/.zplug' do
repository 'https://github.com/zplug/zplug.git'
user 'kazu634'
end
# Starship config
directory '/home/kazu634/.config' do
owner 'kazu634'
group 'kazu634'
mode '0740'
end
remote_file '/home/kazu634/.config/starship.toml' do
owner 'kazu634'
group 'kazu634'
mode '0640'
end end
# sudoers # sudoers
@ -73,18 +17,77 @@ remote_file '/etc/sudoers.d/kazu634' do
mode '440' mode '440'
end end
# automatically delete the /home/kazu634/tmp directory: # if it is inside a VM, do the followings:
remote_file '/etc/cron.d/remove_tmp' do unless node['base']['lxc']
# Create directories:
%w( repo src tmp works .cache ).each do |d|
directory "#{HOME}/#{d}" do
owner 'kazu634'
group 'kazu634'
mode '755'
end
end
# `git-now` deployment:
git '/home/kazu634/repo/git-now' do
repository 'https://github.com/iwata/git-now.git'
user 'kazu634'
recursive true
end
execute 'make install' do
user 'root'
cwd '/home/kazu634/repo/git-now/'
not_if 'which git-now'
end
# Deploy dot files:
git '/home/kazu634/repo/dotfiles' do
repository 'https://gitea.kazu634.com/kazu634/dotfiles.git'
user 'kazu634'
end
execute 'install_dotfiles' do
user 'root'
command 'su - kazu634 -c "/home/kazu634/repo/dotfiles/install.sh"'
not_if 'test -f /home/kazu634/.zshenv'
end
# Deploy `zplug`:
git '/home/kazu634/.zplug' do
repository 'https://github.com/zplug/zplug.git'
user 'kazu634'
end
# Starship config
directory '/home/kazu634/.config' do
owner 'kazu634'
group 'kazu634'
mode '0740'
end
remote_file '/home/kazu634/.config/starship.toml' do
owner 'kazu634'
group 'kazu634'
mode '0640'
end
# automatically delete the /home/kazu634/tmp directory:
remote_file '/etc/cron.d/remove_tmp' do
owner 'root' owner 'root'
group 'root' group 'root'
mode '644' mode '644'
end end
# Deploy `~/works/rsync.sh`: # Deploy `~/works/rsync.sh`:
%w( rsync.sh lsyncd.conf.lua ).each do |file| %w( rsync.sh lsyncd.conf.lua ).each do |file|
remote_file "/home/kazu634/works/#{file}" do remote_file "/home/kazu634/works/#{file}" do
owner 'kazu634' owner 'kazu634'
group 'kazu634' group 'kazu634'
mode '755' mode '755'
end end
end
end end

View File

@ -1,16 +0,0 @@
# Install the necessary packages:
include_recipe './packages.rb'
include_recipe './eget.rb'
# `unattended-upgrade` settings:
include_recipe './unattended-upgrade.rb'
# `ufw` configurations:
include_recipe './ufw.rb'
# timezone configurations:
include_recipe './timezone.rb'
execute 'ufw allow 22/tcp' do
notifies :run, 'execute[ufw reload-or-enable]'
end

View File

@ -1,14 +0,0 @@
result = run_command('which eget', error: false)
if result.exit_status != 0
# Install eget
execute 'curl https://zyedidia.github.io/eget.sh | sh' do
cwd '/usr/local/bin/'
end
execute 'chown root:root /usr/local/bin/eget'
execute 'chmod 755 /usr/local/bin/eget'
end
%w( zyedidia/eget mgdm/htmlq ).each do |p|
execute "eget #{p} --to /usr/local/bin/ --upgrade-only"
end

View File

@ -1,2 +0,0 @@
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

View File

@ -1,143 +0,0 @@
// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Extended Security Maintenance; doesn't necessarily exist for
// every release and this system may not have it installed, but if
// available, the policy for updates is such that unattended-upgrades
// should also install from here by default.
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
// Python regular expressions, matching packages to exclude from upgrading
Unattended-Upgrade::Package-Blacklist {
// The following matches all packages starting with linux-
// "linux-";
// Use $ to explicitely define the end of a package name. Without
// the $, "libc6" would match all of them.
// "libc6$";
// "libc6-dev$";
// "libc6-i686$";
// Special characters need escaping
// "libstdc\+\+6$";
// The following matches packages like xen-system-amd64, xen-utils-4.1,
// xenstore-utils and libxenstore3.0
// "(lib)?xen(store)?";
// For more information about Python regular expressions, see
// https://docs.python.org/3/howto/regex.html
};
// This option controls whether the development release of Ubuntu will be
// upgraded automatically. Valid values are "true", "false", and "auto".
Unattended-Upgrade::DevRelease "auto";
// This option allows you to control if on a unclean dpkg exit
// unattended-upgrades will automatically run
// dpkg --force-confold --configure -a
// The default is true, to ensure updates keep getting installed
//Unattended-Upgrade::AutoFixInterruptedDpkg "true";
// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGTERM. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "true";
// Install all updates when the machine is shutting down
// instead of doing it in the background while the machine is running.
// This will (obviously) make shutdown slower.
// Unattended-upgrades increases logind's InhibitDelayMaxSec to 30s.
// This allows more time for unattended-upgrades to shut down gracefully
// or even install a few packages in InstallOnShutdown mode, but is still a
// big step back from the 30 minutes allowed for InstallOnShutdown previously.
// Users enabling InstallOnShutdown mode are advised to increase
// InhibitDelayMaxSec even further, possibly to 30 minutes.
//Unattended-Upgrade::InstallOnShutdown "false";
// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed. E.g. "user@example.com"
//Unattended-Upgrade::Mail "";
// Set this value to one of:
// "always", "only-on-error" or "on-change"
// If this is not set, then any legacy MailOnlyOnError (boolean) value
// is used to chose between "only-on-error" and "on-change"
//Unattended-Upgrade::MailReport "on-change";
// Remove unused automatically installed kernel-related packages
// (kernel images, kernel headers and kernel version locked tools).
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
// Do automatic removal of newly unused dependencies after the upgrade
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
// Do automatic removal of unused packages after the upgrade
// (equivalent to apt-get autoremove)
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Automatically reboot *WITHOUT CONFIRMATION* if
// the file /var/run/reboot-required is found after the upgrade
Unattended-Upgrade::Automatic-Reboot "false";
// Automatically reboot even if there are users currently logged in
// when Unattended-Upgrade::Automatic-Reboot is set to true
//Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
// If automatic reboot is enabled and needed, reboot at the specific
// time instead of immediately
// Default: "now"
//Unattended-Upgrade::Automatic-Reboot-Time "02:00";
// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";
// Enable logging to syslog. Default is False
// Unattended-Upgrade::SyslogEnable "false";
// Specify syslog facility. Default is daemon
// Unattended-Upgrade::SyslogFacility "daemon";
// Download and install upgrades only on AC power
// (i.e. skip or gracefully stop updates on battery)
// Unattended-Upgrade::OnlyOnACPower "true";
// Download and install upgrades only on non-metered connection
// (i.e. skip or gracefully stop updates on a metered connection)
// Unattended-Upgrade::Skip-Updates-On-Metered-Connections "true";
// Verbose logging
// Unattended-Upgrade::Verbose "false";
// Print debugging information both in unattended-upgrades and
// in unattended-upgrade-shutdown
// Unattended-Upgrade::Debug "false";
// Allow package downgrade if Pin-Priority exceeds 1000
// Unattended-Upgrade::Allow-downgrade "false";
// When APT fails to mark a package to be upgraded or installed try adjusting
// candidates of related packages to help APT's resolver in finding a solution
// where the package can be upgraded or installed.
// This is a workaround until APT's resolver is fixed to always find a
// solution if it exists. (See Debian bug #711128.)
// The fallback is enabled by default, except on Debian's sid release because
// uninstallable packages are frequent there.
// Disabling the fallback speeds up unattended-upgrades when there are
// uninstallable packages at the expense of rarely keeping back packages which
// could be upgraded or installed.
// Unattended-Upgrade::Allow-APT-Mark-Fallback "true";

View File

@ -1,2 +0,0 @@
autoclean -y
upgrade -y -o APT::Get::Show-Upgraded=true

View File

@ -1,11 +0,0 @@
# Configuration for cron-apt. For further information about the possible
# configuration settings see the README file.
SYSLOGON="always"
DEBUG="verbose"
MAILON=""
APTCOMMAND=/usr/bin/apt
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"

View File

@ -1,14 +0,0 @@
# Execute `apt update`:
execute 'apt update'
# Install the necessary packages:
%w[build-essential zsh vim-nox debian-keyring curl direnv jq avahi-daemon wget gpg coreutils].each do |pkg|
package pkg
end
execute 'ufw allow 5353/udp' do
user 'root'
not_if 'LANG=c ufw status | grep 5353'
notifies :run, 'execute[ufw reload-or-enable]'
end

View File

@ -1 +0,0 @@
deb "http://ppa.launchpad.net/git-core/ppa/ubuntu" <%= @distribution %> main

View File

@ -1,23 +0,0 @@
case node['platform_version']
when "18.04", "20.04", "22.04", "24.04"
execute 'timedatectl set-timezone Asia/Tokyo' do
not_if 'timedatectl | grep Tokyo'
end
else
remote_file '/etc/timezone' do
user 'root'
owner 'root'
group 'root'
mode '644'
end
[
'cp -f /usr/share/zoneinfo/Asia/Tokyo /etc/localtime'
].each do |cmd|
execute cmd do
user 'root'
not_if 'diff /usr/share/zoneinfo/Asia/Tokyo /etc/localtime'
end
end
end

View File

@ -1,6 +0,0 @@
execute 'ufw reload-or-enable' do
user 'root'
command 'LANG=C ufw reload | grep skipping && ufw --force enable || exit 0'
action :nothing
end

View File

@ -1,56 +0,0 @@
case run_command('grep VERSION_ID /etc/os-release | awk -F\" \'{print $2}\'').stdout.chomp
when "18.04"
# Install `cron-apt`:
package 'cron-apt'
# From here, we are going to set up `cron-apt` to
# install the important security updates every day.
remote_file '/etc/cron-apt/config' do
user 'root'
owner 'root'
group 'root'
mode '644'
end
remote_file '/etc/cron-apt/action.d/3-download' do
user 'root'
owner 'root'
group 'root'
mode '644'
end
execute 'grep security /etc/apt/sources.list > /etc/apt/security.sources.list' do
user 'root'
not_if 'test -e /etc/apt/security.sources.list'
end
file '/var/log/cron-apt/log' do
user 'root'
content 'foo\n'
owner 'root'
group 'root'
mode '666'
not_if 'test -e /var/log/cron-apt/log'
end
execute '/usr/sbin/logrotate -f /etc/logrotate.d/cron-apt' do
user 'root'
not_if 'test -e /var/log/cron-apt/log'
end
when '20.04', '22.04', '24.04'
%w(20auto-upgrades 50unattended-upgrades).each do |conf|
remote_file "/etc/apt/apt.conf.d/#{conf}" do
owner 'root'
group 'root'
mode '644'
end
end
end

View File

@ -1,4 +1,5 @@
include_recipe "../cookbooks/lxc/default.rb" include_recipe "../cookbooks/base/default.rb"
include_recipe "../cookbooks/kazu634/default.rb"
include_recipe "../cookbooks/vault/default.rb" include_recipe "../cookbooks/vault/default.rb"
include_recipe "../cookbooks/consul-template/default.rb" include_recipe "../cookbooks/consul-template/default.rb"
include_recipe "../cookbooks/consul/default.rb" include_recipe "../cookbooks/consul/default.rb"