Уменьшите сервер Ubuntu 12.04

Решения, опубликованные до сих пор, на мой взгляд, излишне сложны. Есть более простой способ. документация ui-router говорит, что слушайте $locationChangeSuccess и используйте $urlRouter.sync(), чтобы проверить переход состояния, остановить его или возобновить. Но даже это на самом деле не работает.

Однако, здесь есть две простые альтернативы. Выберите один:

Решение 1: прослушивание $locationChangeSuccess

Вы можете слушать $locationChangeSuccess и выполнять некоторую логику, даже асинхронную логику. Основываясь на этой логике, вы можете позволить функции возвращать неопределенное значение, что приведет к продолжению перехода состояния в нормальном режиме, или вы можете сделать $state.go('logInPage'), если пользователь должен пройти аутентификацию. Вот пример:

angular.module('App', ['ui.router'])

// In the run phase of your Angular application  
.run(function($rootScope, user, $state) {

  // Listen to '$locationChangeSuccess', not '$stateChangeStart'
  $rootScope.$on('$locationChangeSuccess', function() {
    user
      .logIn()
      .catch(function() {
        // log-in promise failed. Redirect to log-in page.
        $state.go('logInPage')
      })
  })
})

Имейте в виду, что это на самом деле не препятствует загрузке целевого состояния, но оно перенаправляет на страницу входа в систему, если пользователь не авторизован. Это нормально, так как настоящая защита на сервере, во всяком случае.

Решение 2: использование состояния resolve

В этом решении вы используете ui-router функцию разрешения .

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

Вот как это происходит:

angular.module('App', ['ui.router'])

.config(
  function($stateProvider) {
    $stateProvider
      .state('logInPage', {
        url: '/logInPage',
        templateUrl: 'sections/logInPage.html',
        controller: 'logInPageCtrl',
      })
      .state('myProtectedContent', {
        url: '/myProtectedContent',
        templateUrl: 'sections/myProtectedContent.html',
        controller: 'myProtectedContentCtrl',
        resolve: { authenticate: authenticate }
      })
      .state('alsoProtectedContent', {
        url: '/alsoProtectedContent',
        templateUrl: 'sections/alsoProtectedContent.html',
        controller: 'alsoProtectedContentCtrl',
        resolve: { authenticate: authenticate }
      })

    function authenticate($q, user, $state, $timeout) {
      if (user.isAuthenticated()) {
        // Resolve the promise successfully
        return $q.when()
      } else {
        // The next bit of code is asynchronously tricky.

        $timeout(function() {
          // This code runs after the authentication promise has been rejected.
          // Go to the log-in page
          $state.go('logInPage')
        })

        // Reject the authentication promise to prevent the state from loading
        return $q.reject()
      }
    }
  }
)

В отличие от первого решения, это решение фактически предотвращает загрузку целевого состояния.

2
задан 04.05.2020, 18:35

2 ответа

Возможно, лучше построить его от минимальной сборки вверх.

https://help.ubuntu.com/community/Installation/MinimalCD

Таким образом, у вас есть только необходимые зависимости, и вам не нужно отслеживать зависимости, на которые могут опираться некоторые пакеты при удалении других пакетов.

Нечто подобное будет начинаться с ядра и создавать его по мере необходимости.

https://wiki.ubuntu.com/Core/InstallationExample

Просто мысль.

2
ответ дан 04.05.2020, 18:36

Если вы создаете устройство (которое, скорее всего, фактически никому не нужно будет использовать - с точки зрения командной строки), вы можете просто начать с минимальной установки Ubuntu (около 80M в прошлый раз, когда я пытался, если я правильно помню) и просто установите нужные вам пакеты.

Это исключит всевозможные пакеты (включая такие вещи, как nano и завершение bash), так что это может быть довольно дезориентирующим для новых пользователей.

Я бы также предложил либеральное использование --no-install-recommends с вашими apt-get командами. И запустите apt-get clean, прежде чем сделать снимок.


Есть два способа достичь «минимальной» установки:


Я бы не советовал стучаться в coreutils. Там будет тонна команд, которые, как вы думаете, вам никогда не понадобятся, но они составляют килобайты. Все эти вещи зависят от этих команд, поэтому пакеты ядра зависят от него.

2
ответ дан 04.05.2020, 18:36
  • 1
    @Atomiklan Да, или можно использовать CD сервера. I' ve включил немного раздела как. – ionescho 04.05.2020, 18:37
  • 2
    Это - achomplished использование mini.iso, найденного в ссылке jmunsch рекомендуемый выше? – Adrian Hernandez-Lopez 04.05.2020, 18:37

Теги

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