Saya pikir saya telah menemukan solusi yang lebih baik daripada yang saat ini disajikan di sini. Sebagian karena sejauh yang saya tahu cgmanager sudah mati, sebagian karena solusi saya tidak terasa seperti solusi yang buruk, tetapi sebagian besar karena diskusi ini masih muncul ketika mencari solusi untuk masalah tersebut. Sebenarnya cukup sederhana: gunakan mode pengguna systemd .
Memang jika Anda tidak menggunakan systemd solusi ini tidak akan membantu. Dalam hal ini saya akan menyarankan Anda untuk mencari tahu apakah sistem init Anda memiliki beberapa cara untuk memungkinkan pengguna yang tidak terdaftar untuk menjalankan layanan saat boot dan menggunakannya sebagai titik awal.
Menggunakan mode pengguna systemd untuk melakukan autostart wadah lxc yang tidak terjangkau
Saya berasumsi Anda memiliki kontainer lxc yang tidak bekerja dan berfungsi dengan baik dan berfungsi lxc-autostart
sebagai pengguna kontainer. Jika demikian, lakukan hal berikut:
- Buat file
~/.config/systemd/user/lxc-autostart.service
di rumah pengguna apa pun yang memiliki wadah lxc:
[Unit]
Description="Lxc-autostart for lxc user"
[Service]
Type=oneshot
ExecStart=/usr/bin/lxc-autostart
ExecStop=/usr/bin/lxc-autostart -s
RemainAfterExit=1
[Install]
WantedBy=default.target
- Kemudian saat pengguna menjalankan:
systemctl --user enable lxc-autostart
(Catatan, --user
opsi memberi tahu systemctl Anda menggunakannya dalam mode pengguna. Semua hal yang biasanya saya lakukan dengan systemctl, mulai, berhenti, statuc, aktifkan, dll, bekerja dengan --user.)
- Kemudian jalankan yang berikut ini, di mana
$user
nama pengguna yang memiliki kontainer lxc:
sudo loginctl enable-linger $user
Ini diperlukan bagi systemd untuk memulai instance pengguna systemd $user
ketika boot. Kalau tidak, itu hanya akan mulai satu saat $user
login.
Untuk informasi lebih lanjut, saya akan merekomendasikan halaman archlinux wiki systemd / timer dan halaman manual systemd .
Mengakses instance systemd pengguna sebagai root
Anda benar-benar dapat memulai / menghentikan / apa pun layanan systemd pengguna sebagai root, namun ini mengharuskan Anda untuk mengatur XDG_RUNTIME_DIR
variabel lingkungan. Asumsikan $user
adalah pengguna yang instansinya ingin Anda akses dan $uid
itu adalah uid, maka ini adalah cara Anda memulai lxc-autostart.service yang ditentukan di atas:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemctl --user start lxc-autostart
Anda bahkan dapat menggunakan systemd-run
untuk menjalankan perintah sewenang-wenang sebagai pengguna dengan cara yang tidak merusak lxc. Saya menggunakan perintah berikut untuk menghentikan / memulai wadah saya sebelum / sesudah pencadangan, di mana $name
nama wadah lxc yang didukung:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --wait lxc-stop -n $name
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --scope lxc-start -n $name
(Perhatikan bahwa tanpa --wait
systemd-run tidak akan memblokir sampai wadah dihentikan.)
/etc/init/lxc.conf
petunjuk. Ini adalah pekerjaan pemula yang memulai wadah istimewa. Seharusnya tidak terlalu sulit untuk menyalinnya dan memodifikasinya untuk mematikan wadah yang tidak terjangkau juga./proc/self/cgroup
dalamnya berisi urutan seperti/user/0.user/1.session
bukannya/user/1000.user/1.session
Jika ada yang menemukan q & a ini untuk jawaban atas autostarting wadah LXC yang tidak terjangkau (saya pasti sering memeriksa kembali di sini), berikut adalah solusi yang bekerja dengan baik dan yang saya ikuti untuk membuatnya bekerja di server saya:
http://blog.lifebloodnetworks.com/?p=2118 oleh Nicholas J Ingrassellino.
Singkatnya, ini melibatkan pembuatan dua skrip, dan mereka bekerja bersama saat permulaan untuk memungkinkan LXC untuk memulai wadah tidak terprivat dari setiap pengguna yang terdaftar tanpa harus benar-benar masuk ke akun pengguna; dengan kata lain, menjalankan perintah sebagai pengguna dengan semua sihir CGroups utuh. Sesuai dengan praktik terbaik SO, saya akan mengutip tulang-tulangnya di sini tapi ada baiknya membaca artikel aslinya.
Saya hanya ingin menekankan bahwa itu tampaknya berfungsi dengan aman, benar, dan tidak memerlukan root untuk SSH ke akun pengguna lain.
Ada juga lebih banyak tentang subjek (menyentuh pada gotcha terkait) di sini: https://gist.github.com/julianlam/4e2bd91d8dedee21ca6f yang dapat berguna dalam memahami mengapa ini seperti ini.
sumber
Saya telah menulis skrip kecil untuk mengatasi masalah ini, cukup ikuti instruksi yang dikomentari.
sumber
MAAF: menjawab terlalu cepat. Itu tidak berfungsi meskipun lxc-ls memperlihatkan "AUTOSTART" sebagai "YA".
Berikut ini tautan dengan info yang jauh lebih bermanfaat, dan mungkin seseorang dapat memanfaatkannya: http://www.geeklee.co.uk/unprivileged-privileged-privileged-containers-ubuntu-14-04-lxc/
Saya mendarat di halaman ini karena saya memiliki masalah yang sama. Setelah membaca utas ini, saya menyadari bahwa lxc-create tidak dapat menulis ke direktori "/ var / lib / lxc /" yang biasa jika tidak dijalankan dengan sudo.
Saya melihat sekeliling dan menemukan rootfs untuk wadah saya yang tidak memiliki hak istimewa di "~ / .local / share / lxc", dan memasukkan kedua baris dalam pertanyaan ke dalam config di direktori itu.
Saya melihat templat yang saya gunakan, "lxc-download" untuk petunjuk, tapi saya pikir path dilewatkan ketika "lxc-download" dipanggil. Saya belum melihat bagaimana sistem mencari wadah yang tidak terjangkau selama boot.
sumber
saya menjalankan setiap wadah yang tidak memiliki hak pribadi dengan nama pengguna yang sama untuk isolasi yang lebih baik dan ini adalah bagaimana saya melakukannya:
sumber
Dengan asumsi (yang merupakan induk dari semua cara untuk mengacaukan segalanya), Anda masuk sebagai pengguna yang "memiliki" wadah lxc yang tidak terjangkau, maka perintah berikut harus membahas apa yang Anda cari ...
Ini hanya akan menjalankan perintah di atas saat Anda masuk melalui bash. Ini juga mengasumsikan bahwa bash adalah shell login. Silakan ganti nama:
LXC-CONTAINER-NAME
dengan nama wadah LXC Anda yang ingin Anda mulai.sumber
Saya telah menggunakan pendekatan yang berbeda dan ini berhasil
1º Tambahkan entri berikut di file konfigurasi wadah
CONFIG MULAI OTOMATIS
lxc.start.auto = 1 lxc.start.delay = 5
2º Buat hubungan kepercayaan antara pengguna kontainer dan dirinya sendiri di server yang sama
userlxc @ GEST-4: ~ $ ssh-keygen -t rsa Menghasilkan pasangan kunci publik / pribadi rsa. Masukkan file untuk menyimpan kunci (/home/userlxc/.ssh/id_rsa): Masukkan frasa sandi (kosong tanpa frasa sandi): Masukkan frasa sandi yang sama lagi: Identifikasi Anda telah disimpan di /home/userlxc/.ssh/id_rsa. Kunci publik Anda telah disimpan di /home/userlxc/.ssh/id_rsa.pub. Sidik jari kunci adalah: c9: b4: e1: f3: bf: a3: 25: cc: f8: bc: be: b6: 80: 39: 59: 98 userlxc @ GEST-AMENCIA-4 Gambar randomart kunci adalah: + - [RSA 2048] ---- + | | | | | o | | * + | | ES | | = * | | = o =. | | . +. +. | | oO = oo | + ----------------- +
userlxc @ GEST-4: ~ $ cat .ssh / id_rsa.pub >> .ssh / official_keys userlxc @ GEST-4: ~ $ ls -lrt .ssh / official_keys -rw-rw-r-- 1 userlxc userlxc 404 Nov 19 17:23 .ssh / official_keys
Periksa koneksi ssh, Anda harus dapat menggunakannya tanpa kata sandi userlxc @ GEST-4: ~ $ ssh userlxc @ localhost "lxc-ls --fancy"
NAMA NEGARA IPV4 IPV6 AUTOSTART
EXTLXCCONT01 STOPPED - - YA
UBUSER1404USERCONT01-test STOPPED - - NO
UBUSER1404USERLXCCONT01 STOPPED - - NO
3º Buat entri crontab di pemilik wadah
@reboot ssh userlxc @ localhost "lxc-autostart"
sumber