unshare --version
unshare --version
unshare --version
# Ubuntu/Debian
sudo apt install util-linux # Fedora/RHEL
sudo dnf install util-linux # Arch Linux
sudo pacman -S util-linux
# Ubuntu/Debian
sudo apt install util-linux # Fedora/RHEL
sudo dnf install util-linux # Arch Linux
sudo pacman -S util-linux
# Ubuntu/Debian
sudo apt install util-linux # Fedora/RHEL
sudo dnf install util-linux # Arch Linux
sudo pacman -S util-linux
# Ver os namespaces do processo atual
ls -la /proc/$$/ns/ # Criar um namespace de PID isolado
sudo unshare --pid --fork --mount-proc bash # Dentro do namespace — verificar que somos o PID 1
ps aux # Sair do namespace
exit
# Ver os namespaces do processo atual
ls -la /proc/$$/ns/ # Criar um namespace de PID isolado
sudo unshare --pid --fork --mount-proc bash # Dentro do namespace — verificar que somos o PID 1
ps aux # Sair do namespace
exit
# Ver os namespaces do processo atual
ls -la /proc/$$/ns/ # Criar um namespace de PID isolado
sudo unshare --pid --fork --mount-proc bash # Dentro do namespace — verificar que somos o PID 1
ps aux # Sair do namespace
exit
# Criar um namespace de rede
sudo ip netns add meu-container # Listar namespaces de rede existentes
ip netns list # Criar par de interfaces virtuais
sudo ip link add veth0 type veth peer name veth1 # Mover veth1 para dentro do namespace
sudo ip link set veth1 netns meu-container # Configurar IPs
sudo ip addr add 10.0.0.1/24 dev veth0
sudo ip netns exec meu-container ip addr add 10.0.0.2/24 dev veth1 # Ativar as interfaces
sudo ip link set veth0 up
sudo ip netns exec meu-container ip link set veth1 up
sudo ip netns exec meu-container ip link set lo up # Testar comunicação
sudo ip netns exec meu-container ping 10.0.0.1 # Limpar
sudo ip netns delete meu-container
# Criar um namespace de rede
sudo ip netns add meu-container # Listar namespaces de rede existentes
ip netns list # Criar par de interfaces virtuais
sudo ip link add veth0 type veth peer name veth1 # Mover veth1 para dentro do namespace
sudo ip link set veth1 netns meu-container # Configurar IPs
sudo ip addr add 10.0.0.1/24 dev veth0
sudo ip netns exec meu-container ip addr add 10.0.0.2/24 dev veth1 # Ativar as interfaces
sudo ip link set veth0 up
sudo ip netns exec meu-container ip link set veth1 up
sudo ip netns exec meu-container ip link set lo up # Testar comunicação
sudo ip netns exec meu-container ping 10.0.0.1 # Limpar
sudo ip netns delete meu-container
# Criar um namespace de rede
sudo ip netns add meu-container # Listar namespaces de rede existentes
ip netns list # Criar par de interfaces virtuais
sudo ip link add veth0 type veth peer name veth1 # Mover veth1 para dentro do namespace
sudo ip link set veth1 netns meu-container # Configurar IPs
sudo ip addr add 10.0.0.1/24 dev veth0
sudo ip netns exec meu-container ip addr add 10.0.0.2/24 dev veth1 # Ativar as interfaces
sudo ip link set veth0 up
sudo ip netns exec meu-container ip link set veth1 up
sudo ip netns exec meu-container ip link set lo up # Testar comunicação
sudo ip netns exec meu-container ping 10.0.0.1 # Limpar
sudo ip netns delete meu-container
# Criar namespace de UTS (hostname isolado)
sudo unshare --uts bash # Dentro do namespace — alterar o hostname sem afetar o host
hostname meu-container
hostname # Em outro terminal, confirmar que o host não foi afetado
hostname # Sair do namespace
exit
# Criar namespace de UTS (hostname isolado)
sudo unshare --uts bash # Dentro do namespace — alterar o hostname sem afetar o host
hostname meu-container
hostname # Em outro terminal, confirmar que o host não foi afetado
hostname # Sair do namespace
exit
# Criar namespace de UTS (hostname isolado)
sudo unshare --uts bash # Dentro do namespace — alterar o hostname sem afetar o host
hostname meu-container
hostname # Em outro terminal, confirmar que o host não foi afetado
hostname # Sair do namespace
exit
# Ver a hierarquia de cgroups do sistema
systemd-cgls # Ver os controllers disponíveis
cat /sys/fs/cgroup/cgroup.controllers # Criar um cgroup
sudo mkdir /sys/fs/cgroup/meu-container # Habilitar os controllers de CPU e memória
echo "+cpu +memory" | sudo tee /sys/fs/cgroup/cgroup.subtree_control # Limitar a 50% de 1 CPU
echo "50000 100000" | sudo tee /sys/fs/cgroup/meu-container/cpu.max # Limitar memória a 128 MB
echo 134217728 | sudo tee /sys/fs/cgroup/meu-container/memory.max # Associar o processo atual ao cgroup
echo $$ | sudo tee /sys/fs/cgroup/meu-container/cgroup.procs # Verificar que o processo está no cgroup
cat /proc/$$/cgroup # Verificar os limites aplicados
cat /sys/fs/cgroup/meu-container/cpu.max
cat /sys/fs/cgroup/meu-container/memory.max # Limpar — mover processo de volta ao root e remover o cgroup
echo $$ | sudo tee /sys/fs/cgroup/cgroup.procs
sudo rmdir /sys/fs/cgroup/meu-container
# Ver a hierarquia de cgroups do sistema
systemd-cgls # Ver os controllers disponíveis
cat /sys/fs/cgroup/cgroup.controllers # Criar um cgroup
sudo mkdir /sys/fs/cgroup/meu-container # Habilitar os controllers de CPU e memória
echo "+cpu +memory" | sudo tee /sys/fs/cgroup/cgroup.subtree_control # Limitar a 50% de 1 CPU
echo "50000 100000" | sudo tee /sys/fs/cgroup/meu-container/cpu.max # Limitar memória a 128 MB
echo 134217728 | sudo tee /sys/fs/cgroup/meu-container/memory.max # Associar o processo atual ao cgroup
echo $$ | sudo tee /sys/fs/cgroup/meu-container/cgroup.procs # Verificar que o processo está no cgroup
cat /proc/$$/cgroup # Verificar os limites aplicados
cat /sys/fs/cgroup/meu-container/cpu.max
cat /sys/fs/cgroup/meu-container/memory.max # Limpar — mover processo de volta ao root e remover o cgroup
echo $$ | sudo tee /sys/fs/cgroup/cgroup.procs
sudo rmdir /sys/fs/cgroup/meu-container
# Ver a hierarquia de cgroups do sistema
systemd-cgls # Ver os controllers disponíveis
cat /sys/fs/cgroup/cgroup.controllers # Criar um cgroup
sudo mkdir /sys/fs/cgroup/meu-container # Habilitar os controllers de CPU e memória
echo "+cpu +memory" | sudo tee /sys/fs/cgroup/cgroup.subtree_control # Limitar a 50% de 1 CPU
echo "50000 100000" | sudo tee /sys/fs/cgroup/meu-container/cpu.max # Limitar memória a 128 MB
echo 134217728 | sudo tee /sys/fs/cgroup/meu-container/memory.max # Associar o processo atual ao cgroup
echo $$ | sudo tee /sys/fs/cgroup/meu-container/cgroup.procs # Verificar que o processo está no cgroup
cat /proc/$$/cgroup # Verificar os limites aplicados
cat /sys/fs/cgroup/meu-container/cpu.max
cat /sys/fs/cgroup/meu-container/memory.max # Limpar — mover processo de volta ao root e remover o cgroup
echo $$ | sudo tee /sys/fs/cgroup/cgroup.procs
sudo rmdir /sys/fs/cgroup/meu-container
# Baixar o rootfs
mkdir ~/rootfs
curl -L https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-minirootfs-3.19.0-x86_64.tar.gz \ | tar -xz -C ~/rootfs # Criar o cgroup no host
sudo mkdir -p /sys/fs/cgroup/meu-container
echo "+cpu +memory" | sudo tee /sys/fs/cgroup/cgroup.subtree_control
echo "50000 100000" | sudo tee /sys/fs/cgroup/meu-container/cpu.max
echo 134217728 | sudo tee /sys/fs/cgroup/meu-container/memory.max # Entrar no namespace
sudo unshare \ --pid \ --net \ --mount \ --uts \ --ipc \ --fork \ --mount-proc \ chroot ~/rootfs /bin/sh # De outro terminal no HOST (não dentro do container), pegar o PID e associar ao cgroup
PID=$(pgrep -f "chroot.*rootfs" | head -1)
echo $PID | sudo tee /sys/fs/cgroup/meu-container/cgroup.procs
# Baixar o rootfs
mkdir ~/rootfs
curl -L https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-minirootfs-3.19.0-x86_64.tar.gz \ | tar -xz -C ~/rootfs # Criar o cgroup no host
sudo mkdir -p /sys/fs/cgroup/meu-container
echo "+cpu +memory" | sudo tee /sys/fs/cgroup/cgroup.subtree_control
echo "50000 100000" | sudo tee /sys/fs/cgroup/meu-container/cpu.max
echo 134217728 | sudo tee /sys/fs/cgroup/meu-container/memory.max # Entrar no namespace
sudo unshare \ --pid \ --net \ --mount \ --uts \ --ipc \ --fork \ --mount-proc \ chroot ~/rootfs /bin/sh # De outro terminal no HOST (não dentro do container), pegar o PID e associar ao cgroup
PID=$(pgrep -f "chroot.*rootfs" | head -1)
echo $PID | sudo tee /sys/fs/cgroup/meu-container/cgroup.procs
# Baixar o rootfs
mkdir ~/rootfs
curl -L https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-minirootfs-3.19.0-x86_64.tar.gz \ | tar -xz -C ~/rootfs # Criar o cgroup no host
sudo mkdir -p /sys/fs/cgroup/meu-container
echo "+cpu +memory" | sudo tee /sys/fs/cgroup/cgroup.subtree_control
echo "50000 100000" | sudo tee /sys/fs/cgroup/meu-container/cpu.max
echo 134217728 | sudo tee /sys/fs/cgroup/meu-container/memory.max # Entrar no namespace
sudo unshare \ --pid \ --net \ --mount \ --uts \ --ipc \ --fork \ --mount-proc \ chroot ~/rootfs /bin/sh # De outro terminal no HOST (não dentro do container), pegar o PID e associar ao cgroup
PID=$(pgrep -f "chroot.*rootfs" | head -1)
echo $PID | sudo tee /sys/fs/cgroup/meu-container/cgroup.procs