Рубрика:
Администрирование /
Администрирование
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Алексей Барабанов
MS Windows XP SP3, или Много шума из ничего
Третий пакет обновлений для MS Windows XP напоминает второй том «Мертвых душ»: его пишут где-то там, за границей, его все ждут, вспоминая предыдущий вариант, о нем уже сочиняют небылицы...
Предыстория
Не меняются только самые мудрые и самые глупые.
Конфуций
Прошло уже несколько лет после даты выхода последнего кумулятивного пакета обновлений для MS Windows XP, известного как Service Pack 2. И вот теперь, когда общее число выпущенных обновлений перевалило за сотню, все с нетерпением ожидают пакета обновлений с номером 3. Официально в документе «Windows Service Pack Road Map» Microsoft предупреждает, что SP3 появится не ранее 2007 года. Но все равно периодически приходится опровергать слухи о том, что SP3 уже готов к загрузке. И, несмотря на возражения Microsoft, самодельный SP3 можно загрузить с различных ресурсов, например с TheHotfix.Net, как обещают после предварительной регистрации в форуме.
Настораживает, что на Softpedia указан объем этого обновления в 344 Мб, а это весьма много, да и ссылки для загрузки не работают. Еще стоит отметить, что согласно [2] источником явился некий анонимный, но очень добрый сотрудник Microsoft. Почему-то все добрые люди такие скромные...
Есть и отечественный вариант этого «чуда»: http://www.winall.ru/xp/sp/sp3. Он включает 30 заплаток и имеет объем 37,7 Мб. Ссылки тоже «висят», то есть загрузить SP3 ссайта невозможно. Но мне довелось получить это примитивное создание на очередном диске, купленном на одном московском программном «развале». Самое смешное, что все файлы переименованы в Pre_SP3_by_Winall_*.exe. Иначе говоря, до установки очень трудно оценить, что же ставится – какие-то патчи от Microsoft или просто набор троянов.
Ну и последний из существующих суррогатов SP3, обнаруженный в Интернете, откровенно носит сомнительный характер и называется GAME EDITION 2006.Мне удалось его загрузить c http://www.wild-soft.org/2006/08/24/windows_xp_sp3_pre_game_edition_2006.html. Но это был, скажем так, первый сайт с более-менее приличным содержанием. Так как все остальные имели контент из категории «только для взрослых». Этот набор имеет объем 118 Мб, что близко к размеру реального SP3, но поскольку в 118 Мб входит не SP3, а вся укороченная MS Windows XP в варианте «только для игрушек», то в моей практике такое изделие игровой инженерии вряд ли кого заинтересует.
Из всего вышесказанного возникает больше вопросов, чем приходит ответов. Судя по всему, SP3 уже практически готов. И если не загадочные добряки из Microsoft, то какие-нибудь шустрые сетевые «гуру» непременно его предложат невзыскательной публике и попытаются получить на этом выгоду или иное преимущество. Так в чем же дело? С чем связано нежелание Microsoft выпустить SP3? И есть ли какие-нибудь технические проблемы в данном вопросе? Попробуем разобраться.
Обновление до текущего состояния SP3
Мудрец стыдится своих недостатков, но не стыдится исправлять их.
Конфуций
Попробуем получить SP3 самостоятельно. Для этого воспользуемся диском, предназначенным для автоматической установки MS Windows XP SP2, созданным так, как описано в статьях [7]. Из процесса установки удалим для чистоты эксперимента все дополнительные компоненты, кроме собственно дистрибутива, и создадим имидж:
# ./mkwinxp cd_sp2_only
Warning: creating filesystem that does not conform to ISO-9660.
Warning: creating filesystem with (nonstandard) Joliet extensions
but without (standard) Rock Ridge extensions.
It is highly recommended to add Rock Ridge
mkisofs 2.01 (i686-suse-linux)
re-directing all messages to mkwinxp-9838.log
|
Окончательно образ диска занял 447 Мб (здесь и далее примем для простоты 1 Мб равным 1 000 000 байтов, или 1000 Кб, в зависимости от контекста). Воспользуемся результатом для установки рабочей станции под VMWare. После завершения процесса инсталляции в полученной виртуальной машине проверим несколько важных в дальнейшем точек.
На рис. 1 видно, что уровень обновления системы – SP2, директория «C:\Program Files\WindowsUpdate» пуста, и внутри ветки реестра «HKLM\SOFTWARE\Microsoft» отсутствует раздел Updates. Запомним это. И приступим к обновлению системы до текущего уровня рекомендованных обновлений.
Рисунок 1. MS Windows XP SP2 после установки
Для этого воспользуемся локальным сервисом SUSfL. Установка и настройка SUSfL подробно описана в [8]. Добавим только одну поправку. Во всех статьях, описывающих установку SUSfL, неверно трактуется переменная localCabPool. Дело всё в том, что в исходных текстах содержится ошибка – название директории content иногда употребляется в виде литеральной константы, то есть localCabPool должен оканчиваться именно на «content» и никак иначе.
# grep localCabPool sus_consts.py
#localCabPool is path with trailing slash to your pool, where updates will be stored
###localCabPool = "/var/www/sus.int/content/"
localCabPool = "/srv/winupdate/www/content/"
|
Естественно, надо учесть в настройках, что собирать обновления такой сервер должен для MS Windows XP Professional русской локализации. Перед обновлением рабочей станции убедимся, что сам SUSfL содержит все последние заплатки.
# cd /srv/winupdate/www/autoupdate
# python sus_sync.py
Dictionaries up to date
Need to download 0 Mb
|
Следовательно, если сейчас указать SUSfL как сервер обновлений, то система автоматически должна будет определить все недостающие заплатки и загрузить их из SUSfL на рабочую станцию. Так и сделаем.
Рисунок 2. Установка SUSfL в качестве сервера обновления
Загрузим настройку реестра из http:\\winupdate.office.localnet\winupdate.reg (см. рис. 2), что назначит SUSfL с адресом winupdate.office.localnet как локальный сервер обновлений, и перезапустим службу автоматического обновления на рабочей станции, набрав в окне консоли:
>net stop wuauserv
>net start wuauserv
Загрузку обновлений производит служба BITS, которая по умолчанию стартует автоматически. Если это не так, то надо её запустить командой «net start bits». Подождем, пока служба BITS скачает доступные обновления на рабочую станцию и предложит их установить. Не надо забывать, что BITS производит закачку в паузах сетевой активности, то есть надо на некоторое время оставить эту станцию в покое. Как только система приступит к загрузке обновлений, в правом нижнем углу появится иконка, всплывающая подсказка которой будет сообщать о степени готовности. После завершения загрузки сохраним полученные обновления, так как после установки они будут уничтожены. Для этого активируем меню процесса «Автоматическое обновление», но не будем подтверждать его, пока все папки из «C:\Program Files\WindowsUpdate\wuaudnld.tmp\cabs» не скопируются в рабочую директорию, например в G:\SP3-from-win (см. рис. 3).
Рисунок 3. Обновления загружены и готовы к установке
После того как копирование завершится, разрешим установку загруженных заплаток. Таким образом, во-первых, получим правильный комплект обновлений и, во-вторых, проверим, что все обновления действительно подходят к нашему дистрибутиву. После установки обновлений будет предложено перегрузить рабочую станцию. Со всем согласимся и дождемся следующей загрузки станции (см. рис. 4).
Рисунок 4. Подготовка дерева дистрибутива после обновления до SP3
Откроем редактор реестра и найдем там ветку «HKLM\SOFTWARE\Microsoft\Updates\Windows XP\SP3». Смотрите-ка, вот и SP3! Значит, все-таки есть? Экспортируем поскорее это «чудо», например в SP3-from-win.reg, в ту же директорию, где ранее были сохранены папки с файлами обновлений.
Итак, теперь в нашем распоряжении есть набор необходимых обновлений, чтобы получить SP3 в текущем состоянии, и сохраненная ветка реестра, которая позволит проконтролировать факт установки SP3. Последнее подготовительное действие, что целесообразно выполнить прямо в MS Windows, это подготовить рабочее дерево дистрибутивных файлов для интеграции. Для этого просто скопируем содержимое установочного диска с MS Windows XP SP2 в заранее подготовленную для этого директорию на файловом сервере, которую подключим как G:\IMG (см. рис. 4).
Подготовка файлов для включения в дистрибутив
Тот, кто, обращаясь к старому, способен открывать новое, достоин, быть учителем.
Конфуций
Теперь, после того как все вспомогательные файлы собраны, надо выбрать способ включения SP3 в существующий дистрибутив. Можно просто их все устанавливать аналогично тому, как происходит установка обычных приложений. Но можно их интегрировать внутрь. Предположим, что интеграция позволит получить нечто аналогичное кумулятивному SP2 и, как минимум, сэкономить объем. Кстати, об объеме – подсчитаем его. Все дальнейшие манипуляции будем выполнять в терминальном режиме на Samba-сервере. Пусть корень сетевого ресурса /srv/smb/public. Тогда папки обновлений размещаются в /srv/smb/public/SP3-from-win, а все содержимое исходного дистрибутивного диска в ../IMG относительно папок с заплатками. Все терминальные команды будут исполняться из /srv/smb/public/SP3-from-win.
Сначала составим список всех файлов обновлений:
# find . -name "*.exe" | awk -F/ '{print $3}' | awk -F. '{print $1}' >real-updates.txt
Затем скопируем их в корень рабочей директории:
# for i in $(cat real-updates.txt) ; do find . -name "$i.exe" -exec cp -v '{}' $i.exe \; ; done
`./com_microsoft.WindowsXP-KB925486-x86-189032/WindowsXP-KB925486-x86-RUS.exe' -> `WindowsXP-KB925486-x86-RUS.exe'
`./com_microsoft.873333_XP_SP3_WinSE_143087/WindowsXP-KB873333-x86-RUS.exe' -> `WindowsXP-KB873333-x86-RUS.exe'
... пропущено ...
`./com_microsoft.WindowsXP-KB922616-x86-185856/WindowsXP-KB922616-x86-RUS.exe' -> `WindowsXP-KB922616-x86-RUS.exe'
Файлы копируются, а не перемещаются. Это позволит в случае неудачи повторить все шаги снова. Подсчитаем суммарный объем и число заплаток:
# du -c *.exe | grep "total\$"
131128 total
# wc -l real-updates.txt
80 real-updates.txt
|
Итого 131 Мб в 80 файлах. Здесь уже можно оценить степень адекватности всех самодельных SP3, которые предлагаются в Интернете. Еще немного арифметики: итак, всего 131 Мб апдейтов, а размер исходного имиджа:
# du -c ../IMG | grep "total\$"
448712 total
|
Если просто доложить все апдейты в дистрибутив, то получится 579 Мб. Но, конечно, правильнее будет их интегрировать. Для этого нужно подготовить соответствующие скрипты и для автоматического обновления в ходе установки, и для интеграции. Но нужно еще собрать информацию о допустимых ключах запуска заплаток. Но на сервере SUSfL она есть, но для того чтобы извлечь ее в автоматическом режиме, подправим немного исходники SUSfL:
# diff -Naur admin.py.orig admin.py
--- admin.py.orig 2006-08-21 13:57:32.000000000 +0400
+++ admin.py 2006-08-21 16:04:24.000000000 +0400
@@ -155,7 +155,10 @@
else:
dtstr = dts[0] + ' - ' + dts[len(dts)-1]
print '<tr bgcolor="%s"><td valign="top"><input type="checkbox" name="%s" value="1"%s></td><td><b>'%(rowcolor,sPublisherPlusName,cstr)
- req.write('<div title="%s">%s, %s</div>'%(sPublisherPlusName, vItemDetails[conFieldItemStringsTitle].encode('utf8'), dtstr))
+### req.write('<div title="%s">%s, %s</div>'%(sPublisherPlusName, vItemDetails[conFieldItemStringsTitle].encode('utf8'), dtstr))
+ req.write('<div title="%s">'%(sPublisherPlusName))
+ print row+1, ' '
+ req.write('%s, %s</div>'%(vItemDetails[conFieldItemStringsTitle].encode('utf8'), dtstr))
# req.write(' ('+repr(approved[sPublisherPlusName])+')')
print '</b>'
req.write(vItemDetails[conFieldItemStringsDescription].encode('utf8'))
@@ -169,7 +172,7 @@
req.write(' <a href="%s">Eula</a>'%urle)
print '<br>'
- req.write('Applies to: ' +string.join(applies, ',').encode('utf8'))
+ req.write('Applies to: ' +string.join(applies, ',\n').encode('utf8'))
print '</td></tr>'
row = row + 1
|
Приведенный текст надо использовать как патч внутри каталога autoupdate, содержащегося в SUSfL. Эта правка носит косметический характер и приводит к тому, что в текстовом формате html имя файла обновления и все его характеристики, в том числе и ключи запуска, размещаются на одной строке, что в свою очередь облегчает обработку текстовыми утилитами.
Прочтем список всех обновлений, размещенных на сервере, и сохраним его в файле:
# wget http://winupdate.office.localnet/autoupdate/admin.py -O all-updates-from-sus.html
--00:27:52-- http://winupdate.office.localnet/autoupdate/admin.py
=> `all-updates-from-sus.html'
Resolving winupdate.office.localnet... done.
Connecting to winupdate.office.localnet[192.168.0.1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
[ <=> ] 396,889 3.82M/s
00:27:54 (3.82 MB/s) - `all-updates-from-sus.html' saved [396889]
|
Извлечем из текста все возможные обновления вместе с ключевой информацией:
# grep XP SP2 all-updates-from-sus.html | awk 'BEGIN{FS="href=\""}{print $2}' >all-updates.txt
Теперь в all-updates.txt содержатся все доступные обновления и их ключи, что позволит составить командные файлы для полного обновления и интеграции в автоматическом режиме с помощью следующей программы:
#!/bin/sh
SUSLIST=all-updates-from-sus.html
REAL=real-updates.txt
# создадим командные файлы для обновления и интеграции
U=update.cmd
UO=update-only.cmd
I=integrate.cmd
for i in $U $UO $I ; do
echo -e "@echo off\r" >$i
done
P="G:\IMG"
RP="/srv/smb/public/IMG"
mkdir -p $RP
chmod ugo+w -R $RP
UOP="$RP/\$OEM\$/\$1/InstData"
mkdir -p $UOP
# список известных исключений
EL="WindowsXP-KB885250-x86-RUS.exe WindowsXP-KB885835-x86-RUS.exe \
WindowsXP-KB887742-x86-RUS.exe WindowsXP-KB888113-x86-RUS.exe \
WindowsXP-KB890047-x86-RUS.exe WindowsXP-KB890175-x86-RUS.exe \
WindowsXP-KB867282-x86-RUS.exe Windows-KB913433-x86-RUS"
n=1
for i in $(cat $REAL) ; do
echo -----$n-------$i---------------
T=$(grep "$i" $SUSLIST | grep "SP2")
n=$((n+1))
if [ "1$T" == "1" ] ; then
echo ====================ERROR!!!!=================
else
T=$(echo "$T" | awk 'BEGIN{FS="switches: "}{print $2}' | awk -F, '{print $1}')
echo -e "echo integration $i running...\r\n$i.exe ?
$T\r\necho done\r" >>$U
# проверим на совместимость
j=$(find . -name "$i.exe" | head -n 1)
k=$(strings "$j" | grep "SFX_CAB_EXE")
# удалим исключения
m=$(echo $EL | grep "$i")
[ "1$m" == "1" ] || k=""
if [ "1$k" == "1" ] ; then
echo -e "echo integration $i running...\r\n$i.exe $T\r\necho done\r" >>$UO
cp -v $i.exe $UOP
else
echo -e "echo integration $i running...\r\n$i.exe /q /integrate:$P\r\necho done\r" >>$I
#echo "pause" >>$I
fi
fi
done
for i in $U $I ; do
echo -e "pause\r" >>$i
done
cp -v $UO $UOP
exit
Эта программа в ходе своей работы создает три командных файла:
- update.cmd – для использования в дистрибутиве, чтобы установить заплатки как обычные приложения;
- integrate.cmd – для интеграции обновлений в дерево файлов дистрибутива;
- update-only.cmd – для установки тех обновлений, которые нельзя интегрировать. Список исключений определен опытным путем.
Все командные файлы строятся примерно одинаковым образом и состоят из последовательных запусков заплаток с ключами.
Например, integrate.cmd начинается следующими строками:
# head -n 7 integrate.cmd
@echo off
echo integration WindowsXP-KB925486-x86-RUS running...
WindowsXP-KB925486-x86-RUS.exe /q /integrate:G:\IMG
echo done
echo integration WindowsXP-KB873333-x86-RUS running...
WindowsXP-KB873333-x86-RUS.exe /q /integrate:G:\IMG
echo done
|
Дистрибутив с интегрированным SP3
Достойный человек не идет по следам других людей.
Конфуций
Запустим G:\SP3-from-win\integrate.cmd на рабочей станции MS Windows XP и выполним интеграцию обновлений в дистрибутивный набор G:\IMG (см. рис. 5).
Рисунок 5. Процесс интеграции обновлений
Дождавшись завершения, проверим результат уже снова в консоли Samba-сервера:
# du -c ../IMG | grep "total\$"
623816 total
|
Получилось 623 Мб, что на 44 Мб больше, чем было бы, если просто разместить исходные обновления в виде установочных файлов, для того чтобы они отработали в процессе инсталляции. На 131 Мб исходных файлов 44 Мб «оверспейса» составляет 30%. Пока воздержимся от критики и проверим, как полученный дистрибутив с SP3 будет ставиться в автоматическом режиме.
Соберем на основе полученного набора файлов установочный диск и произведем с него установку под VMWare. Главное, не забыть подключить установку тех заплаток, которые не были интегрированы и должны ставиться как приложения. Для этого можно, например, включить текст update-only.cmd в GuiRunOnce.cmd.
Процесс установки ничем не отличается от ранее произведенного и потому не заслуживает комментариев. После завершения проверим важные для нас контрольные точки.
Как видно на рис. 6, система указывает на соответствие SP2, каталог для сетевых апдейтов пуст, но в реестре присутствует ветка «HKLM\SOFTWARE\Microsoft\Updates\Windows XP\SP3», что свидетельствует о произведенном в ходе инсталляции наложении заплаток.
Рисунок 6. MS Windows XP с текущим SP3 после установки
И тут самым важным становится вопрос о том, насколько интегрированные заплатки соответствуют тем, что были поставлены из сети. Чтобы выяснить это, снова экспортируем указанную ветку реестра, но уже в файл SP3-integrated.reg.
Дабы избежать бинарного сравнения, воспользуемся простенькой программкой для преобразования полученных файлов в текстовый формат:
# cat winreg2txt
#!/usr/bin/perl
# преобразование winregistry в ascii файл
$i=1; $n=0;
while(read(STDIN,$j,1)) {
if( $n > 1 ){
if( $i == 1){ $i=0; print $j; }else{ $i=1; }
}
$n++;
}
И теперь получим из каждой сохраненной ветки реестра список установленных заплаток:
# ./winreg2txt <SP3-from-win.reg | grep "\\SP3\\\\" | grep -v Filelist >SP3-from-win.reg.txt
# ./winreg2txt <SP3-integrated.reg | grep "\\SP3\\\\" | grep -v Filelist >SP3-integrated.reg.txt
Осталось только сравнить их:
# diff -s SP3-integrated.reg.txt SP3-from-win.reg.txt
Files SP3-integrated.reg.txt and SP3-from-win.reg.txt
are identical
|
Ну вот! Что и требовалось получить. Теперь ясно, что можно не рыскать по Интернету в поисках недостоверных и самодельных вариантов Windows XP SP3.
В любой момент свой SP3 можно приготовить за полчаса или за пару часов, если считать время на установку исходной MS Windows XP SP2.
Здесь раскрою секрет появления списка исключений. Эти заплатки не «хотели» интегрироваться и терялись после установки проверочной системы с SP3.
Проверку на соответствие уровню текущих обновлений можно проводить как с помощью сравнения экспортированной ветки реестра, так и путем подключения к локальному SUSfL для обновления. Но второй путь занимает больше времени, как и способ ручного прохождения интеграции каждой заплатки.
Теперь вы знаете, что делать, если попадется такой «неуживчивый» апдейт, пока компания Microsoft не соизволит выпустить настоящее обновление версии 3 для MS Windows XP.
Выводы
Единственная настоящая ошибка – не исправлять своих прошлых ошибок.
Конфуций
Тут можно бы и закончить. Главный вывод: SP3 – не проблема, уже есть. Но давайте снова вернемся к подсчетам размеров.
Исходный диск с SP2 занимал 447 Мб, что оставляло примерно 290 Мб для размещения приложений, использованных в процедуре автоустановки, если не менять носитель на DVD. Дистрибутив с интегрированным SP3 занимает уже 623 Мб, что оставляет всего 114 Мб. Это недопустимо мало! Получается, если набор обновлений доложить в виде установочных файлов, то останется 159 Мб. Не бог весть что, но лучше, чем в случае с интеграцией заплаток в дерево дистрибутива. По крайней мере в этот объем можно уместить хотя бы OpenOffice с парочкой сетевых приложений от Mozilla Foundation.
Теперь можно предположить, чем вызвано нежелание Microsoft торопиться с SP3.
«Нам», системным администраторам, работающим с GNU/Linux, не привыкать к периодическим и объемным апдейтам. Чем их больше, и чем чаще они выходят, тем выше уровень сервиса дистрибуторов. И GNU/Linux легко «выходит» на объемы заплаток в 1 Гб. Например, openSUSE через пару месяцев после выпуска требует именно такого объема апдейтов. Более того, нет никаких проблем, чтобы включить эти апдейты прямо в установочный диск. И при этом объем дистрибутива не увеличится сколько-нибудь существенно.
А вот в модели проприетарной дистрибуции MS Windows все гораздо хуже.
Выход SP2 увеличил размер дистрибутива MS Windows XP, и выпуск SP3 тоже, скорее всего, сделает дистрибутив еще более объемным. И тем самым вплотную пододвинет его к границе CD-носителя.
Пугает ли это тех, кто привык к поставкам GNU/Linux на DVD или набору CD, – нет!
Но для дистрибуции универсальной системы MS Windows это не только психологический барьер получить многодисковый дистрибутив MS Windows, но и барьер совместимости, так как после этого огромное число компьютеров, оснащенных только CD-приводом, смогут использовать дистрибутив единого образца, если он будет выпущен на DVD.
Еще одна проблема заключается в увеличении «веса» без увеличения стоимости. С одной стороны, появление SP2 было оправдано увеличением функциональности, а вот для SP3 такой лазейки пока, вероятно, нет. И получается, что немотивированное увеличение объема является следствием несовершенства выбранных форматов, которые не могут обеспечить жизненный цикл этой операционной системы.
Согласно [2] инженеры Microsoft отложили выпуск Service Pack 3 до выхода Windows Vista. Можно предположить, что часть новых стандартов среды Vista в целях совместимости придется портировать в ранее выпущенные системы. И это очень вовремя возникшая причина станет рациональным оправданием для добавления очередных объемов к дистрибутиву MS Windows XP.
- Windows Service Pack Road Map. Last Updates: March, 7, 2006 г. – http://www.microsoft.com/windows/lifecycle/servicepacks.mspx.
- «Руководство Microsoft предупреждает: В сети выложили фальшивый Windows XP SP3». 17 октября 2005 г. – http://www.securitylab.ru/news/241191.php.
- The Hotfix Forums – http://www.thehotfix.net/forums/index.php.
- Softpedia: Windows XP Unofficoal TheHotfix.Net Pack – http://www.softpedia.com/get/System/OS-Enhancements/Windows-XP-Service-Pack-3-Preview.shtml.
- Microsoft Windows XP Service Pack 3 – http://www.winall.ru/xp/sp/sp3.
- Windows XP SP3 Pre GAME EDITION 2006 – http://www.wild-soft.org/2006/08/24/windows_xp_sp3_pre_game_edition_2006.html.
- Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 1. //Системный администратор, №4, 2005 г. – С. 11-15;
Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 2. //Системный администратор, №5, 2005 г. – С. 54-58;
Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 3. //Системный администратор, №6, 2005 г. – С. 25-31;
Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникейщика. Часть 4. //Системный администратор, №7, 2005 г. – С. 46-47;
- Кирилл Малеванов. Установка локального Windows Update сервера под Unix. 2004 г. – http://www.malevanov.spb.ru/freebsd/winupdate.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|