Решение состоит в ограничении портов, которые vsftpd назначает для соединений данных стиля PASV в файле конфигурации. В файле vsftpd.conf добавьте две строки:
pasv _ min _ port = 12000
pasv _ max _ port = 12100
Затем необходимо открыть эти порты в Google Developers Console в разделе Сеть, правила брандмауэра (см. рисунок).
Можно также добавить следующую строку, чтобы переопределить IP-адрес, объявленный vsftpd в ответ на команду PASV:
pasv _ address = xxx.xxx.xxx.xxx
Внешний IP-адрес экземпляра виртуальной машины.
Я также использую порт FTP 211 вместо 21 по соображениям безопасности:
listen _ port = 211
-121--119471-
В конце концов я заставил его работать с mplayer. Оказывается, у mplayer были недопустимые значения оттенка и насыщенности. Не знаю почему, но я видел, как другие люди жаловались на это тоже. Это команда, которую я в итоге использовал:
mplayer -really-quiet -tv driver=v4l2:height=320:width=240:quality=1:hue=35:saturation=-80:brightness=99:contrast=-88:fps=8:device=/dev/video0 tv:// -vo jpeg -saturation -50 -contrast -3 &
Она сбрасывает jpegs в папку на 8fps, что достаточно для моих нужд.
Наряду с этим сценарием я запускаю сценарий, который удаляет из папки изображения старше 8 секунд. Я использовал 8 секунд, чтобы поддерживать низкое использование ЦП, так как это ценный ресурс на pi:
cd /home/pi/webcam_frames
while true; do
find . -not -newermt '-8 seconds' -delete
sleep 8;
done
И сценарий, который создает symlink к последнему изображению 10 раз в секунду.
cd /home/pi/public
sleep 2
rm -rf latest.jpg
while true; do
ln -s -f /home/pi/webcam_frames/`ls -rt /home/pi/webcam_frames | tail -n1` latest.jpg
sleep 0.1
done
Эта symlink находится в общедоступном каталоге, который доступен из браузера через nodejs:
var express = require('express'),
app = express(),
port = 8888;
app.use(express.static('/home/pi/public'));
app.listen(port);
У меня есть простая html + js страница, которая несколько раз в секунду извлекает из nodejs символьное изображение, и, таким образом, у меня есть 5-8fps видео, которое работает на каждом устройстве, которое может обрабатывать javascript.
Это уродливое решение с уродливым результатом, но это именно то, что мне нужно.
-121--243568-
ext4 - файловая система ведения журнала, и одной из основных целей ведения журнала является выживание нечистых отключений без повреждения, и, таким образом, не требует длительного fsck.
Короче говоря, файловая система ведения журнала, такая как ext3/4, записывает метаданные (по крайней мере), изменяет дважды . Сначала она записывает их в «журнал». Затем, когда это на диске, он записывает в фактические метаданные файловой системы. (Запись в журнал происходит гораздо быстрее, поскольку журнал является последовательным и не требует множества поисков. По крайней мере, на магнитных дисках - поиск штраф значительно снижен на SSD.)
Несколько дополнительных секунд, скорее всего, повтор журнала: в основном, если файловая система не демонтирована чисто, следующее монтирование или fsck
будет читать журнал и применять любые изменения, которые еще не находятся в основной файловой системе.
Короче говоря, похоже на ожидаемое поведение.
В настоящее время я настраиваю такую систему, но в Debian Stretch. И я провожу свои эксперименты на виртуальной машине, прежде чем на самом деле настрою сам физический компьютер. У меня очень похожая установка, работающая на виртуальной машине.
2 диска в зеркале zpool для /, но не для /boot. /boot находится на md0. zpool находится поверх LUKS. Использование ЭФИ.
root@zstaging:~# cat /proc/1/comm
systemd
root@zstaging:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
+-sda1 8:1 0 256M 0 part
¦ +-md0 9:0 0 256M 0 raid1 /boot
+-sda2 8:2 0 256M 0 part /boot/efi
+-sda3 8:3 0 19.5G 0 part
¦ +-disk0_crypt 253:0 0 19.5G 0 crypt
+-sda9 8:9 0 9M 0 part
sdb 8:16 0 20G 0 disk
+-sdb1 8:17 0 256M 0 part
¦ +-md0 9:0 0 256M 0 raid1 /boot
+-sdb2 8:18 0 256M 0 part
+-sdb3 8:19 0 19.5G 0 part
¦ +-disk1_crypt 253:1 0 19.5G 0 crypt
+-sdb9 8:25 0 9M 0 part
sdc 8:32 0 20G 0 disk
sr0 11:0 1 1.8G 0 rom
root@zstaging:~# zpool status
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
disk0_crypt ONLINE 0 0 0
disk1_crypt ONLINE 0 0 0
errors: No known data errors
Соответствующие файлы и настройки:
root@zstaging:~# cat /etc/fstab
UUID=648bfa4b-1b5f-480a-bb26-b3abffb4a6de /boot auto defaults 0 0
PARTUUID=1673f966-173b-4128-84d5-4e8d5810efef /boot/efi vfat defaults 0 1
root@zstaging:~# cat /etc/crypttab
disk0_crypt UUID=26194846-ba49-4e53-ab0b-857b0dad2021 none luks
disk1_crypt UUID=ef44b66a-8706-4be2-bd12-a30d40de9669 none luks
root@zstaging:~# cat /etc/initramfs-tools/conf.d/cryptroot
target=disk0_crypt,source=UUID=26194846-ba49-4e53-ab0b-857b0dad2021,key=none,rootdev
target=disk1_crypt,source=UUID=ef44b66a-8706-4be2-bd12-a30d40de9669,key=none,rootdev
set CRYPTSETUP=y in /etc/cryptsetup-initramfs/conf-hook
# vi /etc/default/grub
replace GRUB_CMDLINE_LINUX="" with GRUB_CMDLINE_LINUX="boot=zfs"
Remove quiet from: GRUB_CMDLINE_LINUX_DEFAULT
Uncomment: GRUB_TERMINAL=console
# update-initramfs -u -k all
# update-grub
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-floppy
Все отлично работает. Получите запрос на разблокировку двух дисков по одному, и вперед. Нет необходимости перечислять какие-либо элементы zfs в файле /etc/fstab. Да, initramfs и т. д. БУДУТ жаловаться на /etc/fstab, но пока все работает нормально
Я даже могу удаленно разблокировать его
# apt-get install dropbear-initramfs busybox
# vi /etc/dropbear-initramfs/authorized_keys
Paste my SSH pubkey
# chmod 400 /etc/dropbear-initramfs/authorized_keys
# update-initramfs -u
in another machine that has my SSH keys, add a custom section in ~/.ssh/config:
Host zstaging_unlock
HostName <ip_of_zstaging>
User root
HostKeyAlias zstaging_unlock
to remote unlock zstaging, from remote machine:
$ ssh zstaging_unlock
and follow prompts
ХТХ
root@a:~# cat /etc/crypttab
vda6_crypt UUID=9f420e32-0821-4cc8-a87e-59db96a12df0 none luks,discard
vdb_crypt UUID=8632fd8d-46ca-4c82-931c-6f6e04066465 none luks,discard,initramfs
root@a:~# unmkinitramfs /boot/initrd.img-5.8.0-50-generic /tmp/initramfs
root@a:~# cat /tmp/initramfs/main/cryptroot/crypttab
vda6_crypt UUID=9f420e32-0821-4cc8-a87e-59db96a12df0 none luks,discard
vdb_crypt UUID=8632fd8d-46ca-4c82-931c-6f6e04066465 none luks,discard,initramfs