Бэкап телефонов
Aug. 12th, 2008 09:09 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
По примеру
tobotras. Так долго тормозил потому, что нужно было дождаться, пока выйдет версия gammu, которая поддерживает Nokia 3109c.
В чем отличия моего сетапа от тоботрасовского:
1. Я точно знаю, что rfcomm bind для работы gammu не нужен, и точно знаю куда класть PIN
2. Телефонов бэкапится пока два (мой и жены), но если вдруг в доме появятся еще, то прописать их тоже должно быть легко. Мне очень не понравилось то, что в варианте Бориса BT-адрес телефона должен быть записан в два места - в сам скрипт и в ~/.gammurc.
3. Bluetooth на телефонах обычно включен, а вот discoverability - хрен. Поэтому использовать для обнаружения телефона hcitool, как это делает Борис - нельзя.
4. Историю изменений записной книжки хочется хранить, используя для этого минимум места. Поэтому сбэкапленная база чекинится в RCS.
\
Поэтому я написал скрипт, который читает .gammurc, и проверяет наличие телефона, адрес которого там указан, посредством sdptool search DUN. Честно сказать, не пытался разбираться, какой именно профайл использует gammu (возможно - разный для разных типов соединения), но уж DUN-то на телефоне всяко есть.
Из-за необходимости парсить .gammurc скрипт написан на perl, а не на shell.
Пользоваться этим так:
1. Настраиваем в .gammurc отдельную секцию c именем [gammuN] для каждого телефона
2. Запускаем какую-нибудь утилиту для ввода PIN (мой btpasskey или какой-нибудь bluez-gnome) и тестируем конфиг запуском gammu вручную. Заодно и pin запишется куда надо.
3. Запускаем скрипт вручную в первый раз. При первом чекине в RCS оно потребует ввести message со stdin.
Можно даже и ввести что-нибудь осмысленное. При последующих чекинах (при существующем файле ,v) вопросов уже не будет, опция -m в скрипт забита.
4. Прописываем скрипт в crontab, например каждые 15 минут.
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
В чем отличия моего сетапа от тоботрасовского:
1. Я точно знаю, что rfcomm bind для работы gammu не нужен, и точно знаю куда класть PIN
2. Телефонов бэкапится пока два (мой и жены), но если вдруг в доме появятся еще, то прописать их тоже должно быть легко. Мне очень не понравилось то, что в варианте Бориса BT-адрес телефона должен быть записан в два места - в сам скрипт и в ~/.gammurc.
3. Bluetooth на телефонах обычно включен, а вот discoverability - хрен. Поэтому использовать для обнаружения телефона hcitool, как это делает Борис - нельзя.
4. Историю изменений записной книжки хочется хранить, используя для этого минимум места. Поэтому сбэкапленная база чекинится в RCS.
\
Поэтому я написал скрипт, который читает .gammurc, и проверяет наличие телефона, адрес которого там указан, посредством sdptool search DUN. Честно сказать, не пытался разбираться, какой именно профайл использует gammu (возможно - разный для разных типов соединения), но уж DUN-то на телефоне всяко есть.
Из-за необходимости парсить .gammurc скрипт написан на perl, а не на shell.
#!/usr/bin/perl my $workdir="$ENV{HOME}/backup/phones"; my $config="$ENV{HOME}/.gammurc"; chdir $workdir or die "Cannot chdir to $workdir:$!\n"; # Читаем конфиг open F,"<",$config or die "Cannot open .gammurc for user $ENV{LOGNAME}:$!\n"; my $section; my $address; my $comment; my %phones=(); while (<F>) { $section = $1 if /\[\s*gammu(\w+)\s*\]/ ; $phones{$section}=$1 if /port\s*=\s*([0-9a-fA-F:]{17})\s*$/; } close F; PHONE: while (my($id,$address) = each %phones) { print STDERR "checking phone $id btaddr $address\n"; # Проверяем, что указанный телефон был сбэкаплен менее суток назад my $stamp= -M "phone$id.backup"; next PHONE if (defined $stamp &&$stamp<1); # Проверяем, что указанный телефон виден по bluetooth my @data=`sdptool search --bdaddr $address DUN`; print join("\n",@data),"\n"; next PHONE if !grep (/Channel/, @data); system "gammu $id backup phone$id.tmp -yes"; system "iconv -f UCS-2BE -t utf-8 phone$id.tmp >phone$id.backup"; unlink "phone$id.tmp" if $?>>8 == 0; system "ci -l -m. phone$id.backup"; }
Пользоваться этим так:
1. Настраиваем в .gammurc отдельную секцию c именем [gammuN] для каждого телефона
2. Запускаем какую-нибудь утилиту для ввода PIN (мой btpasskey или какой-нибудь bluez-gnome) и тестируем конфиг запуском gammu вручную. Заодно и pin запишется куда надо.
3. Запускаем скрипт вручную в первый раз. При первом чекине в RCS оно потребует ввести message со stdin.
Можно даже и ввести что-нибудь осмысленное. При последующих чекинах (при существующем файле ,v) вопросов уже не будет, опция -m в скрипт забита.
4. Прописываем скрипт в crontab, например каждые 15 минут.