Історія дводенної кризи.
Четвер.
Цілий день маюсь двома речами: фігачу код і намагаюсь додзвонитись до одного товариша. Товариш не відповідає. А він мені дуже-дуже потрібний, треба у нього забрати перепаяний eBOX-2300SX щоб у п’ятницю демонструвати установку. Ближче до вечора вирішуємо з колегою що раз нас не турбують замовники то ми тихенько відкладемо демонстрацію. А код я фігачу бо вирішив переписати нормально обробку форм у web-інтерфейсі і ніяк не встигаю.
Десь у шістнадцять тридцять із тихим клацанням усе гасне - вимкнули електрику. Чекаю п’ятнадцять хвилин - нічого. Пішов, заварив чаю і сів на диван книжку читати. Потім згадав що треба б за хлібом сходити. Зібрався, пішов у ларьок за сємками^W пивом^W хлібом. Як спустився на третій поверх, побачив причину вимикання електрики. Знову МіськЕлектроМережі лічильники ставлять. Мабуть не встигли тоді. Коли до ларька залишається метрів двадцять дзвонить телефон. Колишній начальник. Щось у них там не виходить і щось вони від мене хочуть. Чи то статистику перенести чи то ще шо - слухаю у пів вуха. Поговорили ні про що.
Підходжу до ларька, а там черга! Фігасобі, двадцять перше сторіччя на дворі і черга! За хлібом! Аж троє людей стоять! Став. Поки черга просувалась ще раз із колишнім начальством переговорив. І тут наче щось перемкнулось - таким лайном звідкілясь потягнуло шо і дихати не хочеться. Наче хтось прямо в черзі отакенну купу наваляв! Пошукав поглядом джерело смердяви і не знайшов. Купив хліба і почимчикував додому. Тільки як метрів на п’ять від ларька відійшов смердява припинилась. На вході у під’їзд приклеєна об’ява про вимикання світла. Кажуть до сімнадцятої години. Сів далі книжку читати...
Ближче до вісімнадцятої світло ввімкнули. Я зачекав хвилин десять на всяк випадок і ввімкнув сервер. Знаючи що він довгенько тепер буде RAID перевіряти знову завалився на диван читати. Хвилин через тридцять глянув на індикатор - не моргає. Ввімкнув робочий комп і ноут. Щось немає інету. Пустив пінг на сервер - не пінгується. Дідько. Відкрутив допоміжний монітор, поніс у коридор і підімкнув до сервера. І знаєте що я там побачив? GRUB Error 15!
Вилаявся подумки, повідключав усі дроти і поніс сервер у кімнату, розкручувати. Розкрутив, дістав системний винт, підімкнув до робочої машини. Таблицю розділів видно - уже добре. Пустив fsck. Він мені людським голосом промовляє: "у тебе тут Ext2 і суперблок покоцаний, давай мені інший суперблок". Ext2? Я, наче, всюди ResierFS пхаю, Ext2 тільки на boot ставлю. Та тільки я цю систему без boot збирав. Винт, до речі, старезний, років йому десь шість-сім. Ладно, на тобі інший суперблок. Все одно не хаває. Пустив badblocks - ой лишенько! Та там же місця живого немає! Все, накрилася система мідним тазом. Накрились репозиторії (git, bazaar), накрився Trac для пари проектів, накрився incoming для ftp. При чому до цього не убло ніяких ознак того що винт помирає. Я його іноді перевіряв - усе було в порядку! Ну що тут поробиш, треба нову систему ставити.
Тут хочу зауважити: я давно збирався сервер перенести на Zotac ION формату ITX - та все корпусу нормального не міг підібрати. Думаю зробити сам. Ну а тут така нагода! Викрутив стару материнку, вкрутив Zotac. Підімкнув флешку, RAID. Жаль тім тільки три порти SATA, ще один винт із всяким дріб’язком не влазить. Залишив його просто так у корпусі, мо’ колись перехідник куплю. SATA/eSATA або SATA/USB.
Стартонув - все класно. Тільки pppd немає. Щоб інтернет підняти. А щоб його поставити потрібний інтернет. pkunzip.zip. Мобільним інтернетам я не довіряю, вони у мене постійно хочуть всі гроші схавать! Потім згадав - коли тільки заселялись на цю квартиру я на ноут pppd поставив щоб із ноута перевірити працездатність інтернету. Глянув у distfiles - точно, є джерельні коди! Флешкою перекинув на новий сервер, попатчив, постучав у бубен, додав сушене крило кажана, лапу василіска, розтовк у ступі, розплавив у індукційній печі, посолив, поперчив і подав до столу із rp_pppoe.so. Навіщо всі ці танці з бубном? Скажу: там система на CF. Без portage, він монтувався із сервера (покійного) по NFS. Добре, завів інтернет, поставив portage у tmpfs, поставив iptables і все таке. Запустив роздачу інтернету по квартирі. Жаль там ethernet тільки один, довелось через світч включати і аліасами рулити. Погано (тим паче світч на сто мегабіт), але що ж поробиш.
Ніч уже на дворі, а я все марафет наводю, зайвий софт видаляю (ghc, простигосподи, шланг і всякі там x-сервери). На початку першої години пропадає інтернет. От, думаю, халепа - знову десь наплужив. І так його, і так - не працює інтернет. З’єднання підіймається а пакетики не ходять! Хвилин через п’ятнадцять до мене дійшло - настав новий місяць, знялась абонентська плата і інтернет відключили, бо не заплатив. Тьху!
П’ятниця.
Прокинувся, згадав про інтернет. Треба знову іти у ларьок. Тільки так подумав - за вікном дощ як уперіщить! Сів, поснідав, книжку почитав, дощ перечекав. Пішов, купив карточку, поповнив. Пише: всьо ок, скоро включимо. На всяк випадок, згадуючи dialup від Укртелекома перепідняв інтерфейс. Немає інету. Чекаю. Проходить п’ятнадцять хвилин, немає інтернету. Пише: заблоковано. Проходить тридцять хвилин, заблоковано. Початок місяця, всіх відключило, всі поповнюють, білінг перевантажений - всяке буває. Пройшла година - інтернету немає. Дідько. Поліз на домашню сторінку за телефоном ТП. А там показано стан черги дзвінків: 20 чоловік. Супер! У них, мабуть, проблеми якісь. Передумав телефонувати, сів книжку читати.
Коли пройшло майже дві години з моменту поповнення вирішив все-таки зателефонувати. Тільки до компа - а там як раз пінг пішов! Уже цілих 2 пакети вернулись! Супер!
Ну, думаю, на всяк випадок перевірю CF з системою. Заряджаю fsck і воно мені пише про стопіцот помилок. Ладно, кажу, виправляй. Виправило, reboot. Пустив пінг. Зазвичай воно із CF завантажується секунд за десять-п’ятнадцять. Немає пінгу. Чекав хвилин п’ять. Потім вилаявся подумки і поліз знову додатковий монітор від’єднувати і нести у коридор. А встиг же уже все прибрати, дроти акуратно укласти... Під’єдную. Ой лишенько, весь екран у помилках! Навіть у консоль не пускає, каже libpam.so відсутній. Супер, хай йому грець! У мене просто руки опустились. Ну ладно. Знову все від’єднав і поніс сервер у кімнату. А інтернету-то немає! І навіть stage немає звідки витягнути. portage-то я витягнув вчора, а от stage... Перекидую із ноута джерельні коди pppd на робочий комп. Знову танці з бубном (благо уже знаю куди треба хвіст ящірки покласти і коли тертими сушеними павуками притрусити). Ура, інтернет! Витягнув stage, форматнув флешку. Перевірив заодно на badblocks - чисто. Я її беріг дуже, у r/o монтував. Ну що, справа знайома, не вчора на світ народився. Неспішно ставиться система, я сиджу читаю. Іноді підшаманюю тільки. Дійшла справа до ядра.
Робоча машинка у мене під amd64. На Atom я не захотів шістдесят чотири біта ставити, там тільки три гігабайта оперативки - нафіг. Значить кросскомпіляція. Помучив genkernel (дійшов аж до strace) - так і не зміг його заставити відмовитись від автоматичного визначення архітектури. Сильно вумний, ба’! По старинці зарядив, постійно забуваючи про ARCH=i386. Зібрав, поставив, поставив grub, все класно. Вимкнув, переставив у сервер. Ввімкнув. І як ви думаєте, що я побачив? Фігу? Не вгадали! Я побачив таке: "Switching to clocksource tsc". І все, навіть фіги немає. :(
Поліз по цих ваших інтернетах. Всі кажуть що то винуватий fbcondecor.ko. Витягнув флешку, підключив до робочого компа, mount/mount/mount/mount (воно ж там у tmpfs все, в тому числі я джерельні коди ядра), emerge gentoo-sources і все таке. Точно, fbcondecor ввімкнений. Виключив, зібрав, поставив. Переставив флешку, заванатжуюсь. І що ви думаєте я бачу? Фігу? Знову не вгадали. "Switching to clocksource tsc".
Наступних три години я цим clocksource займався. Уже все перепробував. Уже CF висмикую "на гарячу" (а шо, IDE он теж PnP підтримує, тільки ми тоді не ризикували перевіряти, коли у нас IDE був (хоча брешу, колись я так флопік "на гарячу" переключав)), уже в джерельні коди ядра поліз, порядок завантаження вивчати. По всякому виходило що це уже самий кінець і от-от мав стартувати init. І тут, на третій сторінці гугла, на якомусь форумі хтось висловлює ідею (з приводу схожої ситуації) - ядро завантажене, тільки init не стартує бо немає файлів пристроїв: null і console. Сказано - зроблено. Перевіряю дуже просто: init=/bin/bash. Ну точно, отримав шелл!. Висмикую, підключаю, монтую (уже наосліп навчився у роз’єми попадати) - точно немає пристроїв. Якийсь null завалящий - ніразу не пристрій. Ну справа знайома, mknod/mknod/reboot. Oops! А пароль-то на root я не поставив! Хе, знову init=/bin/bash і все таке... Десь о десятій вечора я зробив завершальні штрихи. Зібрав усе акуратно, поставив у коридорі. Кулери навіть виключив, воно не дуже гріється. Ну, насправді, це ще був не зовсім кінець, але о другій годині ночі я все таки закінчив.
Зато тепер на новому контролері у мене RAID видає сто мегабайт на секунду і NFS працює зі швидкістю мережі (сто мегабіт, не гігабіт - через світч же :( ). Поки з ядром маявся його конфіг "вилизав" як ніколи - навіть коли в універі не було чого робити такого чистого конфігу не отримував. Навіть про APIC/MSI не забув (а це моя найтиповіша помилка)! Все літає, все красяво. Був би хеппі-енд, якби не втратив стільки інформації :(
Ну проекти у мене всі є у dev-гілках у хомяку, так що тут я нічого не втратив. Жалко тікети по Stargazer і файли у incoming. Там було пару корисних речей.
Мораль: стабілізатор, UPS, RAID (уже давно), бекапи (на зовнішній винт, оффсайт (у банківську ячейку, як
ivan-ghandhi :)). Купити собі, шолі, VPS для git/trac?