Где я могу загрузить офлайновый установщик Cygwin?

Я много сделал, и да, это отстой.

Некоторые советы:

  • GroboUtils для запуска нескольких тестовых потоков
  • alphaWorks ConTest для классов инструментов, чтобы вызвать перемежение между итерациями
  • Создайте поле throwable и проверьте его в tearDown (см. листинг 1 ). Если вы поймаете плохое исключение в другом потоке, просто назначьте его throwable.
  • Я создал класс utils в листинге 2 и нашел его неоценимым, особенно waitForVerify и waitForCondition, что значительно повысит производительность вашего тесты.
  • Хорошо использовать AtomicBoolean в своих тестах. Это поточно-безопасный, и вам часто понадобится конечный ссылочный тип для хранения значений из классов обратного вызова и т. П. См. Пример в листинге 3.
  • Обязательно всегда давайте вашему тесту тайм-аут (например, @Test(timeout=60*1000)), поскольку тесты на параллелизм иногда могут зависать навсегда, когда они сломаны

Листинг 1:

@After
public void tearDown() {
    if ( throwable != null )
        throw throwable;
}

Листинг 2:

import static org.junit.Assert.fail;
import java.io.File;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Random;
import org.apache.commons.collections.Closure;
import org.apache.commons.collections.Predicate;
import org.apache.commons.lang.time.StopWatch;
import org.easymock.EasyMock;
import org.easymock.classextension.internal.ClassExtensionHelper;
import static org.easymock.classextension.EasyMock.*;

import ca.digitalrapids.io.DRFileUtils;

/**
 * Various utilities for testing
 */
public abstract class DRTestUtils
{
    static private Random random = new Random();

/** Calls {@link #waitForCondition(Integer, Integer, Predicate, String)} with
 * default max wait and check period values.
 */
static public void waitForCondition(Predicate predicate, String errorMessage) 
    throws Throwable
{
    waitForCondition(null, null, predicate, errorMessage);
}

/** Blocks until a condition is true, throwing an {@link AssertionError} if
 * it does not become true during a given max time.
 * @param maxWait_ms max time to wait for true condition. Optional; defaults
 * to 30 * 1000 ms (30 seconds).
 * @param checkPeriod_ms period at which to try the condition. Optional; defaults
 * to 100 ms.
 * @param predicate the condition
 * @param errorMessage message use in the {@link AssertionError}
 * @throws Throwable on {@link AssertionError} or any other exception/error
 */
static public void waitForCondition(Integer maxWait_ms, Integer checkPeriod_ms, 
    Predicate predicate, String errorMessage) throws Throwable 
{
    waitForCondition(maxWait_ms, checkPeriod_ms, predicate, new Closure() {
        public void execute(Object errorMessage)
        {
            fail((String)errorMessage);
        }
    }, errorMessage);
}

/** Blocks until a condition is true, running a closure if
 * it does not become true during a given max time.
 * @param maxWait_ms max time to wait for true condition. Optional; defaults
 * to 30 * 1000 ms (30 seconds).
 * @param checkPeriod_ms period at which to try the condition. Optional; defaults
 * to 100 ms.
 * @param predicate the condition
 * @param closure closure to run
 * @param argument argument for closure
 * @throws Throwable on {@link AssertionError} or any other exception/error
 */
static public void waitForCondition(Integer maxWait_ms, Integer checkPeriod_ms, 
    Predicate predicate, Closure closure, Object argument) throws Throwable 
{
    if ( maxWait_ms == null )
        maxWait_ms = 30 * 1000;
    if ( checkPeriod_ms == null )
        checkPeriod_ms = 100;
    StopWatch stopWatch = new StopWatch();
    stopWatch.start();
    while ( !predicate.evaluate(null) ) {
        Thread.sleep(checkPeriod_ms);
        if ( stopWatch.getTime() > maxWait_ms ) {
            closure.execute(argument);
        }
    }
}

/** Calls {@link #waitForVerify(Integer, Object)} with null
 * for {@code maxWait_ms}
 */
static public void waitForVerify(Object easyMockProxy)
    throws Throwable
{
    waitForVerify(null, easyMockProxy);
}

/** Repeatedly calls {@link EasyMock#verify(Object[])} until it succeeds, or a
 * max wait time has elapsed.
 * @param maxWait_ms Max wait time. null defaults to 30s.
 * @param easyMockProxy Proxy to call verify on
 * @throws Throwable
 */
static public void waitForVerify(Integer maxWait_ms, Object easyMockProxy)
    throws Throwable
{
    if ( maxWait_ms == null )
        maxWait_ms = 30 * 1000;
    StopWatch stopWatch = new StopWatch();
    stopWatch.start();
    for(;;) {
        try
        {
            verify(easyMockProxy);
            break;
        }
        catch (AssertionError e)
        {
            if ( stopWatch.getTime() > maxWait_ms )
                throw e;
            Thread.sleep(100);
        }
    }
}

/** Returns a path to a directory in the temp dir with the name of the given
 * class. This is useful for temporary test files.
 * @param aClass test class for which to create dir
 * @return the path
 */
static public String getTestDirPathForTestClass(Object object) 
{

    String filename = object instanceof Class ? 
        ((Class)object).getName() :
        object.getClass().getName();
    return DRFileUtils.getTempDir() + File.separator + 
        filename;
}

static public byte[] createRandomByteArray(int bytesLength)
{
    byte[] sourceBytes = new byte[bytesLength];
    random.nextBytes(sourceBytes);
    return sourceBytes;
}

/** Returns true if the given object is an EasyMock mock object 
 */
static public boolean isEasyMockMock(Object object) {
    try {
        InvocationHandler invocationHandler = Proxy
                .getInvocationHandler(object);
        return invocationHandler.getClass().getName().contains("easymock");
    } catch (IllegalArgumentException e) {
        return false;
    }
}
}

