1. Python / Говнокод #15833

    −96

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    srp_base64_table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./"
    
    def srpb64decode(s):
        ints = [srp_base64_table.index(c) for c in s]
        pad = len(ints) % 4
        if pad != 0:
            pad = 4 - pad
        ints = [0 for i in range(0, pad)] + ints
        notleading = False
        buf = []
    
        pos = 0
        while pos < len(ints):
            b = (ints[pos] << 2) | ((ints[pos+1] & 0x30) >> 4)
            if notleading or b != 0:
                buf.append(b)
                notleading = True
            b = ((ints[pos+1] & 0x0f) << 4) | ((ints[pos+2] & 0x3c) >> 2)
            if notleading or b != 0:
                buf.append(b)
                notleading = True
            b = ((ints[pos+2] & 0x03) << 6) | ints[pos+3]
            if notleading or b != 0:
                buf.append(b)
                notleading = True
            pos += 4
    
        return bytes(buf)
    
    def srpb64encode(b):
        pos = len(b) % 3
        b0 = 0
        b1 = 0
        b2 = 0
        notleading = False
        buf = ""
    
        if pos == 1:
            b2 = b[0]
        elif pos == 2:
            b1 = b[0]
            b2 = b[1]
    
        while True:
            c = (b0 & 0xfc) >> 2
            if notleading or c != 0:
                buf += srp_base64_table[c]
                notleading = True
            c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4)
            if notleading or c != 0:
                buf += srp_base64_table[c]
                notleading = True
            c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6)
            if notleading or c != 0:
                buf += srp_base64_table[c]
                notleading = True
            c = b2 & 0x3f
            if notleading or c != 0:
                buf += srp_base64_table[c]
                notleading = True
            if pos >= len(b):
                break
            b0 = b[pos]
            b1 = b[pos + 1]
            b2 = b[pos + 2]
            pos += 3
    
        return buf

    Кодирование и декодирование блобов для openssl SRP.

    А я построю свой диснейленд с блекджеком и шлюхами! (c) тот, кто пилил SRP в openssl

    Запостил: bormand, 23 Апреля 2014

    Комментарии (153) RSS

    • Сишный оригинал (авторское форматирование сохранено):
      static int t_fromb64(unsigned char *a, const char *src)
      	{
      	char *loc;
      	int i, j;
      	int size;
      
      	while(*src && (*src == ' ' || *src == '\t' || *src == '\n'))
      		++src;
      	size = strlen(src);
      	i = 0;
      	while(i < size)
      		{
      		loc = strchr(b64table, src[i]);
      		if(loc == (char *) 0) break;
      		else a[i] = loc - b64table;
      		++i;
      		}
      	size = i;
      	i = size - 1;
      	j = size;
      	while(1)
      		{
      		a[j] = a[i];
      		if(--i < 0) break;
      		a[j] |= (a[i] & 3) << 6;
      		--j;
      		a[j] = (unsigned char) ((a[i] & 0x3c) >> 2);
      		if(--i < 0) break;
      		a[j] |= (a[i] & 0xf) << 4;
      		--j;
      		a[j] = (unsigned char) ((a[i] & 0x30) >> 4);
      		if(--i < 0) break;
      		a[j] |= (a[i] << 2);
      
      		a[--j] = 0;
      		if(--i < 0) break;
      		}
      	while(a[j] == 0 && j <= size) ++j;
      	i = 0;
      	while (j <= size) a[i++] = a[j++];
      	return i;
      	}
      Ответить
    • И оригинал энкодера:
      static char *t_tob64(char *dst, const unsigned char *src, int size)
      	{
      	int c, pos = size % 3;
      	unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0;
      	char *olddst = dst;
      
      	switch(pos)
      		{
      	case 1:
      		b2 = src[0];
      		break;
      	case 2:
      		b1 = src[0];
      		b2 = src[1];
      		break;
      		}
      
      	while(1)
      		{
      		c = (b0 & 0xfc) >> 2;
      		if(notleading || c != 0)
      			{
      			*dst++ = b64table[c];
      			notleading = 1;
      			}
      		c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4);
      		if(notleading || c != 0)
      			{
      			*dst++ = b64table[c];
      			notleading = 1;
      			}
      		c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6);
      		if(notleading || c != 0)
      			{
      			*dst++ = b64table[c];
      			notleading = 1;
      			}
      		c = b2 & 0x3f;
      		if(notleading || c != 0)
      			{
      			*dst++ = b64table[c];
      			notleading = 1;
      			}
      		if(pos >= size) break;
      		else
      			{
      			b0 = src[pos++];
      			b1 = src[pos++];
      			b2 = src[pos++];
      			}
      		}
      
      	*dst++ = '\0';
      	return olddst;
      	}
      Сорри за простыню ;(
      Ответить
    • Классический вариант сишного "падсибя". Пытаясь спортировать это гавно, понимаешь, каким огромным шагом вперед была стандартная библиотека сишарпов и питонов.
      Ответить
    • Простите, а чем хуже import base64?
      Ответить
      • Спроси у автора этого прыщеговна. Там какой-то другой base64, если сможешь понять какой - дам печеньку. У меня пока тесты не проходят.
        Ответить
    • Стандартная библиотека пистона?
      Ответить
      • Не, это я набайтоёбил на основе исходниклв из опенссл (см. выше) по просьбе анонимба.

        Там в модуле srp вообще внезапное бейс64 используется - таблица символов совсем другая, и паддинг слева(!). Причем лишние ведущие нули отбрасываются. Видимо числа в таком формате компактнее хранятся...
        Ответить
        • лишние ведущие нули = ascii '0' в base64
          Ответить
          • Ну только не в base64, а в этом говне. В настоящем base64 0 обозначен буквой A.
            Ответить
    • Это Wct с расширениями GNU?
      Ответить
    • One word: bytearray.
      Ответить
      • bytearray?
        Ответить
        • > The bytearray type is a mutable sequence of integers in the range 0 <= x < 256
          Вместо buf напрашивается его использовать.
          Ответить
          • Спасибо, буду знать.
            Ответить
          • На cpython они равнозначны, на каких-то других реализациях может выскочить О(n**2). Кстати, а почему нет unicodearray?
            Ответить
            • Я тоже видел в доках, что конкатенация для строк оптимизирована. Но на практике я вижу совсем другое: http://ideone.com/4CtQHQ
              Ответить
              • Ну всего в 2 раза разница, это явно не O(n^2).
                Ответить
                • А так - http://ideone.com/0NKcAt ?
                  Ответить
                  • Вот тут асимптотику получше видно: http://ideone.com/TIfnNn

                    Похоже на что-то типа O(N*log(N))... Или я туплю?
                    Ответить
                    • Вот ещё вариант с list. Причем у меня на компьютере он получается даже (немного) быстрее, чем bytearray. На Ideone - чуть медленнее.
                      http://ideone.com/3bBJT9

                      Так что отвечаю на вопрос s-a--m: используй list в качестве unicodearray.
                      Ответить
                      • Это не совсем то.
                        Видишь ты код с bytes += bytes2. Если у тебя это где-то начнет выдавать плохую асимптотику, заменяешь bytes на bytearray и все заебись. А теперь вопрос - почему не сделать такое же для юникода?

                        Плюс в тройке bytes должен вылететь сразу, когда ты попытаешься добавить туда что-нибудь другое, например, юникод, а списке - когда джойнить будешь, и по исключению хуй поймешь где это произошло.
                        Ответить
                    • Бонус: ленивая генераторная версия. http://ideone.com/ukkuG4
                      Ответить
                • хм... чтобы выявить сложность, надо изменять входной размер (тут фиксированный 1024) и смотреть изменение времени работы в рамках ОДНОЙ реализации, сейчас понятно только что строки медленнее на 1024 элементах при добавлении по одному байту.
                  Ответить
              • > конкатенация для строк оптимизирована
                как оптимизирована? можно ссылку?
                строки в питоне иммутабельные, как можно оптимизировать их сложение по сравнению с деструктивным буфером?
                Ответить
                • https://docs.python.org/2.7/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
                  Внизу, где Notes, пункт 6.

                  В третьем питоне такого примечания нет (чего я не знал), там прямо сказано: Concatenating immutable sequences always results in a new object.
                  Ответить
                  • А как именно это сделано?
                    Ответить
                    • http://hg.python.org/cpython/file/4f79c3827adc/Python/ceval.c#l1533
                      http://hg.python.org/cpython/file/4f79c3827adc/Python/ceval.c#l4779
                      Ответить
                      • Я имею в виду

                        str = 'a'
                        str2 = str
                        str += 'b'

                        Чтобы str2 было 'a', а str=ab. Оно проверяет количество ссылок на объект? Оригинально, как лишп, прямо.

                        А что оно там делает, если 2 ссылки?
                        Ответить
    • Кстати, код вообще работает? Срез от строки - это строка, так что в b0-b2 сразу же оказывается строка, и b0 & 3 кидает TypeError.
      Ответить
      • Код работает, тесты проходит. Индексирование байтстринга на третьепитоне дает целое число.
        Ответить
        • Понятно. Меня просто напрягло, что srp_base64_table - это строка (а не bytes).
          Ответить
          • Да, кстати, борманд забыл указать для какой это ветки.
            Ответить
    • Почистил таки. http://ideone.com/ZSeIys

      Сравните, где лучше читается алгоритм - в версии на си или моей на питоне?
      Ответить
      • Это ахуенно :)
        Ответить
        • Курл будешь компилить?
          Ответить
          • in progress...

            Там, как оказалось, тот еще квест ;) В лучших традициях прыщеблядства, как ты его называешь.

            Потом на форуме туториал отпишу в отдельной теме, может кому-то еще пригодится.
            Ответить
            • Ну это не я, это еще, кажется, с лора пошло. ПРЫЩЕКВЕСТ.
              Ответить
              • http://gvforum.ru/viewtopic.php?pid=2071
                Ответить
                • ненавижу прыщи. Почему этот мир полон прыщей? Так господа мы коммунизм и человекоподобных роботов никогда не построим. Борманд про них только в аниме будет смотреть.
                  Ответить
                • > нельзя распаковывать его 7zip, winrar и т.п. - похерятся симлинки!)
                  Под виндой собирали? Там симлинки нормально сохранились? На фат разделе это даже не собрать?

                  > openssl, выполнив в msys'ной консоли
                  Ну как-то не модно. Нужно было все команды записать через &&. Шучу. Где make install или препаковка перед установкой в пакет?
                  Ответить
                  • > Под виндой собирали? Там симлинки нормально сохранились? На фат разделе это даже не собрать?
                    Не, под виндой tar -xf их тупо пропускает. Зато потом конфигур их пересоздает, если их нет. Так что соберется где угодно.

                    А жопа с 7z и winrar в том, что они эти симлинки извлекают из tar'а как файл, внутри которого написано имя объекта, на который ссылался симлинк. Конфигур видя эти файлы не заменяет их на копии нормальных. И все ломается.

                    > Где make install
                    Вопрос к авторам либы. Думаешь от хорошей жизни ручками копировали файлы от openssl? :)

                    > пакет?
                    msm что ли? Какие еще пакеты под виндой?
                    Ответить
                    • > Не, под виндой tar -xf их тупо пропускает.
                      Потестил еще раз - тупо делает копию файла. Даже на нтфс.
                      Ответить
                      • На винде с дефолтными настройками для создания симлинков нужны права админа.

                        P.S. Но вряд ли это спасёт tar.
                        Ответить
                        • >На винде с дефолтными настройками для создания симлинков нужны права админа.
                          ЧТОААА?
                          Ответить
                        • А как их там вообще создают? Есть какие-то консольные или гуишные средства?
                          Ответить
                          • mklink
                            Ответить
                          • NTFS Links для TC
                            Ответить
                          • Через гуй — никак. Только консолечка в срачло, только хардкор:
                            MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение
                            
                                    /D          Создание символической ссылки на каталог.
                                                По умолчанию создается символическая ссылка на файл.
                                    /H          Создание жесткой связи вместо символической ссылки.
                                    /J          Создание соединения для каталога.
                                    Ссылка      Имя новой символической ссылки.
                                    Назначение  Путь (относительный или абсолютный), на который ссылается
                                                новая ссылка.


                            Да, кстати, чем отличается /D (симлинк) от /J (джойн)?

                            Есть ещё вариант — сторонний софт. Виндоюзеры ищут софт для того, что должно быть из коробки.
                            Ответить
                    • А если виндопрогу захочу собрать под линём? msys и mingw ставить или msys и gcc?

                      > ./config shared
                      Вроде же обычно configure и что здесь означает shared?

                      > cp -r include c:/test/openssl-1.0.1g-inst
                      А что тут происходит?

                      > export ZLIB_PATH=c:/test/zlib-1.2.8
                      А тут?
                      Ответить
                      • > А если виндопрогу захочу собрать под линём?
                        То ты ебанулся. Тут и нативно то еле собирается, а ты еще кросскомпиляцию захотел...

                        > Вроде же обычно configure и что здесь означает shared?
                        Вопрос к авторам либы :) shared - то что собирать дллки, а не только статику.

                        > А что тут происходит?
                        Рекурсивное копирование, не?

                        > А тут?
                        Эм, переменную окружения замутили и экспортнули... Что не так?
                        Ответить
                        • > замутили и экспортнули
                          Ну это понятно. Я просто на виндовом set остановился. Меня интересует что значит экспортнули?

                          С остальными пунктами все ясно... То есть ты настоятельно рекомендуешь собирать под нужный таргет всегда на таргете? А как же всякие телефоны с эплом или андроидом? Не на них же самих собирать. Понятно что с моим последнем примером вопрос больше провокационный, но все же.
                          Ответить
                          • >Понятно что с моим последнем примером вопрос больше провокационный

                            Сам же и ответил.
                            Ответить
                            • Я торжественно обещаю не создавать аккаунт LinuxGovno.

                              PS: Как Борманд так быстро отвечает на комментарии? Неужели говнутифи?
                              Ответить
                          • >Меня интересует что значит экспортнули?
                            Передали в шелл из которого этот шелл запустили.

                            >А как же всякие телефоны с эплом или андроидом? Не на них же самих собирать.
                            А в чем проблема? Там гектар оперативы и хотя бы двухядерник.
                            Ответить
                            • > Передали в шелл из которого этот шелл запустили.
                              Не совсем... Если написать var=val, то переменная будет доступна только текущему шеллу, если экспортнуть - то и все запускаемым из него прогам.
                              Ответить
                              • Это же странно. Когда пишешь var=val, то по идеи это должно записываться в таблицу переменных окружения текущего процесса. При этом шел делает форк перед запуском нового дочернего процесса, а значит эта таблица наследуется и в дочерний процесс переменная попасть уже должна.
                                Ответить
                                • Кто сказал, что эти таблицы обязаны совпадать? :) Там когда exec делаешь, можешь вообще что угодно дочернему процессу передать.
                                  Ответить
                                • >var=val, то по идеи это должно записываться в таблицу переменных окружения текущего процесса.
                                  Нет, в случае шелла в окружение это не попадает.
                                  Ответить
                              • Судя по описанию выше:
                                > Передали в шелл из которого этот шелл запустили.
                                экспорт в текущем шеле приводит к наследованию потомками этой переменной окружения, а в родительском шеле это выглядит как var=val и при этом не наследуется его потомками, все верно? А что будет если я в своём приложении выполню например через stdlib.system var=val или export? Родительский шел что-нибудь узнает?
                                Ответить
                                • > Родительский шел что-нибудь узнает?
                                  Нет конечно. Передача односторонняя.

                                  Ибо передавать переменные окружения от детей к родителям несекурно и ненадежно. Получилась бы херня на порядок опасней чем register globals в php.

                                  P.S. А вот от передачи каких-нибудь структурированных результатов помимо stdout и exit code я бы не отказался ;)
                                  Ответить
                                  • Ну значит экспорт все-таки нифига не экспортирует переменные окружения предку? А я уж надеялся...
                                    Ответить
                                    • > не экспортирует переменные окружения предку
                                      Да как он это сделает то? :) Это же было бы страшное колдунство с IPC, да еще и работающее не всегда... Вдруг предок - другой шелл, или вообще не шелл, или тупо сдох...
                                      Ответить
                                  • Но в бате так и есть, баты изменяют переменные шелла, если не юзать setlocal
                                    Ответить
                                    • > баты изменяют переменные шелла
                                      Дык баты исполняются в том же шелле...

                                      Линупсовый аналог такого режима будет source script.sh вместо script.sh.
                                      Ответить
                                      • script.sh запускает новый шелл? ух ты
                                        Ответить
                                        • > script.sh запускает новый шелл? ух ты
                                          Ну да. Причем тот, который указан в шабанге запускаемого скрипта.
                                          Ответить
                                          • > script.sh
                                            То есть если я в своем шкрипте напишу только строку EXPORT блабла=бла, то это будет бесполезная лажа и я зря напишал этот шкрипт, тк оно выкинется в помойку по завершению шкрипта? А как это обойти, чтобы из шкрипта вызвать шкрипт и экшпорт в шкрипте-потомке попал в шкрипт предок?
                                            Ответить
                                            • > экшпорт в шкрипте-потомке попал в шкрипт предок
                                              Только через source child.sh. Больше никак.
                                              Ответить
                          • > То есть ты настоятельно рекомендуешь собирать под нужный таргет всегда на таргете?
                            Если есть такая возможность - да. Ибо кросскомпиляция по определению жопа, с которой не стоит связываться без уважительной причины.
                            Ответить
                            • Ну как же так... А я уже хотел уйти в подполье в линух. Достали мингвпроблемы уровня не работает нормально многопоточность или отставание на многоверсий от гцц. Там как раз лямбды с "выводом типов параметров" добавили.
                              Ответить
                    • > А сам бинарник curl'а в c:/test/curl-7.36.0/src
                      А что он там делает? Там же сырцы должны лежать.

                      > mingw32-make mingw32-ssl-zlib-srp
                      Это какой-то особый мингевешный мейк mingw32-make и мейк файл он берет из mingw32-ssl-zlib-srp?

                      А пакеты под линь приходилось собирать? Допустим хочу собрать deb. Например я к своей проге накатал руками мекфайл. Какие там ещё этапы важные? Или там это только начало и мне ещё придется накатать тонну прыщей?
                      Ответить
                      • > А что он там делает? Там же сырцы должны лежать.
                        Ну где собрали, там и лежит :) out of directory build я на винде не рискнул пробовать, да и он может тупо не поддерживаться кривожопыми самодельными конфигуряторами.

                        > мейк файл он берет из mingw32-ssl-zlib-srp
                        Это таргет. Файл у мейков задается через -f.

                        > Допустим хочу собрать deb. Например я к своей проге накатал руками мекфайл. Какие там ещё этапы важные?
                        Не, там совсем немного - описание, правила сборки и еще немного никому не нужного мусора типа чейнджлогов.
                        Ответить
                        • А как же SSH ключ где-то там регистрировать, майл, дифы и ещё что-то там...
                          Ответить
                          • Так ты для себя пакет собираешь (чтобы по сервакам растащить к примеру), или собрался в реальную репу пропихивать? :)

                            Если для себя - то все это нинужно.

                            Если пропихивать - то сборка деба всяко будет для тебя самой простой из проблем :)
                            Ответить
                            • > Если пропихивать - то сборка деба всяко будет для тебя самой простой из проблем :)

                              Вот кстати да. Тоже интересно. Вон в бусте жесткий контроль кода, документации, тесты, ждешь кодеревьювера пару лет и тд. А у этих как? Как они там бюрократничают в андроиде или в репах убунты? В конце концов можно свой репсервер наверное завести, если будет в ихних сильно жестко.
                              Ответить
                              • > в андроиде
                                В гуглплей - платишь 20 баксов и распространяешь что хочешь ;) Пока твою учетку не выпилят за вирей отправлялки смс и детский прон.

                                > в репах убунты?
                                Вроде как довольно жестко. Но полегче чем в бусте.
                                Ответить
                                • > и распространяешь что хочешь ;)
                                  Вирусы.
                                  Ответить
                                • Чтоо? Там за право аплоада надо платить?
                                  Ответить
                                  • > Чтоо? Там за право аплоада надо платить?
                                    Дык защита от школоты и прочих долбоёбов ;) Там и так то все засрано, представь что было бы, если бы можно было бесплатно выкладывать...

                                    Один раз в жизни заплатить 20 баксов это разве много? В виндовом маркете вроде как $40 было, тоже по сути копейки. А вот про iOS лучше забудь ;)
                                    Ответить
                                    • От школоты - мб, а от тех, кто своим троем 20 баксов в состоянии отбить - кагбе нет.
                                      Ответить
                                      • > а от тех, кто своим троем 20 баксов в состоянии отбить - кагбе нет
                                        Там вроде бы какой-то робот еще проверяет файлы. Ну и не все юзеры любят ставить проги с правами в духе "отправка SMS" и "чтение SMS".
                                        Ответить
                              • > в репах убунты?
                                Есть ещё такая штука - PPA. можно захостить свой репозиторий на сервере бубунты и заливать туда пакеты, потом на любой машине подключать его одной командой. Я себе завёл архивчик.
                                Ответить
                                • Я тоже думал где-нибудь такой поднять на вдс. Вообще я уже гуглил. Есть онлайн сервисы предоставляющие ПАПу. Думаю их зазать.

                                  > на сервере бубунты
                                  ЭЭэ. Апстор бубунты или убунту ван?
                                  Ответить
                        • Там ещё и какая-то дебилизация деабинизация что-бы он раскидывал по нужным папкам файлы. экзешники в одно. конфиги в другое. что-то где-то регистрировать. тригеры какие-то... что там за тригеры такие...
                          А ещё мне не понятно как он пакетный менеджер деинсталить будет мои файлы. мало ли что я куда напихал...
                          Ответить
                          • > Там ещё и какая-то дебилизация деабинизация что-бы он раскидывал по нужным папкам
                            Опять же - для внутренних нужд - всем похуй. Как удобней так и раскладывай. Можешь вообще в /opt/yourprogram захуярить, если лень читать доки.

                            > тригеры какие-то
                            Ну это уже advanced магия, если просто копирования файлов недостаточно, и надо что-то подкрутить после установки/перед удалением.

                            > А ещё мне не понятно как он пакетный менеджер деинсталить будет мои файлы. мало ли что я куда напихал...
                            Так он знает куда чего ложил при установке ;)
                            Ответить
                            • > Так он знает куда чего ложил при установке
                              Он слежение что-ли включает со стороны системы за моим инсталятором и записывает обратный лог для деинсталятора? Магия какая-то...

                              > надо что-то подкрутить после установки/перед удалением.
                              Типа как в винде 1% установлено обновлений перед загрузкой или перед выключением? Типа на это действие регистрируешь свой обработчик?

                              В моём мейкфайле вроде что-то собирается на моей конкретной машине, но как при сборке в пакет зафигачить зависимости от библиотек тех что нужно доставить дополнительно? И вообще как линух разруливает зависимости? На каждое приложение напихивает симлинки на файлы нужных версий в зависимости от того какие префиксы передал в мейкфайл приложения?
                              Ответить
                              • Дык тут тебе не венда, в которой инсталляторы делают что хотят... Если без триггеров, то максимум что оно сделает при установке - скопирует файлы в указанные места, и всё.

                                Ну вот например пост-установочный триггер пыхи рестартит апач, чтобы он подсосал новый модуль.

                                Зависимости пишутся как раз в тех дополнительных файликах. Собирается deb в специальном чистом окружении... Короче читай ман, если ты реально собрался пилить. А если не собрался - то нахуй тебе заморачиваться всем этим ;)

                                > И вообще как линух разруливает зависимости?
                                1) при установке тупо не дает ставить конфликтующие пакеты
                                2) да, у so'шек есть версии в названиях
                                Ответить
                                • С файликами понятно, а вот как быть с реальным процессом работы. Как одновременно разные версии библиотек уживаются на одном лине? И почему нужные приложения берут именно нужные версии динамических библиотек или вызывают нужные бинарники?

                                  А... Чистое окружение.. Чеашрутишь на пустую директорию. Типа никаких библиотек не поставлено, они накатываются на чистое окружение и вот у меня уже либа нужной версии в зависимостях. Но это работает только со статическими либами, а как это организовано для динамических? неужели и запускаются в почти чистом окружении о_О
                                  Ответить
                                  • Чистое окружение только для сборки - чтобы то что сейчас на твоей системе не влияло, и чтобы сборочные скрипты не насрали куда-попало...

                                    А насчет версий - там хитрая херня с именованием сошек. Лень с телефона рассказывать.... загугли если интересно.

                                    Вкратце - большинство либ обратно-совместимые, поэтому если одной проге надо 1.0.5, второй 1.0.7, а в системе стоит 1.1.5, то они обе будут ее юзать.
                                    Ответить
                                    • > телефона
                                      Как на этом можно на говнокоде сидеть... Никак не иначе лопата... Для лесенок то...

                                      > одной проге надо 1.0.5, второй 1.0.7, а в системе стоит 1.1.5, то они обе будут ее юзать.

                                      Как страшно жить... Мне кажется что-то линуксоиды не продумали. Но интересно, спасибо...
                                      Ответить
                                      • > Как страшно жить... Мне кажется что-то линуксоиды не продумали.
                                        В общем там есть такое соглашение, что либы с одинаковой мажорной версией обратно совместимы. Соблюдать его должен автор либы, не забывая проинкрементить т.н. soname, который вшивается в so'шку. Если не соблюдает - то он пидорас и вообще редиска.

                                        Например у libfuck.so.6.2.4 вшит soname libfuck.so.6. Если следующая версия несоместима - она должна называться к примеру libfuck.so.7.0.1 с soname = libfuck.so.7.

                                        В зависимости бинарников вкомпиливается не полная версия, а тот самый soname. Поэтому если прогу собирали с 6.2.4, то она будет работать и с 6.7.2 и с 6.3.5 (с 6.1.0 она работать не будет, и такую ситуацию не допустит пакетный менеджер: "или крестик сними ставь более старую прогу или трусы надень обновляй либу").

                                        А 6.2.5 и 7.3.5 могут стоять одновременно, не мешая друг другу.

                                        P.S. Блин, плохо поди объясняю?
                                        Ответить
                                        • > Блин, плохо поди объясняю?
                                          Не, вообще всё понятно. Тебе нужно что-то повышающее самоуверенность. Скилл не прокачен.(
                                          Ответить
                                          • >Тебе нужно что-то повышающее самоуверенность. Скилл не прокачен.(
                                            Только что вы могли наблюдать парадокс Даннинга-Крюгера живьём. Спасибо за внимание.
                                            Обратный пример на этом сайте полагаю тоже все видели.
                                            Ответить
                                            • По-моему, все наоборот.
                                              Ответить
                                              • Лол, менее чем через три минуты после моего поста прибежал сюда оправдываться, дескать "всё на самом деле не так".

                                                Я ж твой ник не упоминал. С чего это тебя так зацепило?
                                                Ответить
                                                • > С чего это тебя так зацепило
                                                  Да ты меня затраллел, лалка :)
                                                  Ответить
                                                • Где-то была картинка, где один человечек говорит другому "Мне не нравится X", тут подбегает третий, начинает кувыркаться и кричать "ололо, пукан порвало". Я думаю, все поняли, про кого это.
                                                  Ответить
                                                  • >> тут подбегает третий, начинает кувыркаться и кричать "ололо, пукан порвало"
                                                    >>Я думаю, все поняли, про кого это.
                                                    Конечно поняли.
                                                    http://govnokod.ru/15791#comment228425
                                                    http://govnokod.ru/12940#comment176220

                                                    s-a--m 8 дней назад #
                                                    Но тебе же так печет пукан от слова прыщееб

                                                    anonimb84a2f6fd141 02.05.2013 21:40 #
                                                    Блядь, да зашей ты уже себе пукан, что ты им в каждом треде сверкаешь, сучечка.
                                                    http://govnokod.ru/13413#comment187715
                                                    Ответить
                                                    • Мань, я логически не могу распарсить твой комент. AST формируется, а вот дальше - труба.
                                                      Ответить
                                                      • >я логически не могу распарсить твой комент

                                                        Это просто оттого что ты совершенно не обучен логике .
                                                        Ответить
                                      • >Мне кажется что-то линуксоиды не продумали.
                                        Есть еще LD_PRELOAD.
                                        Ответить
                                • > 1) при установке тупо не дает ставить конфликтующие пакеты

                                  Хз. Вон у меня куча питонов и Qt стоит. Как-то все вместе живут...

                                  > пост-установочный триггер пыхи рестартит апач
                                  А что он из себя представляет на системном уровне? Сигнал посикс? Я кроме названия просто про него ничего не знаю.

                                  А мне тут один линуксоид рассказывал, что линух очень крут и вообще разруливает конфликты версий библиотек через симлинки и позволяет заменять библиотеки которые сейчас используются! тоже посредством симлинков. Это тоже должен я в своем инсталяторе как-то обеспечивать, если допустим мне это понадобится?

                                  А ввобще исчерпывающее объяснение. Спасибо. Глядишь свой пакет соберу. Но нельзя собирать не по правилам. У меня начнется синдром незавершенности. Так что только деабинизация. :)
                                  Ответить
                                  • > позволяет заменять библиотеки которые сейчас используются
                                    Это сила и слабость линуха... mandatory lock'ов по умолчанию нет. Поэтому и можно творить такие непотребства как удаление открытых файлов...

                                    Триггер? Да просто набор команд, который надо выполнить в процессе установки.Вроде бы и все...
                                    Ответить
                                    • > как удаление открытых файлов...
                                      А что в этом плохого, если приложение не падает при этом все равно и может обращаться к старому файлу?
                                      Ответить
                                      • Иногда после ребута могут случиться сюрпризы.
                                        Ответить
                                    • >Поэтому и можно творить такие непотребства как удаление открытых файлов...
                                      почему непотребство? Замечательная вещь. Особенно, если у тубя открыто что-нибудь, что не хочет освобождать файл. Винда у меня частенько ругалась из-за того, что не могла удалить директории, т.к. они были открыты в других приложениях
                                      Ответить
                                      • > Винда у меня частенько ругалась
                                        У меня в Windows 8 довольно часто не хочет удалять папки из-за того, что кто-то использует служебные файлы типа thumbs.db. Иногда даже только что созданные папки так "застревают". Фиг знает, баг explorerа или вирус какой установился.
                                        Ответить
                                  • checkinstall в помощь
                                    Ответить
                                    • Это для школьников. Ну и вроде как пакет то он все равно не формирует и зависимости правильно не проверяет. Случись что посреди установки - откатить уж не удастся.
                                      Ответить
                                      • Пакет формирует, если не поставит то откатит.
                                        Ответить
                                        • Ты так говоришь как-будто перед запаковкой в пакет у чекинстолла нет минусов.
                                          Ответить
                                        • И вообще если ставить в неправильную папку, типа usr, то как будет работать система версий сошек, о которой выше рассказывал Борманд. Никак вестимо. В результате ничего кроме как откатить кривоустановленую либу ничего путного не удастся.
                                          Ответить
                                          • http://stackoverflow.com/questions/3839756/how-do-applications-resolve-to-different-versions-of-shared-libraries-at-run-tim
                                            Ответить
                                          • > как будет работать система версий сошек, о которой выше рассказывал Борманд. Никак вестимо
                                            Всё будет работать ;) Там есть /etc/ld.so.conf (и соотв. папка /etc/ld.so.conf.d) в которые можно дописать дополнительные папки для поиска либ. По умолчанию там /lib и /usr/lib.
                                            Ответить
                                          • Вот еще годная статейка: http://people.redhat.com/drepper/dsohowto.pdf
                                            Ответить
                        • > > мейк файл он берет из mingw32-ssl-zlib-srp
                          > Это таргет. Файл у мейков задается через -f.
                          А почему это вообще приходится собирать мингевешным мейком, а не стандартным гнутым? Как это вообще определить?
                          Ответить
                          • > А почему это вообще приходится собирать мингевешным мейком
                            Х.з., в мане по сборке так написано было, я и не стал выпендриваться. А вообще - mingw32-make и make это один и тот же файл. Чем меньше выпендриваешься - тем больше вероятность успеха ;)
                            Ответить
                    • >Не, под виндой tar -xf их тупо пропускает. Зато потом конфигур их пересоздает, если их нет. Так что соберется где угодно.
                      Блин, а зачем тогда писал?
                      Edit: дочитал
                      Ответить
                  • Зря вообще openssl собирали, отписал в треде.
                    Ответить
                    • cleaned
                      Ответить
                      • Вот кому заняться нечем ;)
                        Ответить
                      • лох стертор по-прежнему играет в эти куличики с минусиками
                        Ответить
                        • тсс... а вдруг он тебя... ЗАМИНУСУЕТ? Что ты тогда будешь делать?
                          Ответить
                        • cleaned
                          Ответить
                          • Давайте составим список мудаков и будем им ставить рейтинг, скажем, -3. Давайте составим список хороших людей, и у них всегда будет неотрицательный рейтинг.
                            Ответить
                          • Хм, действительно, комментарии обычные.
                            Видимо, не надо было приходить с войной и топить треды.

                            > Тема не актуальная, никто туда не заходит
                            Тут сток смотрят, потому неактуальная тема, куда никто не заходит - это свежий пост на главной с 0 комментариев :)
                            Ответить
                          • > http://govnokod.ru/15860#comment230005
                            Х.з., этот пост я не трогал.

                            > http://govnokod.ru/15852#comment230006
                            За пригорания от минусов.

                            > http://govnokod.ru/15817#comment230025
                            Стековерфлоу там >>>
                            Ответить
                            • cleaned
                              Ответить
                              • Я знаю, почему поставили минус. Кто-то ожидал, что стрелки будут в одном направлении.
                                Ответить
                                • cleaned
                                  Ответить
                                  • Неправильно. Нужно ещё подписать, что означает направление вверх, вниз, направления под другими углами и направления по нормали к плоскости монитора, а также приблизительные расстояния до цели.
                                    Ответить
                            • >Стековерфлоу там
                              Борманд, скажи честно, ты сам там хоть раз спрашивал?
                              Ответить
                      • >Я пишу глобальный минусатор, чтобы минусовать/плюсовать оппонентов/товарищей

                        Скажи мне кто твой друг, и я скажу кто ты.
                        Ответить
                        • cleaned
                          Ответить
                          • Ок. Только не надо обрушивать на меня свою страшную кару.
                            Я сейчас чуть не обосрался от страха что меня будут минусовать.
                            Ответить
                            • cleaned
                              Ответить
                              • Ехал минус через минус видит минус в реке минус сунул минус минус в минус минус минус минус минус.
                                Ответить
                      • >>>Прошу особо чувствительных купить трусы-дуршлаг.
                        Бугага три раза. А то я смотрю какой-то ты бесчувственный...
                        Ответить

    Добавить комментарий