Листинг 3:

@Test
public void testSomething() {
    final AtomicBoolean called = new AtomicBoolean(false);
    subject.setCallback(new SomeCallback() {
        public void callback(Object arg) {
            // check arg here
            called.set(true);
        }
    });
    subject.run();
    assertTrue(called.get());
}

73
задан Srikanth 19 March 2009 в 11:58
поделиться

6 ответов

Если бы все, что Вы хотите, является инструментами командной строки UNIX, я предложил бы не установить Cygwin. Cygwin хочет превратить Ваш Windows PC в Рабочую станцию UNIX, которая является, почему ему нравится устанавливать все ее пакеты.

Взглянули на GnuWin32 вместо этого. Это - порты Windows инструментов командной строки и ничего иного. Вот установщик для GnuWin32 diff.exe. Существуют офлайновые установщики для всех общих инструментов .

(Вы попросили офлайновые установщики, но в случае, если Вы когда-либо хотите один позже, существует инструмент, который загрузит и установит все для Вас .)

Метод 2: сделайте офлайновый zip-файл установки для cygwin.

не смешивают с сохранением пакетов, потому что установленный каталог для cygwin может быть консервированным в zip-файле и расширенный каждый раз, когда Вам нужен он на любом компьютере.

  1. Загрузка установщик Cygwin

  2. пакеты выбора Вы хотите установленный от gui.

  3. установка хита и ожидают действительно долгое время всего для загрузки.

  4. на молнии C:\Cygwin folder. Теперь у Вас есть свой офлайновый zip-файл для установки cygwin на любой машине.

  5. Разархивировали этот файл на любом компьютере, который Вы любите. установите пути cmd.exe соответственно для указания на cygwin каталог bin под панелью управления окон.

20
ответ дан Community 7 November 2019 в 07:55
поделиться

Вот инструкции, принимающие Вам, хотят установить Cygwin на компьютере без Интернет-соединения. Я предполагаю, что у Вас есть доступ к другому компьютеру с Интернет-соединение. Запустите на подключенном компьютере:

  • Получают программу установки Cygwin ("setup.exe"). Прямой URL загрузки: x86 или x86_64.

  • , Когда установка просит "Выбирать источник загрузки", выбирают Download Without Installing

  • Go через остальную часть установки (выбирают каталог загрузки, зеркала, пакеты программного обеспечения, которые Вы хотите, и т.д.)

  • Теперь у Вас есть репозиторий Cygwin тут же на Вашем жестком диске. Скопируйте этот каталог, наряду с программой "setup.exe", к Вашему целевому компьютеру (это не должно быть в сети).

  • На целевом компьютере, выполненный "setup.exe"

  • , Когда установка просит "Выбирать источник загрузки", выбирают Install From Local Directory

  • Complete установка, как обычно. Никакой доступ в Интернет не требуется.

134
ответ дан user3566037 7 November 2019 в 07:55
поделиться

Не прямой ответ на Ваш вопрос, но можно получить обычно используемые утилиты от http://www.mingw.org/ , не имея необходимость переходить через обручи с тем ужасным установщиком Cygwin.

Вот немного более информативная ссылка http://sourceforge.net/apps/mediawiki/cobcurses/index.php?title=Install-MSYS .

5
ответ дан 7 November 2019 в 07:55
поделиться

Я не большой поклонник Cygwin. Хорошо, если у Вас есть некоторый код Unix, который требует полного система POSIX , я предполагаю. Даже тогда использование его представляет Ваши программы GPL (из-за DLL GPLed), если Вы не платите Red Hat для другой лицензии.

Большинство людей должно использовать MinGW (и MSYS) вместо этого. Это дает Вам оболочку Unix и утилиты (даже компиляторы, если Вы хотите их) без намеренно заразного DLL. Большинство людей, использующих компиляторы GNU в Windows, использует MinGW (хотя некоторые не понимают это).

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

страница загрузки SourceForge здесь . Я предложил бы запуститься с Системного пакета Основы MSYS, который даст Вам coreutils, , Bash, делают , tar , и т.д. Если существует другой материал, в котором Вы нуждаетесь, можно привередничать из списка пакетов.

-1
ответ дан Peter Mortensen 7 November 2019 в 07:55
поделиться

Возможно, это описание помогает Вам в Вашей задаче.

http://www.cygwin.com/ml/cygwin/2003-09/msg00041.html

3
ответ дан Tobias Langner 7 November 2019 в 07:55
поделиться

Существует другое решение для создания автономного установщика Cygwin, использующее pmcyg ( http://www.sourceforge.net/projects/pmcyg ). Если вы дадите pmcyg список пакетов Cygwin, которые вы хотели бы иметь доступными, он автоматически загрузит все из них, их зависимости и файл setup.exe в папку, которую затем можно записать на компакт-диск.

4
ответ дан 24 November 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: